Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 计划按固定时间间隔执行NAPI轮询_C_Linux_Linux Kernel_Polling_Network Driver - Fatal编程技术网

C 计划按固定时间间隔执行NAPI轮询

C 计划按固定时间间隔执行NAPI轮询,c,linux,linux-kernel,polling,network-driver,C,Linux,Linux Kernel,Polling,Network Driver,关于这个话题,我已经看过多篇文章(在Stackoverflow内外)。目前,我正在为英特尔X710 NIC修改i40e-2.0.30驱动程序 多亏了这篇有插图的博客文章(),理解驱动程序代码变得容易多了 我的帖子特别关注NAPI投票机制。我了解,当数据包到达时,NAPI轮询功能被触发,如果在接收数据包时完成的工作量超过分配的预算,NAPI轮询将继续;其他投票站 基于此信息,我修改了我的驱动程序,以便在数据的特定签名到达特定队列(使用flow director)时保持轮询,例如,端口XXX上的UD

关于这个话题,我已经看过多篇文章(在Stackoverflow内外)。目前,我正在为英特尔X710 NIC修改i40e-2.0.30驱动程序

多亏了这篇有插图的博客文章(),理解驱动程序代码变得容易多了

我的帖子特别关注NAPI投票机制。我了解,当数据包到达时,NAPI轮询功能被触发,如果在接收数据包时完成的工作量超过分配的预算,NAPI轮询将继续;其他投票站

基于此信息,我修改了我的驱动程序,以便在数据的特定签名到达特定队列(使用flow director)时保持轮询,例如,端口XXX上的UDP数据包持续10000个轮询周期。但是,我正在尽可能地消除中断的可能性

因此,这里是我的主要问题。我是否能够安排在某个时间点执行NAPI投票?比如,我希望NAPI轮询每500毫秒执行一次,可能持续20毫秒。 例如,我将在时间T ms等待我的数据包,而我可能在时间(T-10)ms开始轮询,并在时间(T+10)ms停止轮询。这可能,我可能能够减少中断的使用。现在,我每10000个轮询周期重置一次中断

对此的任何解释或参考都会非常有用

谢谢,
Kushal.

“例如端口XXX上的UDP数据包”--为什么以太网控制器的驱动程序与TCP/UDP端口有关?您似乎没有维护TCP/IP模型或适当的代码模块化。“我正在尽可能地消除中断的可能性。”——你的目标被误导了。您可能会降低(而不是提高)性能。看@sawdust:嘿!谢谢你的回复。我在给定的url中也看到了你的答案。我的目标是在两台主机之间建立同步通信,并在接收端提供上限抖动。这就是原因,我正试图消除尽可能多的中断。Flow Director示例可能是同步通信所需的心跳。为了更深入地理解,我会再看一遍你的答案。再次感谢@sawdust,我在这个周末尝试了几件事情。我尝试定期调用NAPI调度和NAPI轮询。因此,我的目的是尽量避免Rx中断,而是在预期的数据包到达时间(例如,每500毫秒)调用NAPI轮询。我尝试在每个时间间隔事件上调用napi_计划。好像不是那样的。有什么建议吗?还是我在尝试错误的方法?任何输入/反馈都是有价值的。谢谢。你看过内核源代码的例子吗?这本书很方便。你追求“尽可能避免Rx中断”在我看来是错误的,因为这不是NAPI的目的。也许您应该连接一个以太网集线器,并使用Wireshark(在另一台PC上)来监控进出目标主机的以太网流量。似乎您不了解其他协议的存在,如ARP、ICMP和DHCP,它们会生成意外的帧。嗯,您是对的。这就是我一直通过将端口设置为混杂模式来测试设置的原因。这与wireshark出于监控目的所做的类似。是的,我最近一直在研究内核源代码。不知何故,我的流程/步骤中肯定存在缺陷。我正试图弄明白这一点。非常感谢。如果我发现了一些问题,我将进一步发帖。“例如,端口XXX上的UDP数据包”——为什么以太网控制器的驱动程序与TCP/UDP端口有关?您似乎没有维护TCP/IP模型或适当的代码模块化。“我正在尽可能地消除中断的可能性。”——你的目标被误导了。您可能会降低(而不是提高)性能。看@sawdust:嘿!谢谢你的回复。我在给定的url中也看到了你的答案。我的目标是在两台主机之间建立同步通信,并在接收端提供上限抖动。这就是原因,我正试图消除尽可能多的中断。Flow Director示例可能是同步通信所需的心跳。为了更深入地理解,我会再看一遍你的答案。再次感谢@sawdust,我在这个周末尝试了几件事情。我尝试定期调用NAPI调度和NAPI轮询。因此,我的目的是尽量避免Rx中断,而是在预期的数据包到达时间(例如,每500毫秒)调用NAPI轮询。我尝试在每个时间间隔事件上调用napi_计划。好像不是那样的。有什么建议吗?还是我在尝试错误的方法?任何输入/反馈都是有价值的。谢谢。你看过内核源代码的例子吗?这本书很方便。你追求“尽可能避免Rx中断”在我看来是错误的,因为这不是NAPI的目的。也许您应该连接一个以太网集线器,并使用Wireshark(在另一台PC上)来监控进出目标主机的以太网流量。似乎您不了解其他协议的存在,如ARP、ICMP和DHCP,它们会生成意外的帧。嗯,您是对的。这就是我一直通过将端口设置为混杂模式来测试设置的原因。这与wireshark出于监控目的所做的类似。是的,我最近一直在研究内核源代码。不知何故,我的流程/步骤中肯定存在缺陷。我正试图弄明白这一点。非常感谢。如果我发现了什么,我会发布更多的信息。