Systemtap辅助设置tcp_init_cwnd,免对操作系统打Patch
March 21st, 2011
原创文章,转载请注明: 转载自系统技术非业余研究
前段时间google的工程师提出对tcp的拥塞窗口的初始值进行增大可以显著的提高http的性能,这个主要是针对tcp的slow start的优化.
具体参考这里, 这里. 谢谢叔度同学从美国带回第一手信息!
由于低版本的linux内核的问题,这个参数的正确设置需要对os打patch,这个过程对线上机器来讲非常麻烦。 底下我用systemtap给出了个解决方案,免除这个麻烦. 我们在RHEL 5U4上作这个试验:
首先需要在开发机器上:
#安装符号信息 $uname -r 2.6.18-164.el5 $ sudo rpm -i kernel-debuginfo-common-2.6.18-164.el5.x86_64.rpm $ sudo rpm -i kernel-debuginfo-2.6.18-164.el5.x86_64.rpm $ sudo yum install systemtap $ cat > tcp_init_cwnd.stp probe kernel.function("tcp_init_cwnd").return { $return = $1 } CTRL+D #设成7个mss $ sudo stap -p4 -g -m initcwnd tcp_init_cwnd.stp 7 initcwnd.ko
好了,现在我们需要的模块有了, 可以直接拷贝到目标机器去的.
#目标机器需要安装systemtap,用于运行我们的模块.
$uname -r 2.6.18-164.el5 $ sudo yum install systemtap #在系统的启动脚本里面运行以下命令: $ sudo staprun -o initcwnd.out -D initcwnd.ko $ 19122 #19122是initcwnd模块加载器在后台运行的进程号,需要的时候可以把模块停掉。 #当然如果你的模块没有输出的话也可以直接, 这样更简单 $ sudo insmod initcwnd.ko
大家碰到类似的问题,可以参考下这个思路.
玩得开心!
Post Footer automatically generated by wp-posturl plugin for wordpress.
老兄玩的很漂亮!!
哎, 这个好! 这个思路好!
Yu Feng Reply:
March 22nd, 2011 at 12:54 am
谢谢大侠表扬
Hi! Thank you for the idea. A script is now included in our sample library:
http://sourceware.org/git/?p=systemtap.git;a=blob;f=testsuite/systemtap.examples/network/tcp_init_cwnd.stp
Yu Feng Reply:
March 25th, 2011 at 11:30 am
cool!
请问如果目标机器上直接“$ sudo insmod initcwnd.ko”安装的话,也许要先装systemtap吗?
Yu Feng Reply:
April 10th, 2012 at 4:08 pm
不需要安装符号的。
请教一个问题,我按照您这个博客的步骤操作之后(Centos 5),用ip route show命令能看到initcwnd 是10 。但是,用tcpdump抓包看到第一个ttl里面发出的包还是只有2~3个。(起了一个httpd服务,然后从远程机器wget一个文件)。而且,我试了一下3.x内核的ubuntu机器,tcpdump确实能看到在第一个ttl里有8~10个包。请问是不是别的某些网络层参数影响了调优的结果呢?多谢!
Yu Feng Reply:
August 27th, 2012 at 12:52 am
恩,还有个地方需要改,回头我找下
Nightelf Reply:
August 27th, 2012 at 8:49 am
多谢多谢!
建议霸爷看一下lisp的defadvice机制, 不仅可以像上面那样通过hook修改某个函数的返回值,而且可以在函数的任意代码段前后加一段新的逻辑.
绝对的大开眼界
Yu Feng Reply:
October 8th, 2012 at 3:00 pm
学习下!