在CentOS上安装TCP协议性能评测工具tcpdive

1.Tcpdive的基本原理
Tcpdive是基于linux内核的探测点机制,使用systemtap脚本语言和内嵌C代码来实现的。 
通过定义几类相互关联的探测点和库函数,来收集和处理运行中内核的数据,以及修改内核的处理逻辑。

2.源码目录
https://github.com/fastos/tcpdive
目前的代码基于CentOS 6.5,内核版本号2.6.32-431.17.1开发的。在实际使用中,我们的OS及内核版本很少与此相符,所以需要我们在当前环境基于源码编译rpm包,再安装。
下面我详细描述一下我的实操过程。

3.搭建SystemTap环境
参见http://blog.csdn.net/tao_627/article/details/52137901
下面再详细说明一下:
3.1.查询当前内核版本,并确认内核提供utrace/uprobes用户态支持
uname -r
2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64
cat /boot/config-2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64 | grep '_UTRACE'
CONFIG_UTRACE=y
3.2.安装内核调试所需要的包
yum -y install gcc
yum -y install kernel-devel-2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64
yum -y install kernel-debuginfo-2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64
yum -y install kernel-debuginfo-common-x86_64-2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64
3.3.安装SystemTap
yum -y install systemtap
验证SystemTap是否安装成功?
stap -ve 'probe begin{log("hello SystemTap!")exit()}'

4.安装tcpdive
cd ~
从github下载源码并编译
git clone https://github.com/fastos/tcpdive.git
cd tcpdive/script
根据当前内核版本号修改make_rpm.sh中的宏定义,
#KERNEL_VER="2.6.32-431.17.1.el6.x86_64"
KERNEL_VER="2.6.32-926.504.30.3.cloud.el6.x86_64"
然后执行

sh make_rpm.sh


对生成rpm包过程中出现的错误,逐一排除,参见"可能出现的问题"一节
如果一切正常的话,将会在当前script下面生成rpm包
安装生成的rpm包
rpm -ivh tcpdive-2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64.rpm
查询rpm包是否安装成功

rpm -qa | grep tcpdive



5.启动tcpdive
修改/usr/bin/tcpdive脚本,修改对应的日志配置文件
LOG_NAME="tcpdive.log"         # log file name
LOG_SIZE="500"                 # per log file's upper size(MB)
LOG_NUM=20                     # max number of log files
PORTS="80"                     # server ports concerned, eg. 80,8080
然后启动
tcpdive status
tcpdive start


6.在本机访问指定监测端口80
过一定时间会在当前目录看到日志文件,内容如下


7.可能出现的问题

这个问题的出现,主要是因为当前的Linux内核版本与tcpdive中的内核版本源码有差异造成,需要根据当前内核版本来生成rpm包。上面的报错是说,5830行没有对应的函数。

解决方法有两个,一个是按照上面的提示,将行号5830换为5826或是5833,另一个方法,是查找tcp_input.c源码中每个函数所在的行号,使用下面的命令:

stap -L 'kernel.statement("tcp_rcv_state_process@net/ipv4/tcp_input.c:*")'





参考文献
[1].http://blog.csdn.net/wangzuxi/article/details/42849053
[2].https://github.com/fastos/tcpdive
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
为什么要开发Tcpdive        在过去的几年里,随着移动互联网的飞速发展,整个基础网络已经发生了翻天覆地的变化。  用户接入网络的方式,除了宽带和光纤之外,还有2G/3G/4G/WiFi,5G也已经在路上了。  作为使用范围最广的传输层协议TCP诞生于固网时代,在设计之初并没有考虑到上述种种情况,  这导致了它在某些场景下,性能并不是最优的。因此大多数的CDN厂商和一些规模较大的互联网公司都会  进行TCP协议的优化,以提供更好的用户体验,如更快的访问速度,更低的访问失败率,更流畅的视频播放等。 而当我们尝试优化TCP协议时,却面临着不少难点: 可用的工具少。  和TCP相关的工具,比如tcpdump,netstat和ss,虽然很好用,但是使用场景并不是TCP协议性能评测,  能够提供的性能信息实在有限。 依靠个人感觉,进行盲试。  不知道瓶颈在哪,盲目修改,或者直接套用已有的优化方法。  盲目修改常导致徒劳无功,直接套用现成的方法,由于大家的应用场景不尽相同,也不一定有效。 测试成本高。  对TCP协议性能评测主要采用两种方法。  一种是通过对上层应用的测试,来评估TCP协议性能。这种方法的评价指标有限,而且是上层应用相关的。  另一种是依靠第三方测试服务。这种方式的样本量有限,且成本较高。 无法准确地评价优化效果。  上述的两种测试方法,都涉及到应用层面,因此测量的不仅仅是TCP协议本身,还参杂了干扰因素。   Tcpdive的设计目标        针对上述问题,我们决定设计一个专门的TCP协议性能评测工具,也就是Tcpdive。  之所以起这个名字,是因为dive有深入研究的意思:) Tcpdive具有一些特性,实际上也是我们的设计目标: 对TCP协议性能进行较为全面的刻画,有助于发现瓶颈。  如此一来,就能找到痛点,不用再盲目地进行优化。 易于部署和使用,无需改动生产环境,使用成本低。  这一点非常重要,因为不需要修改内核或者应用程序,比较容易推广。 独立于上层应用,能够准确地评价优化效果。  直接对TCP协议性能进行刻画,而不依赖于具体的应用。  因此能够排除上层应用的干扰,量化地评价优化效果。   Tcpdive的基本原理        Tcpdive是基于linux内核的探测点机制,使用systemtap脚本语言和内嵌C代码来实现的。  通过定义几类相互关联的探测点和库函数,来收集和处理运行中内核的数据,以及修改内核的处理逻辑。         为什么要基于systemtap呢?systemtap的神奇之处在于,不修改内核的情况下就能获取内核中的任何信息, 还可以修改内核的处理逻辑。所以虽然被它虐了千百遍,但还是觉得这套探测点机制非常有用。当然它也不是 十全十美的,比如作为一种调试语言,它是够用的,但是把它用作一种开发语言,则会遇到不少问题。通过不 断的尝试,大多数问题最终都获得比较好的解决。         目前Tcpdive已经部署到作为流量入口的负载均衡服务器上,在新浪的线上环境7*24h运行,可以说是比较稳定的。 Tcpdive的主要功能 作为一个TCP协议性能评测工具Tcpdive提供了大量的性能指标,从以下维度来对每条TCP连接进行刻画: 传输情况 丢包和重传 拥塞控制 HTTP处理   传输:   损失和重传: 拥塞控制: HTTP 处理:     标签:tcpdive

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值