2.5. 增加 SoftIRQ 可在 CPU 上运行的时间


如果 SoftIRQ 没有运行足够长时间,则传入数据的速度可能会超过内核快速排空缓冲区的能力。因此,网络接口控制器(NIC)缓冲区溢出,数据包丢失。

如果 softirqd 进程无法在一个 NAPI 轮询周期中检索来自接口的所有数据包,则表示 SoftIRQ 没有足够的 CPU 时间。这种情况可能出现在具有快速 NIC 的主机上,如 10 Gbps 和更快。如果您增加了 net.core.netdev_budgetnet.core.netdev_budget_usecs 内核参数的值,则您可以控制 softirqd 在一个轮询周期内处理数据包的时间和数量。

流程

  1. 要确定是否需要调整 net.core.netdev_budget 参数,请显示 /proc/net/softnet_stat 文件中的计数:

    # awk '{for (i=1; i<=NF; i++) printf strtonum("0x" $i) (i==NF?"\n":" ")}' /proc/net/softnet_stat | column -t
    221951548  0  0      0  0  0  0  0  0  0  0  0  0
    192058677  0  20380  0  0  0  0  0  0  0  0  0  1
    455324886  0  0      0  0  0  0  0  0  0  0  0  2
    ...
    Copy to Clipboard Toggle word wrap

    awk 命令将 /proc/net/softnet_stat 中的值从十六进制转换为十进制格式,并以表格式显示它们。每行代表核 0 开始的 CPU 核。

    相关的列有:

    • 第一列:收到的总帧数。
    • 第三列:softirqd 进程不能在一个 NAPI 轮询周期中检索来自接口的所有数据包的次数。
    • 最后一列:CPU 核号。
  2. 如果 /proc/net/softnet_stat 文件的第三列中的计数随着时间而递增,请调优系统:

    1. 显示 net.core.netdev_budget_usecsnet.core.netdev_budget 参数的当前值:

      # sysctl net.core.netdev_budget_usecs net.core.netdev_budget
      net.core.netdev_budget_usecs = 2000
      net.core.netdev_budget = 300
      Copy to Clipboard Toggle word wrap

      使用这些设置,softirqd 进程在一个轮询周期内最多有 2000 微秒来处理最多 300 个来自 NIC 的消息。轮询根据首先满足哪个条件而结束。

    2. 使用以下内容创建 /etc/sysctl.d/10-netdev_budget.conf 文件:

      net.core.netdev_budget = 600
      net.core.netdev_budget_usecs = 4000
      Copy to Clipboard Toggle word wrap

      将参数设置为其当前值的两倍。

    3. /etc/sysctl.d/10-netdev_budget.conf 文件中加载设置:

      # sysctl -p /etc/sysctl.d/10-netdev_budget.conf
      Copy to Clipboard Toggle word wrap

验证

  • 监控 /proc/net/softnet_stat 文件中的第三列:

    # awk '{for (i=1; i<=NF; i++) printf strtonum("0x" $i) (i==NF?"\n":" ")}' /proc/net/softnet_stat | column -t
    Copy to Clipboard Toggle word wrap

    如果值还在增加,请将 net.core.netdev_budget_usecsnet.core.netdev_budget 设置为更高的值。重复此过程,直到计数不再增加。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat