我已经阅读了很多DPDK文档,但我很困惑它是支持还是鼓励中断。文件说明DPDK不使用中断,但我仍然能够注册中断并成功接收它们。
具体来说,我正在研究是否可以为DPDK应用程序编写用户级抢占式线程调度程序。为了创建它,我需要注册定时器中断。文档说DPDK不支持调度程序。
我看到DPDK有一个lthread抽象,但它的调度程序实现要求每个单独的lthread手动控制调度程序,而不是根据定时器中断自动将控制权转移回调度程序。
我看到了警报功能(在rte_alarm中),它根据轮询模拟计时器中断。但是,您需要另一个pthread来进行轮询,并且当前轮询pthread是运行回调函数的pthread(而我希望最初设置定时器的pthread运行回调函数)。
我不明白为什么当可以从操作系统注册实时定时器中断时,DPDK会实现不支持抢占的lthread抽象。使用某些对象时可能需要更加小心,例如无锁环缓冲区,但这是可管理的。
有人可以澄清DPDK支持的内容吗?
答案 0 :(得分:0)
DPDK支持来自UIO映射设备的中断,但目前它们主要用于链接状态更改或监视器。
有可能编写用户级抢占式线程调度程序,但DPDK的一个要点是避免中断和上下文切换。
DPDK支持使用OS调度程序支持lcore抢占,请参阅--lcores命令行参数:
http://dpdk.org/doc/guides/testpmd_app_ug/run_app.html
通过一些性能权衡,你可以使用动态创建的pthreads中的DPDK,如下所述:
http://dpdk.org/doc/guides/prog_guide/env_abstraction_layer.html#non-eal-pthread-support