建立个人品牌,把你的名字变成钱 [登录·注册]

吕滔博客

首页 开发 运维 工具 摄影

我才知道的淘宝内核对LVS的性能优化

运维 memory 发布于June 12, 2014 标签: Linux

    简单公布一下测试结果:在一台普通的4核服务器上,使用LVS的DR模式,后端7台RealServer。在CentOS原生内核上,每秒最高转发约6万个HTTP请求,而使用淘宝内核后可高达约14万次请求每秒(瓶颈在测试机,无法模拟更大压力)。而在这台服务器上直接测试Nginx状态页,最高每秒处理约4万次请求。
    当下,我们非常迫切需要解决的就是LVS的性能问题。在得到验证的同时,更希望把问题弄清楚。淘宝内核到底对LVS做了什么,让它的性能得到如此提升?

    在淘宝内核目录下,在各种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转发功能依然很强劲!

    然后,我关闭了淘宝所有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”:

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-firmware,kernel。

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

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

# 关闭网卡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   
# 手动调整网卡中断分布,等……

相关推荐

添加新评论

网站状态

  • 栏目分类:49个
  • 发布文章:1537篇
  • 用户评论:773条
  • 开博至今:4163天

正则速查

[abc] 匹配中括号中的单个字符,如a或b或c
[^abc] 匹配除了a、b、c等字符的其他单个字符
[a-z] 匹配一个字符范围,如a到z
[a-zA-Z] 匹配一个字符范围,如a-z 或 A-Z
^ 匹配行的开始
$ 匹配行的结束
\A 匹配一个字符串的开始
\z 匹配一个字符串的结束
. 匹配任意单个字符
\s 匹配空白字符,如空格,TAB
\S 匹配非空白字符
\d 匹配一个数字
\D 匹配非数字
\w 匹配一个字母
\W 匹配非字母
\b 匹配字符边界
(...) 引用所有括号中的内容
(a|b) a或者b
a? 零个或1个a
a* 零个或多个a
a+ 1个或多个a
a{3} 3次重复的a
a{3,} 3次或3次以上重复的a
a{3,6} 3到6次重复的a

修正符

/g 查找所有可能的匹配
/i 不区分大小写
/m 多行匹配
/s 单行匹配
/x 忽略空白模式
/e 可执行模式,PHP专有
/A 强制从目标字符串开头匹配
/D 使用$限制结尾字符,则不允许结尾有换行
/U 只匹配最近的一个字符串;不重复匹配

最新回复

  • memory: 没测试过...
  • 欧文斯: 对于多个 IP 段呢?比如超过 1000 个 IP 段,匹配速度...
  • 广州网站建设: 了解了,博客的通配符HTTPS证书
  • memory: https://medoo.lvtao.net/1.2/doc....
  • 贾彦东: medoo 在select的时候如何使用sum 比如 sel...
  • memory: 纯PHP文件末尾可以没有?>,你把报错信息发我一下。
  • bigwit: 因为七牛云的免费配额不能https,索性传到自己的vps上去算了...
  • bigwit: 我直接使用,报错啊,方便发我一份吗?
  • memory: 是完整的。这个就是一个简单的上传,你可以自己写个类似的也不难的。
  • bigwit: up.php是不是不完整,刚好我也有这样的需求,麻烦你看看
  • 广州网站建设: 学习了,已经收藏起来了
  • memory: 那就改一下 Widget_Stat 这个插件。增加个方法即可。
  • 梁兴健: 文章总浏览量可以有吗
  • memory: 怪我,写的太差。。。不易懂,,,我的错
  • 善行法脉--改变财运: 你是技术大牛。这个真的看不懂
  • memory: 这个太尴尬了,哈哈,,,那是10年的时候刚接触PHP写的一个类。...
  • 梦游者: //website : http://www.lvtao.ne...