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

来源:互联网 发布:js狙击枪 编辑:程序博客网 时间:2024/05/22 08:22
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 0