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

在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

更多相关:

  • 下面是我结合网上资料摸索出的可行的操作方法,记录在这样,以备后面继续研究。操作系统是CentOS 6.6 x86_64。 1.将内核版本升级到最新版 因为我机器上CentOS 6.6的内核版本号是2.6.32-573.12.1.el6.x86_64,网上根本找不到对应的kernel-devel,kernel-debuginfo和k...

  • 在基于CentOS平台的工作过程中,难免有时需要升级或者降级内核以验证功能、调试性能或者更新整个系统。 如果从头重新编译一个内核费时费力,另外加之现在内核特性越来越复杂,依赖的库或者工具也不少,找到一种简单的升级内核方法将非常必要。 下面是我实践过的最简单方法。 系统环境: CentOS 6.6 x86_64 1:查看系统版...

  • 关于系统目录树和源码目录树的结构图如下 内核版本: centos 7.0 升级内核之后 3.10.0-957-5.1.e17...

  • 下述为UCloud资深工程师邱模炯在InfoQ架构师峰会上的演讲——《UCloud云平台的内核实践》中非常受关注的内核热补丁技术的一部分。给大家揭开了UCloud云平台内核技术的神秘面纱。   如何零代价修复海量服务器的Linux内核缺陷?   对于一个拥有成千上万台服务器的公司,Linux内核缺陷导致的死机屡见不鲜。让工程师们纠结的...

  • rpm 安装rpm包 rpm -ivh xxx.rpm rpm -ivh --nodeps --force xxx.rpm强行安装,不考虑依赖性 rpm --nodeps --force -Uvh *同样强行安装,不考虑依赖性 查看一个文件夹属于那个rpm包 rpm -qf /path/filename 查看文件属于哪个r...