在CentOS上安裝TCP協議效能評測工具tcpdive
阿新 • • 發佈:2019-02-17
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"
然後執行
如果一切正常的話,將會在當前script下面生成rpm包
安裝生成的rpm包
rpm -ivh tcpdive-2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64.rpm
查詢rpm包是否安裝成功
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.可能出現的問題
參考文獻
[1].http://blog.csdn.net/wangzuxi/article/details/42849053
[2].https://github.com/fastos/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
如果一切正常的話,將會在當前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