我试图在嵌入式Linux环境中测试NAPI功能.我使用’pktgen’生成大量数据包,并尝试在/ proc / interrupts验证我的网络接口的中断计数.
我发现中断计数比生成的数据包要少.
此外,我试图将’netdev_budget’值从1调整为1000(默认值为300),这样我可以观察到netdev_budget增加时中断计数的减少.
但是增加netdev_budget似乎没有帮助.中断类似于netdev_budget设置为300时观察到的中断计数.
所以这是我的疑问:
>’netdev_budget’对NAPI的影响是什么?
>我可以/应该调整哪些其他参数来观察中断计数的变化?
>我有没有其他方法可以用来测试Linux上的NAPI功能?(除了直接查看网络驱动程序代码)
任何帮助都是很有帮助的.
提前致谢.
解决方法:
我写了一个comprehensive blog post about Linux network tuning,它解释了有关监控,调优和优化Linux网络堆栈(包括NAPI权重)的所有内容.看一看.
请记住:当NAPI启动时,某些驱动程序不会禁用NIC中的IRQ.他们应该这样做,但有些根本就没有.您可以通过检查驱动程序中的硬IRQ处理程序来验证这一点,以查看是否正在禁用硬IRQ.
请注意,在某些情况下会重新启用硬IRQ,如博客文章及下文所述.
至于你的问题:
>增加netdev_budget会增加NET_RX softirq可以处理的数据包数量.可以处理的数据包数量也受限制,该时间限制不可调.这是为了防止NET_RX softirq占用100%的CPU使用率.如果设备在其时间分配期间没有收到足够的数据包进行处理,则会重新启用hardirq并禁用NAPI.
>如果支持,您还可以尝试修改NIC的IRQ合并设置.请参阅上面的博客文章,了解有关如何执行此操作以及这意味着什么的更多信息.
>您应该将监视添加到/ proc / net / softnet_stat文件中.此文件中的字段可以帮助您确定正在处理的数据包数量,是否时间不足等.
如果我愿意,你可以考虑一个问题:
为什么你的hardirq率很重要?它可能没关系,直接. NIC驱动程序中的hardirq处理程序应该尽可能少地工作,因此执行很多操作可能不是系统的问题.如果是,你应该仔细测量,因为它似乎不太可能.不过,您可以调整IRQ合并设置和IRQ CPU亲和性,以分配处理,以分别改变由NIC生成并由特定CPU处理的硬件数量.
您应该考虑是否可能对数据包处理吞吐量或数据包处理延迟更感兴趣.根据所关注的问题,您可以适当地调整网络堆栈.
请记住:要完全调整和优化Linux网络堆栈,您必须监视和调整每个组件.它们都交织在一起,很难(通常也不够)监视和调整堆栈的单个方面.