推广 热搜: 采购方式  滤芯  带式称重给煤机  甲带  气动隔膜泵  减速机型号  无级变速机  链式给煤机  履带  减速机 

Linux 高性能网络调优白皮书(NUMA / IRQ / softirq / RSS 全景)

   日期:2026-01-02 10:41:49     来源:网络整理    作者:本站编辑    评论:0    
Linux 高性能网络调优白皮书(NUMA / IRQ / softirq / RSS 全景)

—— NUMA / IRQ / softirq / RSS 的全景理解与标准实践

在 25G / 40G / 100G 网络时代,Linux 网络性能瓶颈早已不在“协议效率”,而在:

  • NUMA 拓扑是否正确

  • 中断(IRQ)是否落在正确的 CPU

  • softirq 是否失控

  • RSS / RPS / XPS 是否破坏缓存亲和性

大量线上事故反复证明一个事实:

CPU 使用率是最不可靠的网络性能指标

这份白皮书的目标只有一个:

给出一套“从硬件到内核、从队列到 CPU”的完整网络调优方法论


一、核心结论(Executive Summary)

在开始细节之前,先给出结论性原则:

  1. NUMA 是第一性原理

  2. IRQ 决定 softirq 在哪里跑

  3. softirq 决定延迟是否可控

  4. RSS / RPS / XPS 决定数据是否“搬家”

  5. 缓存亲和性比 CPU 利用率更重要

如果你只记住这 5 条,已经超过 80% 的工程师。


二、为什么 NUMA 决定网络性能上限

2.1 NUMA 的本质

NUMA(Non-Uniform Memory Access)的核心不是“多节点”,而是:

CPU 访问不同内存,延迟和带宽完全不同

网络 I/O 的真实路径是:

网卡 DMA → 内存 → CPU → 协议栈 → 应用

一旦这条路径跨 NUMA:

  • DMA 在 node0

  • CPU 在 node1

  • 内存在 node0

你面对的是:

  • 远端内存访问

  • cache line bounce

  • 不可预测延迟


2.2 从 /sys/devices 看 NUMA 真相

/sys/devices/system/node//sys/devices/system/cpu/
  • nodeX:NUMA 节点

  • cpuX/topology/numa_node:CPU 属于哪个 NUMA

  • /sys/class/net/ethX/device/numa_node:网卡在哪个 NUMA

这是内核调度和内存分配的“事实来源”。


三、IRQ:网络路径真正的起点

3.1 一个被低估的事实

每一个网络包,都是从 IRQ 开始进入系统的

NIC → IRQ → hardirq → softirq → 协议栈

IRQ 落在哪个 CPU,决定了:

  • cache 热度

  • softirq 抢占对象

  • NUMA 是否跨节点


3.2 /proc/interrupts 的工程意义

cat /proc/interrupts | grep eth

你看到的不是“统计信息”,而是:

网络负载的 CPU 分布图


3.3 IRQ 与 NUMA 的铁律

网卡在哪个 NUMA,IRQ 就必须在哪个 NUMA

违反这条规则,后续所有优化全部无效。


四、softirq 与 ksoftirqd:延迟失控的信号

4.1 softirq 是“真正干活的人”

  • NET_RX:收包

  • NET_TX:发送完成

默认规则:

softirq 在触发 IRQ 的 CPU 上执行


4.2 ksoftirqd 的真实含义

ksoftirqd 出现意味着:

  • softirq 无法在 IRQ 上下文完成

  • 网络处理被延迟

  • 延迟开始不可预测

ksoftirqd 不是解决方案,而是系统退化的标志。


4.3 为什么 CPU 看起来不忙,延迟却高?

因为:

  • ksoftirqd 是普通内核线程

  • 可被抢占

  • 可被延迟调度

结果是:

CPU idle ≠ 网络没排队


五、RSS / RPS / XPS:队列与 CPU 的“隐形调度器”

5.1 RSS(Receive Side Scaling)

  • 硬件级分流

  • 决定包进入哪个 RX 队列

  • 一个队列 = 一个 IRQ

优点:

  • 无 CPU 迁移

  • cache 友好

结论:

RSS 是必须启用的第一优先级机制


5.2 RPS(Receive Packet Steering)

  • 软件级 CPU 重定向

  • 在 softirq 阶段生效

代价:

  • IPI

  • skb 迁移

  • cache miss

结论:

RPS 是兜底方案,不是性能优化手段


5.3 XPS(Transmit Packet Steering)

  • 决定 TX 队列由哪个 CPU 使用

  • 解决发送方向 cache 失配

结论:

XPS 是高性能发送路径的关键组件


六、标准 NUMA + 网卡布局(见我的文章:《NUMA + 网卡:高性能网络的标准布局)

6.1 标准硬件布局

CPU0 (node0) ── PCIe ── NIC0CPU1 (node1) ── PCIe ── NIC1

6.2 标准软件布局(单网卡)

NUMA node0├── 网卡 eth0├── RX/TX IRQ CPU├── softirq CPU└── 网络应用线程

6.3 CPU 划分模板

假设 node0 CPU 为 0–15:

角色
CPU
IRQ
0–3
softirq
4–7
应用
8–15

七、irqbalance 的正确使用姿势

  • 默认 irqbalance:不懂 NUMA

  • 高性能场景:

    • 要么关闭

    • 要么限制 CPU mask

irqbalance 适合“平均”,不适合“性能”


八、排障路径(工程实战)

8.1 延迟抖动排查顺序

  1. 网卡 NUMA

  2. IRQ CPU

  3. softirq 分布

  4. ksoftirqd 是否活跃

  5. RSS / RPS / XPS 是否合理


8.2 常见“反模式”

反模式
结果
网卡 node0,应用 node1
延迟抖动
IRQ 与应用共用 CPU
P99 飙升
队列越多越好
cache thrash
滥用 RPS
ksoftirqd 爆发
只看 CPU 使用率
永远误判

九、上线前终极检查清单

硬件

  • 网卡 PCIe 插槽 NUMA 正确

内核

  • IRQ 在本 NUMA

  • 无异常 ksoftirqd

  • softirq 分布均衡

网络

  • RSS 队列合理

  • XPS 已配置

  • RPS 非必要不开

应用

  • 绑核

  • 绑 NUMA 内存(numactl)


十、结论(白皮书级总结)

Linux 高性能网络的本质不是“调参数”

而是:

  • 正确的 NUMA 归属

  • 清晰的 IRQ 边界

  • 可控的 softirq 执行

  • 稳定的 cache 亲和性

当你做到:

  • 数据不跨 NUMA

  • 中断不抢应用

  • 包不在 CPU 间搬家

性能与稳定性,会自然出现。

 
打赏
 
更多>同类资讯
0相关评论

推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  皖ICP备20008326号-18
Powered By DESTOON