如何测试 linux NAPI 功能?

How to test linux NAPI feature?

我正在尝试在嵌入式 linux 环境中测试 NAPI 功能。我使用 'pktgen' 生成了大量数据包,并尝试在 /proc/interrupts.

验证我的网络接口的中断计数

我发现中断计数比生成的数据包要少。 此外,我正在尝试将“netdev_budget”的值从 1 调整到 1000(默认值为 300),以便我可以观察到 netdev_budget 时中断计数的减少增加了。

但是增加 netdev_budget 似乎没有帮助。中断类似于 netdev_budget 设置为 300 时观察到的中断计数。

所以这是我的查询:

  1. 'netdev_budget'对NAPI有什么影响?

  2. 我can/should调了哪些其他参数来观察中断计数的变化?

  3. 有没有其他方法可以用来测试 Linux 上的 NAPI 功能?(除了直接查看网络驱动程序代码)

非常感谢任何帮助。

提前致谢。

我写了一篇 comprehensive blog post about Linux network tuning,其中解释了有关监视、调整和优化 Linux 网络堆栈(包括 NAPI 权重)的所有内容。看一看。

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

请注意,如博客 post 及以下所述,在某些情况下会重新启用硬 IRQ。

就您的问题而言:

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

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

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

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

为什么你的 hardirq 速率很重要?应该没关系,直接上吧。 NIC 驱动程序中的 hardirq 处理程序应该做尽可能少的工作,所以它执行很多对你的系统来说可能不是问题。如果是,您应该仔细衡量它,因为它看起来不太可能。尽管如此,您可以调整 IRQ 合并设置和 IRQ CPU 亲和力以分配处理,以分别更改由 NIC 生成并由特定 CPU 处理的 hardirq 的数量。

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

记住:要完全调整和优化您的 Linux 网络堆栈,您必须监控和调整每个组件。它们都是交织在一起的,很难(而且通常是不够的)仅监视和调整堆栈的一个方面。