2017-04-23 72 views
0

我已阅读了很多DPDK文档,但我对它是否支持或鼓励中断感到困惑。该文件表明,DPDK不使用中断,但我仍然能够注册中断并成功接收它们。在DPDK应用程序中编写抢先式用户级线程调度程序时的注意事项

具体而言,我正在研究是否可以为DPDK应用程序编写用户级别的抢占线程调度程序。为了创建这个,我需要注册定时器中断。该文件说DPDK不支持调度程序。我看到DPDK有一个lthread抽象,但是它的调度程序实现要求每个单独的lthread手动地将调度控制权交给调度程序,而不是根据定时器中断自动转移回调度程序。

我看到了警报功能(在rte_alarm中),它基于轮询来模拟定时器中断。但是,您需要另一个pthread来执行轮询,并且当前轮询pthread是运行回调函数的那个​​(而我想要最初设置计时器的pthread运行回调函数)。

我不明白为什么DPDK可以实现一个不支持抢占的lthread抽象,当它可以注册来自操作系统的实时定时器中断时。使用某些物体时,您可能必须更加小心,例如无锁环形缓冲区,但这是可以管理的。

有人可以提供什么DPDK支持的澄清?

回答

0

DPDK支持来自UIO映射设备的中断,但目前它们主要用于链接状态更改或看门狗。

编写用户级抢占式线程调度器可能是可能的,但DPDK的一个要点是避免中断和上下文切换。

DPDK不使用操作系统调度支持L核心抢占,请参阅该--lcores命令行参数:

http://dpdk.org/doc/guides/testpmd_app_ug/run_app.html

随着一些性能权衡,你可以使用DPDK从动态创建的并行线程描述这里:

http://dpdk.org/doc/guides/prog_guide/env_abstraction_layer.html#non-eal-pthread-support

相关问题