记录一个软中断问题
这篇讲的是如何定位并解决Linux系统软中断负载不均的“坑”。作者从一台XEN虚拟机的Nginx服务器入手,通过top命令观察到软中断(si)数值异常,且几乎全部集中在CPU1上,导致该CPU成为性能瓶颈。 进一步用`/proc/softirqs`确认,网络收包中断(NET_RX)是主要来源。排查发现,问题根源在于宿主机的网卡运行在单队列模式,且中断被绑定到了特定CPU上。虽然尝试修改中断亲缘性(`smp_affinity`),但对单队列网卡无效。 最终,作者启用了Linux内核的RPS(Receive Packet Steering)功能,通过软件层面将网络包处理负载分摊到多个CPU核心。配置后,软中断成功从单一CPU分散到了两个CPU上,显著改善了负载不均的问题。 文章还附带介绍了`itop`这个中断监控小工具,并提及了Nginx的`worker_cpu_affinity`配置、NUMA架构调优等后续优化思路,为遇到类似网络中断瓶颈的开发者提供了一套完整的排查与优化路径。