DPDK-中断而不是轮询

时间:2018-12-22 02:19:20

标签: dpdk

是否可以配置DPDK,以使NIC在接收到数据包时发送一个中断(而不是关闭中断并在RX队列上进行核心轮询)?我知道这似乎违反直觉,但是我想到一个用例可以从中受益。

DPDK声称允许您对RX队列使用中断(您可以调用rte_eth_dev_rx_intr_enable并将端口/队列对作为参数传递),但是在深入研究代码时,这似乎具有误导性。有一个轮询线程调用epoll_wait,并在收到数据包后调用eal_intr_process_interrupts。然后,此函数遍历一系列回调函数(应该是中断处理程序)并执行每个回调函数。然后,该函数再次调用epoll_wait(即它处于无限循环中)。

我对DPDK如何处理“中断”的理解正确吗?换句话说,即使您打开“中断”,DPDK真的只是在后台轮询然后执行回调函数(因此没有中断)?

1 个答案:

答案 0 :(得分:1)

  

我对DPDK如何处理“中断”的理解正确吗?

DPDK是一个用户空间应用程序。不幸的是,没有一种神奇的方法可以直接向用户空间应用程序接收中断回调。

因此,NIC中断可以通过任何方式在内核中得到服务,然后内核使用eventfd通知用户空间。用户空间线程使用eventfd等待epoll_wait通知。

  

换句话说,即使您打开“中断”,DPDK真的只是在后台轮询然后执行回调函数(因此没有中断)?

如果没有要接收的数据,则DPDK轮询线程应在epoll_wait上阻塞。