lvs的性能问题,软中断耗尽CPU单核后到达处理极限

最近在内网测试lvs,性能很不理想。出现的问题是:当压力较大时,Lvs服务器CPU的其中一个核使用率达到100%(处理软中断)。
1、 当Lvs服务器处理软中断的那个核使用率达到100%,就到达系统处理上限。
2、 占用CPU的是进程“ksoftirqd”,它未能使用到多核。

测试环境:
系统:CentOS release 5.4 (Final) Linux higkoo 2.6.18-164.el5 #1 SMP Thu Sep 3 03:28:30 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
硬件:Intel(R) Xeon(R) CPU E5405 @ 2.00GHz缓存大小:6.14MB (4核)、 4G内存 、 千兆网卡
网络:千兆局域网(同一个交换机)

Lvs配置方法:
ipvsadm-1.24.tar.gz + libnet.tar.gz :
----------------------------------------------------------------
VIP=10.20.223.105
RSIP="10.20.223.106 10.20.223.107" //测试过程最多使用了7台
PORT=80
ALGORITHM="rr"
/sbin/iptables -I INPUT -p tcp --dport ${PORT} -j ACCEPT
/sbin/iptables -I OUTPUT -p tcp --dport ${PORT} -j ACCEPT
/sbin/iptables -I FORWARD -p tcp --dport ${PORT} -j ACCEPT
/sbin/sysctl -w net.ipv4.conf.lo.arp_ignore=0
/sbin/sysctl -w net.ipv4.conf.lo.arp_announce=0
/sbin/sysctl -w net.ipv4.conf.all.arp_ignore=0
/sbin/sysctl -w net.ipv4.conf.all.arp_announce=0
/sbin/ifconfig lo:0 down > /dev/null
echo "1" >/proc/sys/net/ipv4/ip_forward
/sbin/ifconfig eth0:0 ${VIP} broadcast ${VIP} netmask 255.255.255.255 up
/sbin/route add -host ${VIP} dev eth0:0
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t ${VIP}:${PORT} -s ${ALGORITHM}
for IP in $RSIP
do
/sbin/ipvsadm -a -t ${VIP}:${PORT} -r ${IP} -g
done
----------------------------------------------------------------
测试方法:
使用三种场景进行性能对比:
1、 使用lvs进行负载均衡,转向RealServer上的nginx_status页面
2、 使用Nginx进行负载均衡,转向RealServer上的nginx_status页面
3、 直接访问单台服务器Nginx状态页面

测试结果:
一、 单台Lvs负载均衡的最大处理能力约1.5万
二、 单台Nginx负载均衡的最大处理能力约2万
三、 单台Nginx服务nginx_status最大处理能力约4万

尝试过的改进:(结果均无效,性能没有明显提升)
一、 升级系统内核至2.6.34
二、 修改网卡最大传输单元(MTU),交换机支持MTU最大为9216
三、 使用不同的模式DR、TUN

详细可参考我的博客:
Linux Virtual Server (LVS)之:ksoftirqd进程耗尽单核100%si处理软中断导致性能瓶颈
http://hi.baidu.com/higkoo/blog/item/f8943c60d16843d28cb10d17.html

http://zh.linuxvirtualserver.org/node/2500

Forums:

我也遇到类似问题,不知还能做哪些优化

使用google 的RPS RFS 改进。

Ariltces like this make life so much simpler.

What a joy to find somonee else who thinks this way.

Stay inmaefotivr, San Diego, yeah boy!

randomness