从驱动程序中禁用 NIC 卡中的中断是否会停止数据包接收

Disabling interrupt in NIC card from driver does it stop packet reception

在 rtl 驱动程序中,我正在尝试研究在哪个内部初始化函数(pci_driver 探测函数相同)它禁用 irq。

所以我的问题是:如果我禁用中断,那么 NAPI(新的 API)会工作还是它也会停止,所以我在英特尔的以太网设备驱动程序中注意到了这一点。

所以问题是为什么禁用中断是有用的。

Interrut 与 New API 不同吗?如果不同,那么如何在 NAPI(新 API)中启用数据包接收。

是否有任何内核函数,或者我只是从内核调用 netif_napi_add 函数并写入设备,例如启用 napi 掩码。我到底需要用 writeb 或 family 写入设备。

我说的是 r8169 realtek 以太网设备的设备驱动程序

首先,NIC 中断不仅仅用于数据包接收。例如,考虑 link status change 中断,error 中断(当网络适配器需要通知主机 HW 错误时) 和其他“管家”的。中断服务的完整机制列表可能主要是特定于供应商的。我的观点是,人们可能不一定要禁用 all 中断;这样做可能会导致不必要的后果。

相对于Rx中断,常用的中断mitigation。这个想法是让 NIC 为 批次 数据包而不是为单个接收到的数据包生成 Rx 中断(或者,对于 更大的 批次比较到较小的)。这样,在给定时间间隔内生成的中断数量就会减少,从而减少 CPU 内核在 中断服务例程 中花费的时间( ISR).

另一方面,禁用 Rx 中断是一种完全不同的方法,这意味着内核本身会定期轮询驱动程序以检查新数据包。在这个方案中,不是网络适配器通过中断请求处理新数据包来“唤醒”内核;内核在认为必要时自行决定检查新数据包。这样,数据包接收变得更加高效,这就是 NAPI 背后的主要思想(New API ).

您正在研究的特定驱动程序有什么用,您可能不一定精通它的所有复杂性。最好针对特定的设备驱动程序提出单独的问题。