最近一个哥们在做LVS做load balance测试时发现在并发达到1w以后网卡中断只占用了一个CPU,最终导致此CPU的100%,性能再无法提升。
逐步尝试以下方法:
- 修改内核参数irqbalance。印象中此参数能把网卡中断平分到多个CPU上。但是查询最新文档发现此参数在最新的内核中已经不存在;
- 使用设备中断的smp_affinity:
- 首先先从/proc/interrupts里查到网卡的中断号,eth0或者bg0所在行的第一列;
- 修改/proc/irq/<中断编号>/ 下修改 smp_affinity 文件内容。这个文件是一个位掩码,01意味着只有第一个CPU能处理中断,0F意味着四个CPU都会参与处理中断。
- 但是经过测试发现此方法能把网卡中断绑定到指定的CPU上,但是不能在多个CPU间平均分配。
- 使用user space态下的irqbalance daemon,未得到反馈,估计无效;
- 使用Intel高端网卡82575,见文档详细说明:
- Assigning Interrupts to Processor Cores using an Intel(R) 82575/82576
or 82598/82599 Ethernet Controller September
http://download.intel.com/design/network/applnots/319935.pdf - Improving Network Performance in Multi-Core Systems
http://www.intel.com/network/connectivity/products/whitepapers/318483.pdf
- Assigning Interrupts to Processor Cores using an Intel(R) 82575/82576
我也遇到此问题:
http://hi.baidu.com/higkoo/blog/item/f8943c60d16843d28cb10d17.html
下了两个文档下来了。
找空看一下!