公司性能测试,发现服务器性能表现很差。
于是,输入`top`命令,查看资源的使用情况。
发现2C的机器,CPU一个idle在90%,一个只有20%几。
进而发现,cpu使用率高的那个cpu,si也特别高。si是软中断,服务器端si高主要是由于网卡收包后需要触发软中断让cpu去处理数据包。
这说明网络收包的负载全部被压在了一个cpu核上。
`cat /proc/interrupts`可以发现,每个cpu在对应的中断源上的中断次数,以及中断源所对应的中断号。
进而发现了,所使用的网卡是单队列网卡。
网卡分为单队列网卡,多队列网卡。网卡的每个队列对应一个中断源。每个中断源都可以做cpu亲和性的绑定。
在`/proc/irq/中断号/smp_affinity`中可以做设置。
也可以在/sys/class/net/eth0/queues/中对每个网卡队列,绑定cpu.
更换网卡为多队列网卡,即可解决以上问题。
另外对于单队列网卡,cpu负载均衡,是有一个内核补丁的,试了一下,感觉效果也不是很好。
