是否可以配置DPDK,以使NIC在接收到数据包时发送一个中断(而不是关闭中断并在RX队列上进行核心轮询)?我知道这似乎违反直觉,但是我想到一个用例可以从中受益。
DPDK声称允许您对RX队列使用中断(您可以调用rte_eth_dev_rx_intr_enable
并将端口/队列对作为参数传递),但是在深入研究代码时,这似乎具有误导性。有一个轮询线程调用epoll_wait
,并在收到数据包后调用eal_intr_process_interrupts
。然后,此函数遍历一系列回调函数(应该是中断处理程序)并执行每个回调函数。然后,该函数再次调用epoll_wait
(即它处于无限循环中)。
我对DPDK如何处理“中断”的理解正确吗?换句话说,即使您打开“中断”,DPDK真的只是在后台轮询然后执行回调函数(因此没有中断)?
答案 0 :(得分:1)
我对DPDK如何处理“中断”的理解正确吗?
DPDK是一个用户空间应用程序。不幸的是,没有一种神奇的方法可以直接向用户空间应用程序接收中断回调。
因此,NIC中断可以通过任何方式在内核中得到服务,然后内核使用eventfd
通知用户空间。用户空间线程使用eventfd
等待epoll_wait
通知。
换句话说,即使您打开“中断”,DPDK真的只是在后台轮询然后执行回调函数(因此没有中断)?
如果没有要接收的数据,则DPDK轮询线程应在epoll_wait
上阻塞。