关于这个主题,我浏览了多篇文章(在 Stackoverflow 内外)。目前,我正在为 Intel X710 NIC 修改 i40e-2.0.30 驱动程序。
多亏了这篇插图博文(https://blog.packagecloud.io/eng/2016/06/22/monitoring-tuning-linux-networking-stack-receiving-data/),理解驱动代码变得容易多了。
我的帖子特别关注 NAPI Poll 机制。我了解当数据包到达时会触发 NAPI Poll 功能,如果接收数据包时完成的工作量超过分配的预算,NAPI Polling 将继续;否则轮询停止。
根据这些信息,我修改了我的驱动程序以保持轮询数据的特定签名是否到达特定队列(使用流导向器),例如端口 XXX 上的 UDP 数据包 10,000 个轮询周期。但是,我试图尽可能地消除中断的可能性。
因此,这是我的主要问题。我可以安排在某个时间点执行 NAPI 轮询吗?就像,我希望每 500 毫秒执行一次 NAPI 轮询,并且可能持续 20 毫秒。例如,我将在时间T ms等待我的数据包,而我可能在时间(T-10) ms开始轮询并在(T + 10) ms停止轮询。这可能,我也许可以减少中断的使用。现在,我每 10,000 个轮询周期就重置一次中断。
对此的任何解释或参考都会非常有帮助。
谢谢,库沙尔。