如何测试linux NAPI功能?

如何测试linux NAPI功能?

我正在尝试测试国家应用程序接口嵌入式linux环境下的功能。我用了 'PKTGEN' 生成大量数据包并尝试验证我的网络接口的中断计数/proc/中断

我发现中断计数相对少于生成的数据包。我也在尝试调整'网络开发预算' 值来自11000(默认为300)这样我就可以观察到 netdev_budget 增加时中断计数的减少。

然而,增加 netdev_budget 似乎没有帮助。该中断与 netdev_budget 设置为 300 时观察到的中断计数类似。

这是我的疑问:

  1. “netdev_budget”对 NAPI 有什么影响?
  2. 我可以/应该调整哪些其他参数来观察中断计数的变化?
  3. 有没有其他方法可以用来在 Linux 上测试 NAPI 功能?(除了直接查看网络驱动程序代码之外)

任何帮助深表感谢。

提前致谢。

答案1

我写了一个有关 Linux 网络调优的综合博客文章它解释了有关监视、调整和优化 Linux 网络堆栈(包括 NAPI 权重)的所有内容。看一看。

请记住:一些驱动程序不要NAPI 启动时禁用 NIC 的 IRQ。他们应该这样做,但有些人根本不这样做。您可以通过检查驱动程序中的硬 IRQ 处理程序以查看硬 IRQ 是否被禁用来验证这一点。

请注意,正如博客文章和下文中提到的,在某些情况下,硬 IRQ 会重新启用。

至于你的问题:

  1. 增加netdev_budget会增加 NET_RX 软中断可以处理的数据包数量。可以处理的数据包数量也受到时间限制的限制,该时间限制是不可调整的。这是为了防止 NET_RX 软中断占用 100% 的 CPU 使用率。如果设备在其时间分配期间没有收到足够的数据包来处理,则硬中断重新启用并且 NAPI 被禁用。

  2. 您还可以尝试修改 NIC 的 IRQ 合并设置(如果支持)。请参阅上面的博客文章,了解有关如何执行此操作及其确切含义的更多信息。

  3. 您应该将监控添加到您的/proc/net/softnet_stat文件中。该文件中的字段可以帮助您了解正在处理的数据包数量、是否超时等。

如果可以的话,请您考虑一个问题:

为什么你的硬中断率很重要?直接说应该没啥关系吧NIC 驱动程序中的 Hardirq 处理程序应该执行尽可能少的工作,因此它执行大量操作对于您的系统来说可能不是问题。如果是,您应该仔细衡量,因为这似乎不太可能。不过,您可以调整 IRQ 合并设置和 IRQ CPU 关联性来分配处理,从而分别更改 NIC 生成的硬中断数量和特定 CPU 处理的硬中断数量。

您应该考虑您是否对数据包处理吞吐量或数据包处理延迟更感兴趣。根据所关心的问题,您可以适当地调整您的网络堆栈。

请记住:要完全调整和优化您的 Linux 网络堆栈,您必须监视和调整每个组件。它们都是相互交织的,并且很难(并且通常是不正确的)仅监视和调整堆栈的单个方面。

相关内容