当前位置: 首页 > news >正文

【网络】Linux 内核优化实战 - net.core.netdev_budget_usecs

目录

      • 核心功能
      • 工作原理
      • 与 `net.core.netdev_budget` 的关系
      • 配置方式
        • 1. 临时配置(重启失效)
        • 2. 永久配置(重启生效)
      • 适用场景与调优建议
        • 适用场景:
        • 调优建议:
      • 注意事项
      • 总结

net.core.netdev_budget_usecs 是 Linux 内核中用于优化网络数据包处理效率的关键参数,主要与 NAPI(New API)机制 配合,控制内核在一次轮询中处理网络数据包的 最大时间限制(单位为微秒)。以下是详细解析:

核心功能

NAPI 是内核处理网络数据包的高效机制:当网卡收到数据时,先触发一次硬件中断,随后进入“轮询模式”批量处理数据包,避免频繁中断带来的性能损耗。
net.core.netdev_budget_usecs 用于限制 单次 NAPI 轮询的最长持续时间。若在该时间内数据包未处理完毕,内核会暂停轮询,将剩余数据留到下一次软中断(softirq)时处理,以平衡网络处理效率与系统其他任务的 CPU 占用。

工作原理

  1. 触发轮询:网卡收到数据包后,触发硬件中断,内核启动 NAPI 轮询。
  2. 时间限制:内核在轮询中处理数据包时,会实时监控耗时。若达到 net.core.netdev_budget_usecs 设定的时间(如 1000 微秒),即使仍有未处理的数据包,也会停止轮询。
  3. 延迟处理:未处理的数据包会被标记,等待下一次软中断触发时继续处理,避免长时间占用 CPU 影响其他进程。

这一机制的核心是 防止网络处理独占 CPU,尤其在高流量场景下,避免因数据包过多导致系统响应变慢。

net.core.netdev_budget 的关系

两者均用于限制 NAPI 轮询,但维度不同:

  • net.core.netdev_budget:限制单次轮询处理的 最大数据包数量(默认 300)。
  • net.core.netdev_budget_usecs:限制单次轮询的 最大时间(默认 0,即不限制时间,仅受 netdev_budget 数量限制)。

协同作用:若同时设置,轮询会在“达到最大包数”或“达到最大时间”时停止(取先满足的条件)。例如,高带宽场景下,大数据包可能在短时间内达到数量限制,而小包可能因数量多触发时间限制。

配置方式

1. 临时配置(重启失效)
sysctl -w net.core.netdev_budget_usecs=1000  # 设为 1000 微秒(1 毫秒)
2. 永久配置(重启生效)

编辑 /etc/sysctl.conf/etc/sysctl.d/ 下的配置文件,添加:

net.core.netdev_budget_usecs = 1000

执行 sysctl -p 使配置生效。

适用场景与调优建议

适用场景:
  • 高流量网络环境:如服务器处理大量并发请求(Web 服务、数据库集群),需防止网络处理占用过多 CPU。
  • 延迟敏感场景:当系统同时运行网络任务和其他实时任务(如监控、调度)时,通过时间限制避免网络处理阻塞其他任务。
调优建议:
  • 默认值为 0:表示仅受 netdev_budget 数量限制。若网络流量大且数据包小(如高频小请求),可能导致轮询时间过长,需设置一个合理时间(如 500~2000 微秒)。
  • 避免设置过大:若时间过长(如超过 10 毫秒),可能导致 CPU 被网络处理长期占用,系统响应延迟增加。
  • 结合硬件性能:根据 CPU 算力调整,高性能服务器可适当提高(如 2000 微秒),低性能设备需降低(如 500 微秒)。

注意事项

  • 默认值为 0:即不限制时间,此时仅由 netdev_budget 控制包数量。若需启用时间限制,需手动设置为大于 0 的值。
  • 内核版本要求:该参数在 Linux 内核 3.11 及以上版本支持,老版本可能无此参数。
  • 需配合测试:不同业务场景(如大文件传输 vs 实时通信)对时间的敏感度不同,需通过压力测试(如 iperftcpreplay)确定最优值。

总结

net.core.netdev_budget_usecs 是控制 NAPI 轮询时间的关键参数,通过限制单次网络处理的最长耗时,平衡网络性能与系统整体响应性。在高流量或延迟敏感场景下,需结合 netdev_budget 共同配置,避免 CPU 资源过度占用,优化系统稳定性。

http://www.lryc.cn/news/578848.html

相关文章:

  • VSCode-Copilot的系统提示词
  • mac mini m4安装node.js@16以下版本方法
  • Linux下MinIO分布式安装部署
  • REST API设计与Swagger:构建高效、易用的Web服务
  • 如何设置电脑定时休眠?操作指南详解
  • STM32 使用 TinyUSB
  • 【leetcode算法300】:哈希板块
  • 【RTSP从零实践】6、实现最简单的同时传输H264、AAC的RTSP服务器
  • SpringCloud系列(46)--SpringCloud Bus实现动态刷新全局广播
  • 免费版安全性缩水?ToDesk、TeamViewer、向日葵、网易UU远程访问隐私防护测评
  • 2025 年网络钓鱼威胁“狂飙”:如何筑牢防线?
  • 【记录】基于 C++ 和 Winsock 的简单 TCP 通信实现
  • 【Java面试】讲讲Redis的Cluster的分片机制
  • 企智汇研发项目管理系统:软件企业降本增效的数智化解决方案!
  • 蓝桥杯 滑行
  • 蓝桥杯51单片机设计
  • 深入理解装饰器模式:动态扩展对象功能的灵活设计模式
  • [特殊字符] Excel 提取+图片批量插入 | Python 自动化生成稽查报告 Word 模板
  • 基于Java+SpringBoot的图书管理系统
  • 多云密钥统一管理实战:CKMS对接阿里云/华为云密钥服务
  • 分布式定时任务:Elastic-Job-Lite
  • GC393低功耗双电压比较器:精准、高效的信号处理解决方案
  • Axure版ArcoDesign 组件库-免费版
  • OpenCV CUDA模块设备层-----高效地计算两个uint 类型值的平均值函数vavg2()
  • Centos系统及国产麒麟系统设置自己写的go服务的开机启动项完整教程
  • 开源 | V3.1.1慧知开源重卡运营充电桩平台 - 重卡运营充电桩平台管理解决方案;企业级完整代码 多租户、模拟器、多运营商、多小程序;
  • Chrome 下载文件时总是提示“已阻止不安全的下载”的解决方案
  • DQL-1-基础查询
  • 技术学习_大语言模型
  • 大数据平台与数据中台:从概念到落地的系统化实践指南