Linux 性能基準測試工具及測試方法
還是老規矩,先請性能領域的大師布倫丹·格雷格(Brendan Gregg)登場 ??????
linux_benchmarking_tools
整理測試指標如下圖
圖片
測試環境說明:CentOS7, 4c8g
CPU
Super_Pi 是一種用于計算圓周率π的程序,通常用于測試計算機性能和穩定性。它的主要用途是測量系統的單線程性能,因為它是一個單線程應用程序。
# 安裝 bc
yum -y install bc
# 測試
time echo "scale=5000; 4*a(1)" | bc -l -q &>1
# 結果分析,看 real 即可,時間越短,性能越好
圖片
sysbench 素數計算
# 安裝 sysbench
yum -y install sysbench
# 測試方法: 啟動4個線程計算10000事件所花的時間
sysbench cpu --threads=4 --events=10000 --time=0 run
# 結果分析,看 total time 即可,時間越短,性能越好
圖片
內存
內存帶寬(stream)
Stream測試是內存測試中業界公認的內存帶寬性能測試基準工具
# 編譯安裝 STREAM
yum -y install gcc gcc-gfortran
git clone https://github.com/jeffhammond/STREAM.git
cd STREAM/
make
# 指定線程數
export OMP_NUM_THREADS=1
./stream_c.exe
# 結果分析,看 Copy、Scale、Add、Triad,數值越大,性能越好
圖片
磁盤 IO
?? 測試時請準備裸的數據盤,測試完成后請重新格式化磁盤
測試方法和結果分析和文件 IO 測試相同,--filename 改為具體的數據盤即可,比如/dev/sda ,這里不再贅述
文件 IO
磁盤讀、寫iops
iops:磁盤的每秒讀寫次數,這個是隨機讀寫考察的重點
# 安裝
yum -y install fio
# 測試隨機讀 IOPS
fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=randread --filename=/home/randread.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g
# 測試隨機寫 IOPS
fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=randwrite --filename=/home/randwrite.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g
# 結果分析,看 IOPS 即可,值越大,性能越好
圖片
圖片
磁盤讀、寫帶寬
bw:磁盤的吞吐量,這個是順序讀寫考察的重點
# 測試順序讀
fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=read --filename=/home/read.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g
# 測試順序寫
fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=write --filename=/home/write.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g
# 結果分析,看 BW 即可,值越大,性能越好
圖片
圖片
?? 因地制宜,靈活選取。在基準測試時,一定要注意根據應用程序 I/O 的特點,來具體評估指標。
比如 etcd 磁盤性能衡量指標為:WAL 文件系統調用 fsync 的延遲分布,當 99% 樣本的同步時間小于 10 毫秒就可以認為存儲性能能夠滿足 etcd 的性能要求。
mkdir etcd-bench fio --rw=write --ioengine=sync --fdatasync=1 --directory=etcd-bench --size=22m --bs=2300 --name=etcd-bench
圖片
網絡
傳輸速率(pps)
# server & client 編譯安裝 netserver
wget -c "https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0" -O netperf-2.5.0.tar.gz
yum -y install gcc cc
tar zxvf netperf-2.5.0.tar.gz
cd netperf-netperf-2.5.0
./configure && make && make install
# server 端啟動 netserver
netserver
# 監控數據
sar -n DEV 5
# client 端測試
netperf -t UDP_STREAM -H <server ip> -l 100 -- -m 64 -R 1 &
# 監控數據
sar -n DEV 5
# 結果分析,看 rxpck/s,txpck/s 值即可,值越大,性能越好
圖片
網絡帶寬
# server 端啟動 netserver
netserver
# 監控數據
sar -n DEV 5
# client 端測試
netperf -t TCP_STREAM -H <server ip> -l 100 -- -m 1500 -R 1 &
# 監控數據
sar -n DEV 5
# 結果分析,看 rxkB/s,txkB/s 值即可,值越大,性能越好
圖片
Nginx
# 安裝 ab 工具
yum -y install httpd-tools
# 編譯安裝 wrk
git clone https://github.com/wg/wrk.git
make
cp wrk /usr/local/bin/
# 測試,-c表示并發連接數1000,-t表示線程數為2,-d 表示測試時間
wrk -t12 -c400 -d30s <URL>
# 結果分析,Requests/sec 為 QPS
圖片
自動化壓測腳本
壓測需要大量采樣,并實時觀察
git clone https://github.com/clay-wangzhi/bench.git
bash bench.sh
圖片
更多測試方法,詳見 https://github.com/clay-wangzhi/bench