微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

在 rtl 驱动程序中,我试图研究在哪个内部 init 函数(pci_driver 探测函数相同)中禁用了 irq。

所以我的问题是:如果我禁用中断,那么 NAPI(新 API)是否有效,或者它也基本停止,就像我在英特尔的以太网设备驱动程序中注意到的一样。

那么问题是为什么禁用中断很有用。

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

是否有任何内核函数,或者我只是从内核调用 netif_napi_add 函数并向设备写入诸如启用 napi 掩码之类的内容。我到底必须用 writeb 或 family to device 写入设备。

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

解决方法

首先,NIC 中断不仅仅用于数据包接收。例如,想想链接状态改变中断、错误中断(当网络适配器需要通知主机硬件错误时)和其他“内务”中断。中断服务的完整机制列表可能主要是特定于供应商的。我的观点是,人们可能不一定要禁用所有中断;这样做可能会导致不必要的后果。

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。