1. 程式人生 > >在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("[email protected]/ipv4/tcp_input.c:*")'





參考文獻
[1].http://blog.csdn.net/wangzuxi/article/details/42849053
[2].https://github.com/fastos/tcpdive