linux - 如何测试 linux NAPI 功能?

标签 linux networking linux-device-driver embedded-linux ethernet

我正在尝试在嵌入式 linux 环境中测试 NAPI 功能。我使用“pktgen”生成大量数据包,并尝试在 /proc/interrupts 验证我的网络接口(interface)的中断计数。

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

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

所以这是我的问题:

  1. “netdev_budget”对 NAPI 有什么影响?

  2. 我可以/应该调整哪些其他参数来观察中断计数的变化?

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

非常感谢任何帮助。

提前致谢。

最佳答案

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

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

请注意,硬 IRQ 在某些情况下会重新启用,如博文和下文所述。

就您的问题而言:

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

  2. 如果 NIC 受支持,您还可以尝试修改 NIC 的 IRQ 合并设置。有关如何执行此操作以及这究竟意味着什么的更多信息,请参阅上面的博客文章。

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

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

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

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

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

关于linux - 如何测试 linux NAPI 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38224769/

相关文章:

asp.net - 如何在linux上启动asp.net core服务器并保持运行

java - 如何从方法级别范围检索值?

c - 我无法在这个简单的设备驱动程序模块中使用 echo 和 cat 。

python - 运行 sudo pip install 超时

linux - 尝试延长 USB 生命周期

c++ - 如何以符合标准的方式实现 C++ 插件?

linux - 如果您在一个 eth 设备上设置了多个 ip,那么端口是否允许为 1 个 eth 或 1 个 ip 共享?

java - Android AsyncTask #2 调用 detach()

linux - i2cdetect 在 goodix 芯片上找不到任何东西

c - omap-4460 的 UART4 基址