我正试图理解Linux内核中的NAPI实现。这些是我基本的疑问。NAPI中断禁用和处理共享中断线
1)NAPI禁止进一步的中断,并处理skbs'使用轮询
- 谁禁止呢?
中断处理程序是否应该禁用它?
如果是 - 禁用中断和处理实际轮询完成的SOFTIRQ net_rx_action之间的时间间隔不是太大。
2)默认在下半区使用轮询接收单个帧禁止中断,处理剩余的帧的所有NAPI启用驱动程序? 还是有一个逻辑,只有当帧> 32(连续接收IRQ处理程序中的所有帧)切换到轮询模式?
3)现在来共享IRQ -
- 发生了什么其它设备的中断,其他设备下半部分可能无法运行,因为这些设备是不存在的poll_list。
谢谢理解1&2,但是3我还不清楚,比如说NIC 1和NIC 2共享IRQ线,让我们假设NIC 1是低负载,NIC 2高负载,NIC 1接收中断,NIC 1的驱动程序将会禁用中断,直到它处理了softirq,并将时间间隔称为t1。因此,对于时间t1,NIC 2中断被禁用,对吧? – Pramod
@Pramod,啊行。我更新了上面的答案 - 让我知道是否有帮助。对不起,我误解你在问什么。您想知道两台共享IRQ的设备如何禁用IRQ以开始使用NAPI而不会阻塞其他设备。是对的吗?如果是这样,我认为我的补充信息解释了这一点。 –
@Pramod我刚刚做了另一次更新并链接到了intel IGB源,因此您可以看到它是如何禁用该NIC的中断的。 –