vdbench - 性能压力测试工具
? ? ? ? 《存儲(chǔ)工具系列文章》主要介紹存儲(chǔ)相關(guān)的測(cè)試和調(diào)試工具,包括不限于dd、fio、vdbench、iozone、iometer、cosbench等性能負(fù)載工具,及strace等調(diào)試工具。
1. 概述
????????vdbench是一個(gè)I/O工作負(fù)載生成器,通常用于驗(yàn)證數(shù)據(jù)完整性和度量直接附加(或網(wǎng)絡(luò)連接)存儲(chǔ)性能。
????????vdbench可以運(yùn)行在windows、linux環(huán)境,可用于測(cè)試文件系統(tǒng)或塊設(shè)備基準(zhǔn)性能。
2. 安裝部署
2.1?? ?Linux平臺(tái)
????????一、安裝jdk
[root@node1 vdbench50406]# rpm -ivh jdk-8u144-linux-x64.rpm????????配置jdk環(huán)境變量,明確jdk安裝目錄,本次實(shí)踐為/usr/java/jdk1.8.0_144
[root@node1 vdbench50406]# echo 'JAVA_HOME=/usr/java/jdk1.8.0_144' >> /etc/profile [root@node1 vdbench50406]# echo 'PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile [root@node1 vdbench50406]# echo 'CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /etc/profile [root@node1 vdbench50406]# echo 'export PATH' >> /etc/profile [root@node1 vdbench50406]# echo 'export JAVA_HOME' >> /etc/profile [root@node1 vdbench50406]# echo 'export CLASSPTH' >> /etc/profile????????使環(huán)境變量生效
[root@node1 vdbench50406]# source /etc/profile????????二、vdbench解壓
????????解壓縮vdbench安裝包,切換到vdbench解壓縮目錄執(zhí)行對(duì)應(yīng)參數(shù)文件即可
[root@node1 vdbench50406]# unzip vdbench50406.zip2.2?? ?Windows平臺(tái)
????????一、部署jdk環(huán)境
????????直接安裝jdk軟件即可(環(huán)境變量在安裝完成后會(huì)自動(dòng)添加)
????????二、vdbench使用
????????解壓縮vdbench軟件包,切換到vdbench解壓縮目錄執(zhí)行對(duì)應(yīng)參數(shù)文件即可
3.?配置參數(shù)說明
????????vdbench可用于文件系統(tǒng)及塊設(shè)備基準(zhǔn)性能測(cè)試,以下主要介紹文件系統(tǒng)及塊存儲(chǔ)的常用測(cè)試參數(shù)
????????vdbench所有測(cè)試參數(shù)都定義到一個(gè)參數(shù)文件內(nèi),在運(yùn)行時(shí)按照順序被讀取執(zhí)行相應(yīng)操作,在參數(shù)文件定義時(shí)需要執(zhí)行順序進(jìn)行定義。
3.1 文件系統(tǒng)
????????文件系統(tǒng)參數(shù)文件定義順序?yàn)?#xff1a;HD、FSD、FWD、RD。
3.1.1 hd(host define)
? ? ? ? 非必選項(xiàng),單機(jī)運(yùn)行時(shí)不需要配置HD參數(shù),一般只有在多主機(jī)聯(lián)機(jī)測(cè)試時(shí)才需要配置。
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node241 hd=hd2,system=node242 hd=hd3,system=node243????????hd:標(biāo)識(shí)主機(jī)定義的名稱,多主機(jī)運(yùn)行時(shí),可以使用hd1、hd2、hd3…區(qū)分
????????system:主機(jī)IP地址或主機(jī)名
????????vdbench:vdbench執(zhí)行文件存放路徑,當(dāng)多主機(jī)存放路徑不同時(shí),可在hd定義時(shí)單獨(dú)指定
????????user:slave和master通信使用用戶
????????shell:可選值為rsh、ssh或vdbench,默認(rèn)值為rsh,多主機(jī)聯(lián)機(jī)測(cè)試時(shí),mater和slave主機(jī)間通信方式
- 當(dāng)參數(shù)值為rsh時(shí),需要配置master和slave主機(jī)rsh互信,考慮到rsh使用明文傳輸,安全級(jí)別不夠,通常情況下不建議使用這種通信方式;
- 當(dāng)參數(shù)值為ssh時(shí),需要配置master和slave主機(jī)ssh互信,通常Linux主機(jī)聯(lián)機(jī)時(shí)使用此通信方式;
- 當(dāng)參數(shù)值為vdbench,需要在所有slave主機(jī)運(yùn)行vdbench rsh啟用vdbench本身的rsh守護(hù)進(jìn)程,通常Window主機(jī)聯(lián)機(jī)時(shí)使用此通信方式。
3.1.2 FSD(File System Define)
fsd=default,openflags=directio,depth=2,width=3,files=2,size=128k fsd=fsd1,anchor=/mnt/client1 fsd=fsd2,anchor=/mnt/client2 fsd=fsd3,anchor=/mnt/client3????????fsd:標(biāo)識(shí)文件系統(tǒng)定義的名稱,多文件系統(tǒng)時(shí)(fsd1、fsd2、fsd3…),可以指定default(將相同的參數(shù)作為所有fsd的默認(rèn)值)
????????openflags:通過設(shè)置為o_direct或directio,以無緩沖緩存的方式進(jìn)行讀寫操作
????????anchor:文件寫入目錄,linux指定路徑為/dir01;windows指定路徑為E:\dir01;
????????depth:創(chuàng)建目錄層級(jí)數(shù)(即目錄深度)
????????width:每層文件夾的子文件夾數(shù)
????????files:測(cè)試文件個(gè)數(shù)(vdbench測(cè)試過程中會(huì)生成多層級(jí)目錄結(jié)構(gòu),實(shí)際只有最后一層目錄會(huì)生成測(cè)試文件)
????????size:每個(gè)測(cè)試文件大小
????????**distribution= ** 可選值為bottom或all,默認(rèn)為bottom
–當(dāng)參數(shù)值為bottom時(shí),程序只在最后一層目錄寫入測(cè)試文件
–當(dāng)參數(shù)值為all時(shí),程序在每一層目錄都寫入測(cè)試文件
????????shared:可選值為yes或no,默認(rèn)值為no,一般只有在多主機(jī)聯(lián)機(jī)測(cè)試時(shí)指定
????????vdbench不允許不同的slave之間共享同一個(gè)目錄結(jié)構(gòu)下的所有文件,因?yàn)檫@樣會(huì)帶來很大的開銷,但是它們?cè)试S共享同一個(gè)目錄結(jié)構(gòu)。加入設(shè)置了shared=yes,那么不同的slave可以平分一個(gè)目錄下所有的文件來進(jìn)行訪問,相當(dāng)于每個(gè)slave有各自等分的訪問區(qū)域,因此不能測(cè)試多個(gè)客戶的對(duì)同一個(gè)文件的讀寫–當(dāng)多主機(jī)聯(lián)機(jī)測(cè)試時(shí),寫入的根目錄anchor為同一個(gè)路徑時(shí),需要指定參數(shù)值為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????????計(jì)算公式如下:
最后一層生成文件夾個(gè)數(shù)=width^depth
測(cè)試文件個(gè)數(shù)=(width^depth)*files
fsd=fsd1,anchor=/dir1,depth=2,width=3,files=2,size=128k
????????以上述參數(shù)為例,生成目錄結(jié)構(gòu)及測(cè)試文件如下:
????????最后一層文件夾數(shù)=3^2=9 最后一層文件數(shù)=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.file12 directories, 20 files3.1.3 FWD(FileSystem Workload Defile)
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????????fwd:標(biāo)識(shí)文件系統(tǒng)工作負(fù)載定義的名稱,多文件系統(tǒng)工作負(fù)載定義時(shí),可以使用fwd1、fwd2、fwd3…區(qū)分
????????fsd:標(biāo)識(shí)此工作負(fù)載使用文件存儲(chǔ)定義的名稱
????????host:標(biāo)識(shí)此工作負(fù)載使用主機(jī)
????????operation:可選值為read或write,文件操作方式
????????rdpct:可選值為0~100,讀操作占比百分比,一般混合讀寫時(shí)需要指定,當(dāng)值為60時(shí),則混合讀寫比為6:4
????????fileio:可選值為random或sequential,標(biāo)識(shí)文件 I/O 將執(zhí)行的方式
????????fileselect: random或sequential,標(biāo)識(shí)選擇文件或目錄的方式
????????xfersizes:數(shù)據(jù)傳輸(讀取和寫入操作)處理的數(shù)據(jù)大小(即單次IO大小)
????????threads:此工作負(fù)載的并發(fā)線程數(shù)量
注:
1、默認(rèn)情況下,預(yù)填數(shù)據(jù)工作負(fù)載定義為threads=8,xfersize=128k,即預(yù)填數(shù)據(jù)使用8線程,IO大小為128K 如需更改默認(rèn)預(yù)填數(shù)據(jù)工作負(fù)載定義,則需要增加參數(shù)指定線程數(shù)和IO大小(fwd=format,threads=nn,xfersize=nn)3.1.4 RD(Run Define)
rd=rd1,fwd=(fwd1-fwd3),fwdrate=max,format=restart,elapsed=604800,interval=10????????rd:標(biāo)識(shí)文件系統(tǒng)運(yùn)行定義的名稱。
????????fwd:標(biāo)識(shí)文件系統(tǒng)工作負(fù)載定義的名稱。
????????fwdrate:每秒執(zhí)行的文件系統(tǒng)操作數(shù)量。設(shè)置為max,表示不做任何限制,按照最大強(qiáng)度自適應(yīng)
????????format: 可選值為no、yes、或restart,標(biāo)識(shí)預(yù)處理目錄和文件結(jié)構(gòu)的方式
- no:默認(rèn)參數(shù)值,不執(zhí)行format預(yù)處理操作,如測(cè)試目錄不存在文件時(shí),vdbench會(huì)由于無可用文件讀寫而異常退出
- yes:表示刪除測(cè)試目錄已有文件結(jié)構(gòu),并且重新創(chuàng)建新的文件結(jié)構(gòu)
- restart:表示只創(chuàng)建未生成的目錄或文件,并且增大未達(dá)到實(shí)際大小的文件
????????elapsed:默認(rèn)值為30,測(cè)試運(yùn)行持續(xù)時(shí)間(單位為秒)
????????interval:結(jié)果輸出打印時(shí)間間隔(單位為秒)
3.2 塊設(shè)備
????????塊設(shè)備參數(shù)文件定義順序?yàn)?#xff1a;HD、SD、WD、RD
3.2.1 HD(Host Define)
????????非必選項(xiàng),單機(jī)運(yùn)行時(shí)不需要配置HD參數(shù),一般只有在多主機(jī)聯(lián)機(jī)測(cè)試時(shí)才需要配置
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node241 hd=hd2,system=node242 hd=hd3,system=node243????????參數(shù)解析參照文件系統(tǒng)的hd系列參數(shù)
3.2.2 SD(Storage Define)
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????????sd: 標(biāo)識(shí)存儲(chǔ)定義的名稱
????????hd: 標(biāo)識(shí)主機(jī)定義的名稱
????????lun: 寫入塊設(shè)備,linux使用sdb盤,則指定路徑為/dev/sdb;windows使用G盤,則指定路徑為\\.\G:;
????????openflags: 通過設(shè)置為o_direct或directio,以無緩沖緩存的方式進(jìn)行讀寫操作
????????threads: 對(duì)SD的最大并發(fā)I/O請(qǐng)求數(shù)量
3.2.3 WD(Workload Define)
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????????wd: 標(biāo)識(shí)工作負(fù)載定義的名稱
????????sd: 標(biāo)識(shí)存儲(chǔ)定義的名稱
????????seekpct: 可選值為0或100(也可使用sequential或random表示),默認(rèn)值為100,隨機(jī)尋道的百分比,設(shè)置為0時(shí)表示順序,設(shè)置為100時(shí)表示隨機(jī)。
????????rdpct:讀取請(qǐng)求占請(qǐng)求總數(shù)的百分比,設(shè)置為0時(shí)表示寫,設(shè)置為100時(shí)表示讀
????????xfersize: 要傳輸?shù)臄?shù)據(jù)大小。默認(rèn)設(shè)置為4k
????????skew: 非必選項(xiàng),一般在多個(gè)工作負(fù)載時(shí)需要指定,表示該工作負(fù)載占總工作量百分比(skew總和為100)
3.2.4 RD(Run Define)
rd=rd1,wd=wd*,iorate=max,maxdata=400GB,warmup=30,elapse=604800,interval=5????????rd: 標(biāo)識(shí)運(yùn)行定義的名稱
????????wd: 標(biāo)識(shí)工作負(fù)載定義的名稱
????????iorate: 常用可選值為100、max,此工作負(fù)載的固定I/O速率
- –當(dāng)參數(shù)值為100時(shí),以每秒100個(gè)I/Os的速度運(yùn)行工作負(fù)載,當(dāng)參數(shù)值設(shè)置為一個(gè)低于最大速率的值時(shí),可以達(dá)到限制讀寫速度的效果
- –當(dāng)參數(shù)值為max時(shí),以最大的I/O速率運(yùn)行工作負(fù)載,一般測(cè)試讀寫最大性能時(shí),該參數(shù)值均為max
????????warmup: 預(yù)熱時(shí)間(單位為秒),默認(rèn)情況下vdbench會(huì)將第一個(gè)時(shí)間間隔輸出數(shù)據(jù)排除在外,程序在預(yù)熱時(shí)間內(nèi)的測(cè)試不納入最終測(cè)試結(jié)果中(即預(yù)熱結(jié)束后,才開始正式測(cè)試)
- –當(dāng)interval為5、elapsed為600時(shí),測(cè)試性能為2~elapsed/interval(avg_2-120)時(shí)間間隔內(nèi)的平均性能
- –當(dāng)interval為5、warmup為60、elapsed為600時(shí),測(cè)試性能為1+(warmup/interval)~(warmup+elapsed)/interval(avg_13-132)時(shí)間間隔內(nèi)的平均性能
????????maxdata:讀寫數(shù)據(jù)大小,通常情況下,當(dāng)運(yùn)行elapsed時(shí)間后測(cè)試結(jié)束;當(dāng)同時(shí)指定elapsed和maxdata參數(shù)值時(shí),以最快運(yùn)行完的參數(shù)為準(zhǔn)(即maxdata測(cè)試時(shí)間小于elapsed時(shí),程序?qū)懲阤lapsed數(shù)據(jù)量后結(jié)束)
- –當(dāng)參數(shù)值為100以下時(shí),表示讀寫數(shù)據(jù)量為總存儲(chǔ)定義大小的倍數(shù)(如maxdata=2,2個(gè)存儲(chǔ)定義(每個(gè)存儲(chǔ)定義數(shù)據(jù)量為100G),則實(shí)際讀寫數(shù)據(jù)大小為400G)
- –當(dāng)參數(shù)值為100以上時(shí),表示數(shù)據(jù)量為實(shí)際讀寫數(shù)據(jù)量(可以使用單位M、G、T等)
????????elapsed: 默認(rèn)值為30,測(cè)試運(yùn)行持續(xù)時(shí)間(單位為秒)
????????interval: 報(bào)告時(shí)間間隔(單位為秒)
4 測(cè)試案例
4.1 單機(jī)測(cè)試
4.1.1 Linux平臺(tái)
示例如下,單節(jié)點(diǎn)針對(duì)裸盤測(cè)試,1M順序?qū)?#xff0c;測(cè)試時(shí)間600s,預(yù)熱時(shí)間60s,報(bào)告時(shí)間間隔2s
[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.html4.1.2 Windows平臺(tái)
????????示例如下,單節(jié)點(diǎn)針對(duì)文件系統(tǒng)測(cè)試,1M順序?qū)?#xff0c;目錄深度為2,每層目錄數(shù)為3,每個(gè)目錄文件數(shù)為10,每個(gè)文件大小為200M,測(cè)試時(shí)間為600s,報(bào)告時(shí)間時(shí)間2s
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"4.2 聯(lián)機(jī)測(cè)試
4.2.1 Linux平臺(tái)
????????一、配置多主機(jī)ssh互信
????????二、master主機(jī)運(yùn)行測(cè)試參數(shù)文件即可
????????示例如下,三節(jié)點(diǎn)針對(duì)裸盤聯(lián)機(jī)測(cè)試,1M順序?qū)?#xff0c;測(cè)試數(shù)據(jù)量為400G,預(yù)熱時(shí)間30s,報(bào)告間隔5s
[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-RawDisk4.2.2 Windows平臺(tái)
????????一、所有slave主機(jī)運(yùn)行vdbench本身rsh守護(hù)進(jìn)程
????????E:\vdbench50406>vdbench rsh
????????二、master主機(jī)運(yùn)行測(cè)試參數(shù)文件即可
????????示例如下,三節(jié)點(diǎn)針對(duì)文件系統(tǒng)聯(lián)機(jī)測(cè)試,1M順序?qū)?#xff0c;目錄深度為2,每層目錄數(shù)為3,每個(gè)目錄文件數(shù)為10000,每個(gè)文件大小為200M,測(cè)試時(shí)間為600s,報(bào)告間隔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"4.3 常見測(cè)試參數(shù)
4.3.1 4M順序?qū)?/h3>
????????目錄深度2、單級(jí)目錄數(shù)100、單個(gè)目錄文件數(shù)100、單文件大小4M、IO塊大小1M、順序?qū)憽?/p> 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
4.3.1 4M順序讀
????????目錄深度2、單級(jí)目錄數(shù)100、單個(gè)目錄文件數(shù)100、單文件大小4M、IO塊大小1M、順序讀
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=14.3.2 8M混合讀寫
????????目錄深度2、單級(jí)目錄數(shù)100、單個(gè)目錄文件數(shù)100、單文件大小8M、IO塊大小1M、混合讀寫(讀寫比為6:4)
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=15 測(cè)試結(jié)果解析
????????當(dāng)vdbench運(yùn)行完負(fù)載測(cè)試后,會(huì)在安裝目錄下生成output文件夾,里邊包含測(cè)試結(jié)果文件。
5.1 輸出文件
errorlog.html
當(dāng)運(yùn)行測(cè)試啟用數(shù)據(jù)校驗(yàn)時(shí),它可能會(huì)包含一些錯(cuò)誤信息,如:無效的密鑰讀取、無效的 lba 讀取(一個(gè)扇區(qū)的邏輯字節(jié)地址)、無效的 SD 或 FSD 名稱讀取、數(shù)據(jù)損壞、壞扇區(qū)。
flatfile.html
vdbench 生成的一種逐列的 ASCII 格式的信息,可以使用parseflat參數(shù)解析結(jié)果
histogram.html
一種包含報(bào)告柱狀圖的響應(yīng)時(shí)間、文本格式的文件
logfile.html
包含 Java 代碼寫入控制臺(tái)窗口的每行信息的副本。logfile.html 主要用于調(diào)試用途
parmfile.html
包含測(cè)試運(yùn)行配置參數(shù)信息
summary.html
記錄全部數(shù)據(jù)信息,顯示每個(gè)報(bào)告間隔內(nèi)總體性能情況及工作負(fù)載情況,以及除第一個(gè)間隔外的所有間隔的加權(quán)平均值
totals.html
記錄全部數(shù)據(jù)計(jì)算之后的平均值,一般測(cè)試結(jié)果從該文件取值,除第一個(gè)間隔外所有間隔的加權(quán)平均值
5.2 文件系統(tǒng)結(jié)果分析
????????測(cè)試參數(shù):
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????????測(cè)試結(jié)果:
?
??? ?totals.html
一般包括兩個(gè)部分,第一部分為文件存儲(chǔ)目錄結(jié)構(gòu)及數(shù)據(jù)填充的平均性能值,第二部分為執(zhí)行測(cè)試過程中除第一個(gè)時(shí)間間隔外所有時(shí)間間隔平均性能值,主要看第二部分的內(nèi)容
??? ?Interval:報(bào)告間隔序號(hào),測(cè)試結(jié)果一般為除第一個(gè)時(shí)間間隔外所有時(shí)間間隔加權(quán)平均值,如elapsed=600,interval=5,則性能結(jié)果為第2個(gè)間隔到第120個(gè)間隔的平均值(avg_2-120)
??? ?ReqstdOps:Rate:每秒讀寫I/O個(gè)數(shù)(讀寫IOPS),可以通過rd運(yùn)行定義參數(shù)fwdrate控制;當(dāng)fwdrate為max時(shí),以最大I/O速率運(yùn)行工作負(fù)載;當(dāng)fwdrate為低于最大I/0速率的一個(gè)數(shù)值時(shí),可以限制讀寫速度,以固定I/O速率運(yùn)行工作負(fù)載。
Resp:讀寫請(qǐng)求響應(yīng)時(shí)間(讀寫時(shí)延),單位為ms
??? ?cpu%
tatol:總的cpu占用率
sys:系統(tǒng)cpu占用率
??? ?read pct
? ? ? ? 讀取請(qǐng)求占總請(qǐng)求數(shù)百分比占比,當(dāng)為0時(shí)表示寫,當(dāng)為100時(shí)表示讀
??? ?read
rate:每秒讀I/O個(gè)數(shù)(讀IOPS)
resp:讀請(qǐng)求響應(yīng)時(shí)間(讀時(shí)延),單位為ms
??? ?write
rate:每秒寫I/O個(gè)數(shù)(寫IOPS)
resp:寫請(qǐng)求響應(yīng)時(shí)間(寫時(shí)延),單位為ms
??? ?mb/sec
read:每秒讀取速度
write:每秒寫入速度
total:每秒讀寫速度總和
??? ?xfersize
每個(gè)讀寫I/O傳輸數(shù)據(jù)量(即單個(gè)讀寫I/O大小),單位為字節(jié)B
5.3?? ?塊設(shè)備結(jié)果分析
測(cè)試參數(shù)如下:
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測(cè)試結(jié)果如下:
19:02:15.001 Starting RD=rd1; I/O rate: Uncontrolled MAX; elapsed=600 warmup=30; For loops: NoneJun 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
報(bào)告間隔序號(hào),測(cè)試結(jié)果一般為除第一個(gè)時(shí)間時(shí)間外所有時(shí)間間隔加權(quán)平均值,如有設(shè)置預(yù)熱時(shí)間,則這部分測(cè)試數(shù)據(jù)也需要排除在外
如elapsed=600,warmup=30,interval=5,則性能測(cè)試結(jié)果為第7個(gè)間隔到第126個(gè)間隔的平均值(avg_7-126)
??? ?i/o rate
每秒讀寫I/O個(gè)數(shù)(讀寫IOPS),可以通過rd運(yùn)行定義參數(shù)iorate控制
當(dāng)iorate為max時(shí),以最大I/O速率運(yùn)行工作負(fù)載
當(dāng)iorate為低于最大I/0速率的一個(gè)數(shù)值時(shí),可以限制讀寫速度,以固定I/O速率運(yùn)行工作負(fù)載
??? ?MB/sec
每秒讀寫速度(讀寫帶寬)
注:按官方手冊(cè)說明,
??? ?bytes i/0
每個(gè)讀寫I/O傳輸數(shù)據(jù)量(即單個(gè)讀寫I/O大小),單位為字節(jié)B,可以通過wd工作負(fù)載定義參數(shù)xfersize控制
??? ?read pct
讀取請(qǐng)求占請(qǐng)求總數(shù)的百分比,可以通過wd工作負(fù)載定義參數(shù)rdpct控制
當(dāng)rdpct為0時(shí),表示測(cè)試模型為寫
當(dāng)rdpct為100時(shí),表示測(cè)試模型為讀
??? ?resp time
請(qǐng)求響應(yīng)時(shí)間(讀寫時(shí)延),單位為毫秒ms
??? ?read resp
讀取請(qǐng)求響應(yīng)時(shí)間,單位為毫秒ms
??? ?write resp
寫入請(qǐng)求響應(yīng)時(shí)間,單位為毫秒ms
??? ?resp max
最大請(qǐng)求響應(yīng)時(shí)間,單位為毫秒ms
??? ?resp stddev
請(qǐng)求響應(yīng)時(shí)間標(biāo)準(zhǔn)偏差,單位為毫秒ms
??? ?queue depth
讀寫I/0隊(duì)列深度
??? ?cpu% sys+u
內(nèi)核態(tài)空間及用戶態(tài)空間CPU占用率
??? ?cpu% sys
內(nèi)核態(tài)空間CPU占用率
6 常見問題
6.1 open failed for xxx
一、問題描述:
????????使用vdbench測(cè)試過程中,測(cè)試中斷,報(bào)錯(cuò)信息如下:
19:37:41.155 19:37:44.813 error: 20 19:37:41.155 19:37:44.813 file_open(), open /trash/64M/vdb.1_47.dir/vdb.2_24.dir/vdb_f0002.file failed 19:37:41.155 19:37:44.814 error: 20 19:37:41.155 19:37:44.814 file_open(), open /trash/64M/vdb.1_47.dir/vdb.2_24.dir/vdb_f0003.file failed 19:37:41.156 19:37:44.814 Maximum native memory allocation: ? ?1,048,576; Current allocation: ? ?1,048,576 19:37:41.156 19:37:44.814 Maximum native memory allocation: ? ?1,048,576; Current allocation: ? ?1,048,576 19:37:41.156 19:37:44.814 error: 20 19:37:41.156 19:37:44.814? 19:37:41.156 19:37:44.814 open failed for /trash/64M/vdb.1_47.dir/vdb.2_24.dir/vdb_f0002.file 19:37:41.156 19:37:44.814? 19:37:41.158 java.lang.RuntimeException: open failed for /trash/64M/vdb.1_47.dir/vdb.2_24.dir/vdb_f0002.file二、原因分析:
????????默認(rèn)vdbench限制了java內(nèi)存使用量,測(cè)試期間java運(yùn)行內(nèi)存不足才導(dǎo)致測(cè)試異常中斷。
三、處理措施:
增大vdbench運(yùn)行腳本的java內(nèi)存參數(shù)
[root@node40 ~]# cat vdbench50406/vdbench if [ "$1" == "SlaveJvm" ]; then$java -client -Xmx10240m -Xms128m -cp $cp Vdb.SlaveJvm $*exit $? else$java -client -Xmx10240m ?-Xms64m ?-cp $cp Vdb.Vdbmain $*exit $? fi注:Xmx表示jvm最大內(nèi)存分配池,Xms表示初始內(nèi)存分配池
進(jìn)程初始以Xms內(nèi)存大小啟動(dòng),當(dāng)空余堆內(nèi)存小于40%時(shí),jvm會(huì)增大內(nèi)存至Xmx;當(dāng)空余堆內(nèi)存大于70%時(shí),jvm會(huì)減少內(nèi)存至Xms;為避免每次GC后JVM重新分配內(nèi)存,可以將Xmx和Xms設(shè)置為相同的參數(shù)值。
6.2 linux/aarch64.so does not exist
一、問題描述
????????arm服務(wù)器運(yùn)行vdbench,出現(xiàn)共享庫不匹配問題linux/aarch64.so does not exist,提示需要手動(dòng)編譯。
二、原因分析:
????????vdbench根目錄動(dòng)態(tài)庫文件linux/linux64.so為基于x86編譯的,需要基于aarch64重新編譯linux/linux64.so動(dòng)態(tài)庫文件
[root@node163 vdbench50407]# ls linux/ config.sh ?linux32.so ?linux64.so ?sparc64.so [root@node163 vdbench50407]# file linux/linux64.so? linux/linux64.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=34a31f32956f21153c372a95e73c02e84ddd29f8, not stripped三、處理措施:
第一步:準(zhǔn)備源碼
????????下載vdbench50407源碼包,下載地址:vdbench50407.src.zip
????????解壓縮源碼包,創(chuàng)建linux目錄
mkdir vdbench50407-srcunzip vdbench50407.src.zip -d vdbench50407-src/cd vdbench50407-src/src/mkdir linux第二步:完善代碼
????????進(jìn)入Jni目錄下,修改make.linux文件,主要修改如下:
????????– 指定vdbench源碼路徑(vdb=xx)
????????– 指定jdk路徑(java=xx),通常在/usr/lib/jvm/路徑下
????????– 刪除全文-m32和-m64字符
cd Jni/ sed -i 's#vdb=$mine/vdbench504#vdb=/root/vdbench50407-src/src#g' make.linux sed -i 's#java=/net/sbm-240a.us.oracle.com/export/swat/swat_java/linux/jdk1.5.0_22/#java=/usr/lib/jvm/java-1.8.0-openjdk/#g' make.linux sed -i 's/-m32//g' make.linux? sed -i 's/-m64//g' make.linux第三步:編譯安裝
????????執(zhí)行源碼編譯操作./make.linux
????????執(zhí)行成功后會(huì)在../linux目錄下生成linux32.so和linux64.so文件,將linux64.so文件拷貝到vdbench測(cè)試工具根目錄linux/aarch64.so下,重新運(yùn)行vdbench測(cè)試
[root@node163 Jni]# ./make.linux target directory: /root/vdbench50407-src/src Compiling 32 bit Linking 32 bitCompiling 64 bit Linking 64 bit[root@node163 Jni]# ll ../linux/ total 160 -rwxrwxrwx 1 root root 78656 Feb ?9 14:54 linux32.so -rwxrwxrwx 1 root root 78656 Feb ?9 14:54 linux64.so[root@node163 Jni]# cp ../linux/linux64.so /root/vdbench50407/linux/aarch64.so6.3 Raw device ‘sd=sd1,lun=\.\G:’ does not exist, or no permissions.
一、問題描述:
????????windows系統(tǒng)下使用vdbench測(cè)試裸盤性能,腳本運(yùn)行失敗,提示Raw device 'sd=sd1,lun=\\.\G:' does not exist, or no permissions.
D:\vdbench50406>more raw-test.txt sd=sd1,lun=\\.\G: wd=wd1,sd=sd1,seekpct=0,rdpct=0,xfersize=1M rd=rd1,wd=wd1,iorate=max,maxdata=100M,elapsed=64800,warmup=30,interval=5D:\vdbench50406>vdbench.bat -f raw-test.txt Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Vdbench distribution: vdbench50406 Wed July 20 15:49:52 MDT 2016 For documentation, see 'vdbench.pdf'.17:35:24.328 input argument scanned: '-fraw-test.txt' 17:35:24.375 Starting slave: D:\vdbench50406\vdbench SlaveJvm -m localhost -n localhost-10-220119-17.35.24.293 -l localhost-0 -p 5570 17:35:24.834 All slaves are now connected 17:35:25.263 Raw device 'sd=sd1,lun=\\.\G:' does not exist, or no permissions. 17:35:25.764 17:35:25.764 Please check above failures 17:35:25.765 java.lang.RuntimeException: Please check above failuresat Vdb.common.failure(common.java:335)at Vdb.InfoFromHost.matchDataWithSds(InfoFromHost.java:674)at Vdb.InfoFromHost.receiveInfoFromHost(InfoFromHost.java:485)at Vdb.SlaveOnMaster.processSlave(SlaveOnMaster.java:151)at Vdb.SlaveOnMaster.run(SlaveOnMaster.java:42)二、處理措施:
????????1、檢查裸盤路徑是否正確,如測(cè)試G盤裸盤性能,則測(cè)試參數(shù)指定為lun=\\.\G:
????????2、檢查是否有執(zhí)行權(quán)限,cmd窗口需要以管理員身份運(yùn)行
6.4 Minimum required Java version for Vdbench is 1.7.0
一、問題描述
??????????Linux下運(yùn)行vdbench失敗,提示Minimum required Java version for Vdbench is 1.7.0; Vdbench terminated.
root@node65:/home/vdbench50406# ./vdbench -tCopyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Vdbench distribution: vdbench50406 Wed July 20 15:49:52 MDT 2016 For documentation, see 'vdbench.pdf'.* * * * Minimum required Java version for Vdbench is 1.7.0;? * You are currently running 11.0.9.1 * Vdbench terminated. * * * CTRL-C requested. vdbench terminating二、處理措施:
????????查看官方相關(guān)說明,vdbench50407以前的版本,存在java檢測(cè)功能(vdbench50407版本已移除),在不變更現(xiàn)有環(huán)境java版本的情況下,可升級(jí)版本至vdbench50407版本解決。
? ?// Removed as per 50407 because of java 1.10.x//checkJavaVersion();//....private static void checkJavaVersion(){if (common.get_debug(common.USE_ANY_JAVA))return;if (!JVMCheck.isJREValid(System.getProperty("java.version"), 1, 7, 0)){System.out.print("*\n*\n*\n");System.out.println("* Minimum required Java version for Vdbench is 1.7.0; \n" +"* You are currently running " + System.getProperty("java.version") +"\n* Vdbench terminated.");System.out.println("*\n*\n*\n");System.exit(-99);}}????????版本發(fā)布說明:# Vdbench 50407 is now available
50407rc29
* ? The check to make sure you are running java 1.7 or higher has been removed.
7 參考資料
[01] https://blog.csdn.net/Micha_Lu/article/details/109227774
?
總結(jié)
以上是生活随笔為你收集整理的vdbench - 性能压力测试工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DirectX修复工具V4.1公测!
- 下一篇: ICEM(2)—机翼翼稍网格绘制