0

我已经阅读了大量的 DPDK 文档,但我对它是否支持或鼓励中断感到困惑。文档直截了当地说 DPDK 不使用中断,但我仍然能够注册中断并成功接收它们。

具体来说,我正在研究是否可以为 DPDK 应用程序编写用户级抢占式线程调度程序。为了创建它,我需要注册定时器中断。文档说 DPDK 不支持调度程序。

我看到 DPDK 有一个 lthread 抽象,但它的调度程序实现需要每个单独的 lthread 手动将控制权交给调度程序,而不是根据计时器中断将控制权自动转移回调度程序。

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

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

有人可以澄清 DPDK 支持什么吗?

4

1 回答 1

0

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

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

DPDK 确实支持使用 OS 调度程序的 lcore 抢占,请参考 --lcores 命令行参数:

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

通过一些性能权衡,您可以从动态创建的 pthread 中使用 DPDK,如下所述:

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

于 2017-05-05T17:30:35.407 回答