第15周:内核网络性能调优
目标:深入理解网卡多队列、RSS/RPS/RFS,掌握 /proc/sys/net/ 参数调优方法。
1. 网卡多队列与 RSS
1.1 传统网卡 vs 多队列网卡
1 | 传统单队列网卡: |
1.2 RSS(Receive Side Scaling)
1 | RSS:网卡硬件层面将包分发到不同 RX Queue |
1 | # === ethtool 命令 === |
1.3 RPS(Receive Packet Steering)
1 | RPS:软件层面模拟 RSS(适用于不支持硬件 RSS 的网卡) |
1 | # 启用 RPS |
1.4 RFS(Receive Flow Steering)
1 | RPS 的升级版: |
1.5 aRFS(aRFS = RSS + RFS 结合)
1 | 自动 RFS: |
2. Offload 特性
2.1 常见 Offload
| Offload | 全称 | 作用 | 效果 |
|---|---|---|---|
| GRO | Generic Receive Offload | 合并小包为一个大的 sk_buff | 减少协议栈处理次数 |
| LRO | Large Receive Offload | 合并 TCP 包为大段 | TCP 专用,与 GRO 类似 |
| GSO | Generic Segmentation Offload | 发送端将大包拆分 | 减少发送 syscall |
| TSO | TCP Segmentation Offload | TCP 层将大 skb 交给网卡拆分 | CPU 卸载,网卡处理分片 |
| UFO | UDP Fragmentation Offload | UDP 分片由网卡完成 | 同 TSO,但用于 UDP |
| LSO | Large Send Offload | 通用大包发送 | 通用版 TSO/UFO |
| Checksum | TCP/UDP/IP checksum | 网卡计算校验和 | CPU 卸载 |
| Scatter-Gather | DMA 分散/聚集 | 网卡从多个不连续内存区读数据 | 减少内存复制 |
2.2 Offload 状态查询
1 | # 查看所有 offload 状态 |
3. /proc/sys/net/ 核心参数
3.1 通用网络参数
1 | # === core === |
3.2 生产环境推荐配置
1 | # /etc/sysctl.d/99-net-tuning.conf |
4. 丢包定位
4.1 dropwatch 工具
1 | # 安装 |
4.2 丢包原因排查
1 | # === 各层丢包统计 === |
4.3 丢包位置判断
1 | 判断在哪一层丢包: |
5. 实践:优化第一阶段负载均衡器
5.1 系统参数优化
1 |
|
5.2 网卡 Ring Buffer 调优
1 | # 查看当前 Ring Buffer 大小 |
6. 软中断与 CPU 亲和性
6.1 软中断分布
1 | # 查看每个 CPU 的软中断计数 |
6.2 中断亲和性
1 | # 查看 IRQ 亲和性 |
7. 性能监控脚本
7.1 综合监控
1 |
|
8. 性能瓶颈诊断流程
1 | 高延迟问题: |
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/07/08/第15周:内核网络性能调优/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!