vdbench是一個I/O工做負載生成器,一般用於驗證數據完整性和度量直接附加(或網絡鏈接)存儲性能。它能夠運行在windows、linux環境,可用於測試文件系統或塊設備基準性能。html
vdbench版本包
下載連接java
jdk版本包
下載連接(windows)
下載連接(linux)node
解壓縮jdk安裝包至/opt
目錄linux
tar -zxvf jdk-8u251-linux-x64.tar.gz -C /opt/
配置jdk環境變量shell
echo 'JAVA_HOME=/opt/jdk1.8.0_251' >> /root/.bashrc echo 'PATH=$JAVA_HOME/bin:$PATH' >> /root/.bashrc echo 'CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /root/.bashrc source /root/.bashrc
非必選項,如須要聯機測試,則須要配置此項windows
示例使用三個客戶端聯機測試,使用客戶端node241
做爲主節點緩存
客戶端主機名 | 客戶端IP |
---|---|
node241 | 66.66.66.241 |
node242 | 66.66.66.242 |
node243 | 66.66.66.243 |
將每一個節點IP和主機名的映射關係寫入到/etc/hosts
配置文件內安全
echo '66.66.66.241 node241' >> /etc/hosts echo '66.66.66.242 node242' >> /etc/hosts echo '66.66.66.243 node243' >> /etc/hosts
主節點生成公鑰文件,並拷貝到其餘從節點(配置主節點到從節點免祕鑰登陸)bash
ssh-keygen ssh-copy-id node242 ssh-copy-id node243
解壓縮vdbench安裝包至/root/vdbench50406
目錄內,切換到vdbench解壓縮目錄執行對應參數文件便可網絡
unzip vdbench50406.zip -d /root/vdbench50406
部署jdk環境
直接安裝jdk軟件便可(環境變量在安裝完成後會自動添加)
vdbench使用
解壓縮vdbench軟件包,切換到vdbench解壓縮目錄執行對應參數文件便可
5570
、5560
訪問)rsyslog
,避免運行時出現其餘日誌文件打印信息messagescan=no
能夠過濾掉多餘的系統日誌檢查vdbench環境
./vdbench -t
運行測試模型
注:-f後接測試參數文件名,-o後接導出測試結果路徑
./vdbench -f {filename} -o {exportpath}
創建rsh通訊
注:此命令是用於windows系統多主機聯機跑vdbench時使用,由於windows操做系統不支持ssh,所以,vdbench提供了rsh的通訊方式。在目標主機上執行此工具後,vdbench將會啓動一個java socket用於vdbench slave與master之間通訊
./vdbench rsh
vdbench可用於文件系統及塊設備基準性能測試,如下主要介紹文件系統及塊存儲的經常使用測試參數
vdbench全部測試參數都定義到一個參數文件內,在運行時按照順序被讀取執行相應操做,在參數文件定義時須要執行順序進行定義
文件系統參數文件定義順序爲:HD、FSD、FWD、RD
非必選項,單機運行時不須要配置HD參數,通常只有在多主機聯機測試時才須要配置
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node241 hd=hd2,system=node242 hd=hd3,system=node243
rsh
、ssh
或vdbench
,默認值爲rsh
,多主機聯機測試時,mater和slave主機間通訊方式rsh
時,須要配置master和slave主機rsh互信,考慮到rsh使用明文傳輸,安全級別不夠,一般狀況下不建議使用這種通訊方式ssh
時,須要配置master和slave主機ssh互信,一般Linux主機聯機時使用此通訊方式vdbench
,須要在全部slave主機運行vdbench rsh
啓用vdbench自己的rsh守護進程,一般Window主機聯機時使用此通訊方式fsd=default,depth=2,width=3,files=2,size=128k fsd=fsd1,anchor=/mnt/client1 fsd=fsd2,anchor=/mnt/client2 fsd=fsd3,anchor=/mnt/client3
fsd1
、fsd2
、fsd3
...),能夠指定default
(將相同的參數做爲全部fsd的默認值)bottom
或all
,默認爲bottom
bottom
時,程序只在最後一層目錄寫入測試文件all
時,程序在每一層目錄都寫入測試文件yes
或no
,默認值爲no
,通常只有在多主機聯機測試時指定anchor
爲同一個路徑時,須要指定參數值爲yes
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node1 hd=hd2,system=node2 hd=hd3,system=node3 fsd=fsd1,anchor=/client/,depth=2,width=100,files=100,size=4k,shared=yes
計算公式以下:
最後一層生成文件夾個數=width
^depth
測試文件個數=(width
^depth
)*files
fsd=fsd1,anchor=/dir1,depth=2,width=3,files=2,size=128k 以上述參數爲例,生成目錄結構及測試文件以下: 最後一層文件夾數=3^2=9 最後一層文件數=9*2=18 /dir1/ ├── no_dismount.txt ├── vdb.1_1.dir │ ├── vdb.2_1.dir │ │ ├── vdb_f0001.file │ │ └── vdb_f0002.file │ ├── vdb.2_2.dir │ │ ├── vdb_f0001.file │ │ └── vdb_f0002.file │ └── vdb.2_3.dir │ ├── vdb_f0001.file │ └── vdb_f0002.file ├── vdb.1_2.dir │ ├── vdb.2_1.dir │ │ ├── vdb_f0001.file │ │ └── vdb_f0002.file │ ├── vdb.2_2.dir │ │ ├── vdb_f0001.file │ │ └── vdb_f0002.file │ └── vdb.2_3.dir │ ├── vdb_f0001.file │ └── vdb_f0002.file ├── vdb.1_3.dir │ ├── vdb.2_1.dir │ │ ├── vdb_f0001.file │ │ └── vdb_f0002.file │ ├── vdb.2_2.dir │ │ ├── vdb_f0001.file │ │ └── vdb_f0002.file │ └── vdb.2_3.dir │ ├── vdb_f0001.file │ └── vdb_f0002.file └── vdb_control.file 12 directories, 20 files
fwd=default,operation=read,xfersize=4k,fileio=sequential,fileselect=random,threads=2 fwd=fwd1,fsd=fsd1,host=hd1 fwd=fwd2,fsd=fsd2,host=hd2 fwd=fwd3,fsd=fsd3,host=hd3
read
或write
,文件操做方式0
~100
,讀操做佔比百分比,通常混合讀寫時須要指定,當值爲60時,則混合讀寫比爲6:4可選值爲random
或sequential
,標識文件 I/O 將執行的方式random
或sequential
,標識選擇文件或目錄的方式rd=rd1,fwd=(fwd1-fwd3),fwdrate=max,format=restart,elapsed=604800,interval=10
yes
、no
或restart
,標識預處理目錄和文件結構的方式30
,測試運行持續時間(單位爲秒)塊設備參數文件定義順序爲:HD、SD、WD、RD
非必選項,單機運行時不須要配置HD參數,通常只有在多主機聯機測試時才須要配置
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node241 hd=hd2,system=node242 hd=hd3,system=node243
rsh
、ssh
或vdbench
,默認值爲rsh
,多主機聯機測試時,mater和slave主機間通訊方式rsh
時,須要配置master和slave主機rsh互信,考慮到rsh使用明文傳輸,安全級別不夠,一般狀況下不建議使用這種通訊方式ssh
時,須要配置master和slave主機ssh互信,一般Linux主機聯機時使用此通訊方式vdbench
,須要在全部slave主機運行vdbench rsh
啓用vdbench自己的rsh守護進程,一般Window主機聯機時使用此通訊方式sd=sd1,hd=hd1,lun=/dev/sdb,openflags=o_direct,threads=6 sd=sd3,hd=hd2,lun=/dev/sdb,openflags=o_direct,threads=6 sd=sd6,hd=hd3,lun=/dev/sdb,openflags=o_direct,threads=6
o_direct
,以無緩衝緩存的方式進行讀寫操做wd=wd1,sd=sd*,seekpct=100,rdpct=100,xfersize=8k,skew=40 wd=wd2,sd=sd*,seekpct=100,rdpct=0,xfersize=8k,skew=10 wd=wd3,sd=sd*,seekpct=100,rdpct=100,xfersize=1024k,skew=40 wd=wd4,sd=sd*,seekpct=100,rdpct=0,xfersize=1024k,skew=10
0
或100
(也可以使用sequential
或random
表示),默認值爲100
,隨機尋道的百分比,設置爲0
時表示順序,設置爲100
時表示隨機。rd=rd1,wd=wd*,iorate=max,maxdata=400GB,warmup=30,elapse=604800,interval=5
100
、max
,此工做負載的固定I/O速率100
時,以每秒100個I/Os的速度運行工做負載,當參數值設置爲一個低於最大速率的值時,能夠達到限制讀寫速度的效果max
時,以最大的I/O速率運行工做負載,通常測試讀寫最大性能時,該參數值均爲max
interval
爲五、elapsed
爲600時,測試性能爲2
~elapsed/interval
(avg_2-120)時間間隔內的平均性能interval
爲五、warmup
爲60、elapsed
爲600時,測試性能爲1+(warmup/interval)
~(warmup+elapsed)/interval
(avg_13-132)時間間隔內的平均性能elapsed
時間後測試結束;當同時指定elapsed
和maxdata
參數值時,以最快運行完的參數爲準(即maxdata
測試時間小於elapsed
時,程序寫完elapsed
數據量後結束)100
如下時,表示讀寫數據量爲總存儲定義大小的倍數(如maxdata=2,2個存儲定義(每一個存儲定義數據量爲100G),則實際讀寫數據大小爲400G)100
以上時,表示數據量爲實際讀寫數據量(可使用單位M、G、T等)30
,測試運行持續時間(單位爲秒)[root@node241 vdbench50406]# cat Single-RawDisk.html sd=sd1,lun=/dev/sdb,openflag=o_direct wd=wd1,sd=sd1,seekpct=0,rdpct=0,xfersize=1M rd=rd1,wd=wd1,iorate=max,warmup=60,elapsed=600,interval=2 [root@node241 vdbench50406]# [root@node241 vdbench50406]# ./vdbench -f Single-RawDisk.html
E:\vdbench50406>more "Single FileSystem.txt" fsd=fsd1,anchor=E:\Sigle-FileSystem,depth=2,width=3,files=10,size=200M fwd=fwd1,fsd=fsd1,operation=write,xfersize=1M,fileio=sequential,fileselect=rando m,threads=2 rd=rd1,fwd=fwd1,fwdrate=max,format=yes,elapsed=600,interval=5 E:\vdbench50406> E:\vdbench50406>vdbench -f "Single FileSystem.txt"
2、安裝部署
,配置多主機ssh互信[root@node241 vdbench50406]# cat Multi-RawDisk hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node241 hd=hd2,system=node242 hd=hd3,system=node243 sd=sd1,hd=hd1,lun=/dev/sdb,openflag=o_direct sd=sd2,hd=hd2,lun=/dev/sdb,openflag=o_direct sd=sd3,hd=hd3,lun=/dev/sdb,openflag=o_direct wd=wd1,sd=sd*,seekpct=0,rdpct=0,xfersize=1M rd=rd1,wd=wd1,iorate=max,maxdata=100M,elapsed=64800,warmup=30,interval=5 [root@node241 vdbench50406]# [root@node241 vdbench50406]# ./vdbench -f Multi-RawDisk
E:\vdbench50406>vdbench rsh
二、master主機運行測試參數文件便可
示例以下,三節點針對文件系統聯機測試,1M順序寫,目錄深度爲2,每層目錄數爲3,每一個目錄文件數爲10000,每一個文件大小爲200M,測試時間爲600s,報告間隔1s
E:\vdbench50406>more "Multi FileSystem.txt" hd=default,vdbench=E:\vdbench50406,user=Micah,shell=vdbench hd=hd1,system=66.66.66.250 hd=hd2,system=66.66.66.252 fsd=fsd1,anchor=Z:\Sigle-FileSystem-01,depth=2,width=3,files=10000,size=200M fsd=fsd2,anchor=Z:\Sigle-FileSystem-02,depth=2,width=3,files=10000,size=200M fwd=default,operation=write,xfersize=1M,fileio=sequential,fileselect=random,threads=16 fwd=fwd1,fsd=fsd1,host=hd1 fwd=fwd2,fsd=fsd2,host=hd2 rd=rd1,fwd=fwd*,fwdrate=max,format=yes,elapsed=600,interval=1 E:\vdbench50406> E:\vdbench50406>vdbench -f "Multi FileSystem.txt"
當vdbench運行完負載測試後,會在安裝目錄下生成
output
文件夾,裏邊包含測試結果文件
parseflat
參數解析結果./vdbench parseflat -i <flatfile.html> -o output.csv [-c col1 col2 ..] [-a] [-f col1 value1 col2 value2..] -i input flatfile, e.g. output/flatfile.html -o output CSV file name (default stdout) -c which column to write to CSV. Columns are written in the order specified -f filters: 'if (colX == valueX) ... ...' (Alphabetic compare) -a include only the 'avg' data. Default: include only non-avg data. -i是表示待分析的文件,這裏寫vdbench輸出目錄裏的flatfile.html這個文件,寫其它文件不能正常解析; -o是解析後的輸出文件,能夠手動指定存放目錄。文件格式爲CSV,此文件的列由-c參數指定,列的順序爲-c參數的順序 -a是表示csv文件中只記錄測試過程當中的avg值 示例以下: .\vdbench.bat parseflat -i D:\vdbench50406\output\flatfile.html -c run rate MB/sec seekpct rdpct bytes/io threads resp -o d:\output.csv -a vdbench parseflat arguments: Argument 0: -i Argument 1: D:\vdbench50406\output\flatfile.html Argument 2: -c Argument 3: run Argument 4: rate Argument 5: MB/sec Argument 6: seekpct Argument 7: rdpct Argument 8: bytes/io Argument 9: threads Argument 10: resp Argument 11: -o Argument 12: D:\output.csv Argument 13: -a 14:12:49.265 ParseFlat completed successfully.
#測試參數以下: hd=default,vdbench=E:\vdbench50406,user=Micah,shell=vdbench hd=hd1,system=66.66.66.250 hd=hd2,system=66.66.66.252 fsd=fsd1,anchor=Z:\Sigle-FileSystem-01,depth=2,width=3,files=10,size=4M fsd=fsd2,anchor=Z:\Sigle-FileSystem-02,depth=2,width=3,files=10,size=4M fwd=default,operation=write,xfersize=1M,fileio=sequential,fileselect=random,threads=2 fwd=fwd1,fsd=fsd1,host=hd1 fwd=fwd2,fsd=fsd2,host=hd2 rd=rd1,fwd=fwd*,fwdrate=max,format=yes,elapsed=600,interval=5 #測試結果以下: 18:47:03.001 Starting RD=format_for_rd1 六月 04, 2020 .Interval. .ReqstdOps... ...cpu%... read ....read..... ....write.... ..mb/sec... mb/sec .xfer.. ...mkdir.... ...rmdir.... ...create... ....open.... ...close.... ...delete... rate resp total sys pct rate resp rate resp read write total size rate resp rate resp rate resp rate resp rate resp rate resp 18:48:40.218 avg_2-20 57.6 6.244 13.4 2.99 0.0 0.0 0.000 57.6 6.244 0.00 7.20 7.20 131072 0.2 104.49 0.2 41.526 1.8 7527.0 1.8 192.01 1.8 7134.3 1.8 21.984 18:48:42.000 Starting RD=rd1; elapsed=600; fwdrate=max. For loops: None 18:58:42.205 avg_2-120 6.2 1.063 13.0 2.80 0.0 0.0 0.000 6.2 1.063 0.00 6.24 6.24 1048576 0.0 0.000 0.0 0.000 0.0 0.000 1.6 47.864 1.6 2401.1 0.0 0.000
totals.html
通常包括兩個部分,第一部分爲文件存儲目錄結構及數據填充的平均性能值,第二部分爲執行測試過程當中除第一個時間間隔外全部時間間隔平均性能值,主要看第二部分的內容
Interval
報告間隔序號,測試結果通常爲除第一個時間間隔外全部時間間隔加權平均值
如elapsed=600,interval=5,則性能結果爲第2個間隔到第120個間隔的平均值(avg_2-120)
ReqstdOps
rd
運行定義參數fwdrate
控制fwdrate
爲max
時,以最大I/O速率運行工做負載fwdrate
爲低於最大I/0速率的一個數值時,能夠限制讀寫速度,以固定I/O速率運行工做負載ms
cpu%
read pct
讀取請求佔總請求數百分比佔比,當爲0時表示寫,當爲100時表示讀
read
ms
write
ms
mb/sec
xfersize
每一個讀寫I/O傳輸數據量(即單個讀寫I/O大小),單位爲字節B
#測試參數以下: messagescan=no hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node241 hd=hd2,system=node242 hd=hd3,system=node243 sd=sd1,hd=hd1,lun=/dev/sdb,openflag=o_direct sd=sd2,hd=hd2,lun=/dev/sdb,openflag=o_direct sd=sd3,hd=hd3,lun=/dev/sdb,openflag=o_direct wd=wd1,sd=sd*,seekpct=0,rdpct=0,xfersize=1M rd=rd1,wd=wd1,iorate=max,elapsed=600,warmup=30,interval=5 #測試結果以下: <a name="_1143839598"></a><i><b>19:02:15.001 Starting RD=rd1; I/O rate: Uncontrolled MAX; elapsed=600 warmup=30; For loops: None</b></i> Jun 04, 2020 interval i/o MB/sec bytes read resp read write resp resp queue cpu% cpu% rate 1024**2 i/o pct time resp resp max stddev depth sys+u sys 19:12:46.068 avg_7-126 82.74 82.74 1048576 0.00 289.158 0.000 289.158 2092.803 155.103 23.9 16.3 14.2
interval
報告間隔序號,測試結果通常爲除第一個時間時間外全部時間間隔加權平均值,若有設置預熱時間,則這部分測試數據也須要排除在外
如elapsed=600,warmup=30,interval=5,則性能測試結果爲第7個間隔到第126個間隔的平均值(avg_7-126)
i/o rate
每秒讀寫I/O個數(讀寫IOPS),能夠經過rd
運行定義參數iorate
控制
當iorate
爲max
時,以最大I/O速率運行工做負載
當iorate
爲低於最大I/0速率的一個數值時,能夠限制讀寫速度,以固定I/O速率運行工做負載
MB/sec
每秒讀寫速度(讀寫帶寬)
注:按官方手冊說明,
bytes i/0
每一個讀寫I/O傳輸數據量(即單個讀寫I/O大小),單位爲字節B
,能夠經過wd
工做負載定義參數xfersize
控制
read pct
讀取請求佔請求總數的百分比,能夠經過wd
工做負載定義參數rdpct
控制
當rdpct
爲0
時,表示測試模型爲寫
當rdpct
爲100
時,表示測試模型爲讀
resp time
請求響應時間(讀寫時延),單位爲毫秒ms
read resp
讀取請求響應時間,單位爲毫秒ms
write resp
寫入請求響應時間,單位爲毫秒ms
resp max
最大請求響應時間,單位爲毫秒ms
resp stddev
請求響應時間標準誤差,單位爲毫秒ms
queue depth
讀寫I/0隊列深度
cpu% sys+u
內核態空間及用戶態空間CPU佔用率
cpu% sys
內核態空間CPU佔用率 2020年05月29日 16:00:16 Clear
grep 'processor' /proc/cpuinfo | sort -u | wc -l
sync;echo 3 > /proc/sys/vm/drop
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node21 hd=hd2,system=node22 hd=hd3,system=node23 hd=hd4,system=node24 hd=hd5,system=node25 hd=hd6,system=node26 fsd=fsd1,anchor=/client/test01,depth=2,width=100,files=100,size=4M,shared=yes fwd=format,threads=24,xfersize=1m fwd=default,xfersize=1m,fileio=sequential,fileselect=sequential,operation=write,threads=24 fwd=fwd1,fsd=fsd1,host=hd1 fwd=fwd2,fsd=fsd1,host=hd2 fwd=fwd3,fsd=fsd1,host=hd3 fwd=fwd4,fsd=fsd1,host=hd4 fwd=fwd5,fsd=fsd1,host=hd5 fwd=fwd6,fsd=fsd1,host=hd6 rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=600,interval=1
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node21 hd=hd2,system=node22 hd=hd3,system=node23 hd=hd4,system=node24 hd=hd5,system=node25 hd=hd6,system=node26 fsd=fsd1,anchor=/client/test02,depth=2,width=100,files=100,size=4M,shared=yes fwd=format,threads=24,xfersize=1m fwd=default,xfersize=1m,fileio=sequential,fileselect=sequential,operation=read,threads=24 fwd=fwd1,fsd=fsd1,host=hd1 fwd=fwd2,fsd=fsd1,host=hd2 fwd=fwd3,fsd=fsd1,host=hd3 fwd=fwd4,fsd=fsd1,host=hd4 fwd=fwd5,fsd=fsd1,host=hd5 fwd=fwd6,fsd=fsd1,host=hd6 rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=600,interval=1
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node21 hd=hd2,system=node22 hd=hd3,system=node23 hd=hd4,system=node24 hd=hd5,system=node25 hd=hd6,system=node26 fsd=fsd1,anchor=/client/test03,depth=2,width=100,files=100,size=8M,shared=yes fwd=format,threads=24,xfersize=1m fwd=default,xfersize=1m,fileio=random,fileselect=random,rdpct=60,threads=24 fwd=fwd1,fsd=fsd1,host=hd1 fwd=fwd2,fsd=fsd1,host=hd2 fwd=fwd3,fsd=fsd1,host=hd3 fwd=fwd4,fsd=fsd1,host=hd4 fwd=fwd5,fsd=fsd1,host=hd5 fwd=fwd6,fsd=fsd1,host=hd6 rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=600,interval=1