浅淡淘宝内核对LVS的性能优化

浅淡淘宝内核对LVS的性能优化

    去年试用了一下淘宝内核,发现它对LVS性能有质的提高。敬佩之心倍上心头,兴奋之余开始了解淘宝内核。 html

    简单公布一下测试结果:在一台普通的4核服务器上,使用LVS的DR模式,后端7台RealServer。在CentOS原生内核上,每秒最高转发约6万个HTTP请求,而使用淘宝内核后可高达约14万次请求每秒(瓶颈在测试机,没法模拟更大压力)。而在这台服务器上直接测试Nginx状态页,最高每秒处理约4万次请求。 python

    当下,咱们很是迫切须要解决的就是LVS的性能问题。在获得验证的同时,更但愿把问题弄清楚。淘宝内核到底对LVS作了什么,让它的性能获得如此提高? linux

    在淘宝内核目录下,在各类Patch“patches.driver”、“patches.taobao”、等,数量多到让人望而生畏…… 后端

    好吧,我仍是想把问题弄清楚! 性能优化

    全部Patch中,与LVS相关的只有 patches.taobao/ip_vs_conn_locking_granularity.patch 文件。内容也很简单,仅将 CT_LOCKARRAY_BITS 由4改成8。并且是文嵩大神亲自打上的: 服务器

    这个大小从上下文来看,彷佛是一个并发锁的数量。 并发锁多了, 能够同时进行的转发链接就多了, CPU不用等待任务完成。批注中注明了是针对16核作的调整,虽然个人测试里才有4核 ^_^|| 并发

    幸好淘宝内核能够自由的选择开启或关闭指定的Patch(执行打包以前修改series.conf注释掉不想要的Patch),因而我关闭了LVS的Patch。再测试,又一次喜剧发生了:即便不打ip_vs_conn_locking_granularity.patch,淘宝内核的LVS转发功能依然很强劲! dom

    而后,我关闭了淘宝全部Patch。喜剧仍然存在:凡是自行定制的内核,LVS性能很平庸;凡是使用淘宝内核,不管怎样调整Patch,性能都会很强劲。那一刻,个人心你懂的…… 性能

   咨询了一下佳明炳天,我感受我找到缘由了:淘宝对内核的配置也进行了大量的优化。针对LVS的优化就是将CONFIG_IP_VS_TAB_BITS由12调整到20“sed -i 's/CONFIG_IP_VS_TAB_BITS=12/CONFIG_IP_VS_TAB_BITS=20/g' SOURCES/config-generic”: 测试

1
2
3
4
5
6
7
8
9
yum -y install kernel-devel rpm-build redhat-rpm-config asciidoc hmaccalc binutils-devel elfutils-libelf-devel newt-devel zlib-devel xmlto python-devel perl-ExtUtils-Embed fedora-packager @development-tools
rpmdev-setuptree
rpm -ivh kernel-2.6.32-279.19.1.el6.src.rpm    
cd ~/rpmbuild/
cp patches.taobao/ip_vs_conn_locking_granularity.patch SOURCES/   
sed -i 's/CONFIG_IP_VS_TAB_BITS=12/CONFIG_IP_VS_TAB_BITS=20/g' SOURCES/config-generic
rpmbuild -bb --with baseonly --with firmware --without debuginfo SPECS/kernel.spec   
# waiting for lock on `./random_seed'...   
rngd -r /dev/urandom

    OK,果真很强大,应用到生产环境后效果也很满意。真心感谢淘宝、感谢开源!因而我也对此打了一个Patch,并上传了编译结果:kernel-firmwarekernel

    怎样验证咱们的优化是否生效呢,查看`ipvsadm -Ln`的size便可:

    固然,淘宝对LVS的优化不只文章介绍的2处了。还有针对网卡和系统参数的调整好比:

1
2
3
4
5
6
7
8
9
10
# 关闭网卡LRO和GRO   
ethtool -K em1 gro off   
ethtool -K em1 lro off   
# 禁用ARP,增大backlog并发数   
net.ipv4.conf.all.arp_ignore = 1   
net.ipv4.conf.all.arp_announce = 2    
net.core.netdev_max_backlog = 500000   
# 调整内核的时钟机制   
kernel nohz=off   
# 手动调整网卡中断分布,等……
相关文章
相关标签/搜索