【存储测试】vdbench存储性能测试工具
一、前言
1、介紹
?vdbench是一個I/O工作負載生成器,通常用于驗證數據完整性和度量直接附加(或網絡連接)存儲性能。它可以運行在windows、linux環境,可用于測試文件系統或塊設備基準性能。
2、版本包獲取
-  vdbench版本包 
 下載鏈接
-  jdk版本包 
 下載鏈接(windows)
 下載鏈接(linux)
二、安裝部署
1、Linux客戶端
- 部署jdk環境
?解壓縮jdk安裝包至/opt目錄
tar -zxvf jdk-8u251-linux-x64.tar.gz -C /opt/?配置jdk環境變量
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- 配置免秘鑰
非必選項,如需要聯機測試,則需要配置此項
?示例使用三個客戶端聯機測試,使用客戶端node241作為主節點
| 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?主節點生成公鑰文件,并拷貝到其他從節點(配置主節點到從節點免秘鑰登錄)
ssh-keygen ssh-copy-id node242 ssh-copy-id node243- vdbench使用
?解壓縮vdbench安裝包至/root/vdbench50406目錄內,切換到vdbench解壓縮目錄執行對應參數文件即可
unzip vdbench50406.zip -d /root/vdbench504062、Windows客戶端
-  部署jdk環境 
 直接安裝jdk軟件即可(環境變量在安裝完成后會自動添加)
-  vdbench使用 
 解壓縮vdbench軟件包,切換到vdbench解壓縮目錄執行對應參數文件即可
3、注意事項
參數文件添加messagescan=no可以過濾掉多余的系統日志
三、常用操作
1、常用操作命令
?檢查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所有測試參數都定義到一個參數文件內,在運行時按照順序被讀取執行相應操作,在參數文件定義時需要執行順序進行定義
1、文件系統
?文件系統參數文件定義順序為:HD、FSD、FWD、RD
1.1、HD(Host Define)
非必選項,單機運行時不需要配置HD參數,一般只有在多主機聯機測試時才需要配置
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node241 hd=hd2,system=node242 hd=hd3,system=node243- hd= 標識主機定義的名稱,多主機運行時,可以使用hd1、hd2、hd3…區分
- system= 主機IP地址或主機名
- vdbench= vdbench執行文件存放路徑,當多主機存放路徑不同時,可在hd定義時單獨指定
- user= slave和master通信使用用戶
- shell= 可選值為rsh、ssh或vdbench,默認值為rsh,多主機聯機測試時,mater和slave主機間通信方式
 當參數值為rsh時,需要配置master和slave主機rsh互信,考慮到rsh使用明文傳輸,安全級別不夠,通常情況下不建議使用這種通信方式
 當參數值為ssh時,需要配置master和slave主機ssh互信,通常Linux主機聯機時使用此通信方式
 當參數值為vdbench,需要在所有slave主機運行vdbench rsh啟用vdbench本身的rsh守護進程,通常Window主機聯機時使用此通信方式
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= 標識文件系統定義的名稱,多文件系統時(fsd1、fsd2、fsd3…),可以指定default(將相同的參數作為所有fsd的默認值)
- openflags= 通過設置為o_direct或directio,以無緩沖緩存的方式進行讀寫操作
- anchor= 文件寫入目錄,linux指定路徑為/dir01;windows指定路徑為E:\dir01;
- depth= 創建目錄層級數(即目錄深度)
- width= 每層文件夾的子文件夾數
- files= 測試文件個數(vdbench測試過程中會生成多層級目錄結構,實際只有最后一層目錄會生成測試文件)
- size= 每個測試文件大小
- **distribution= ** 可選值為bottom或all,默認為bottom
 –當參數值為bottom時,程序只在最后一層目錄寫入測試文件
 –當參數值為all時,程序在每一層目錄都寫入測試文件
- shared= 可選值為yes或no,默認值為no,一般只有在多主機聯機測試時指定
 vdbench不允許不同的slave之間共享同一個目錄結構下的所有文件,因為這樣會帶來很大的開銷,但是它們允許共享同一個目錄結構。加入設置了shared=yes,那么不同的slave可以平分一個目錄下所有的文件來進行訪問,相當于每個slave有各自等分的訪問區域,因此不能測試多個客戶的對同一個文件的讀寫
 –當多主機聯機測試時,寫入的根目錄anchor為同一個路徑時,需要指定參數值為yes
?計算公式如下:
 ?最后一層生成文件夾個數=width^depth
 ?測試文件個數=(width^depth)*files
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= 標識文件系統工作負載定義的名稱,多文件系統工作負載定義時,可以使用fwd1、fwd2、fwd3…區分
- fsd= 標識此工作負載使用文件存儲定義的名稱
- host= 標識此工作負載使用主機
- operation= 可選值為read或write,文件操作方式
- rdpct= 可選值為0~100,讀操作占比百分比,一般混合讀寫時需要指定,當值為60時,則混合讀寫比為6:4
- fileio= 可選值為random或sequential,標識文件 I/O 將執行的方式
- fileselect= random或sequential,標識選擇文件或目錄的方式
- xfersizes= 數據傳輸(讀取和寫入操作)處理的數據大小(即單次IO大小)
- threads= 此工作負載的并發線程數量
注:
 1、默認情況下,預填數據工作負載定義為threads=8,xfersize=128k,即預填數據使用8線程,IO大小為128K
 如需更改默認預填數據工作負載定義,則需要增加參數指定線程數和IO大小(fwd=format,threads=nn,xfersize=nn)
1.4、RD(Run Define)
rd=rd1,fwd=(fwd1-fwd3),fwdrate=max,format=restart,elapsed=604800,interval=10- rd= 標識文件系統運行定義的名稱。
- fwd= 標識文件系統工作負載定義的名稱。
- fwdrate= 每秒執行的文件系統操作數量。設置為max,表示不做任何限制,按照最大強度自適應
- format= 可選值為no、yes、或restart,標識預處理目錄和文件結構的方式
- no:默認參數值,不執行format預處理操作,如測試目錄不存在文件時,vdbench會由于無可用文件讀寫而異常退出
- yes:表示刪除測試目錄已有文件結構,并且重新創建新的文件結構
- restart:表示只創建未生成的目錄或文件,并且增大未達到實際大小的文件
- elapsed= 默認值為30,測試運行持續時間(單位為秒)
- interval= 結果輸出打印時間間隔(單位為秒)
2、塊設備
?塊設備參數文件定義順序為:HD、SD、WD、RD
1.1、HD(Host Define)
非必選項,單機運行時不需要配置HD參數,一般只有在多主機聯機測試時才需要配置
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node241 hd=hd2,system=node242 hd=hd3,system=node243- hd= 標識主機定義的名稱,多主機運行時,可以使用hd1、hd2、hd3…區分
- system= 主機IP地址或主機名
- vdbench= vdbench執行文件存放路徑,當多主機存放路徑不同時,可在hd定義時單獨指定
- user= slave和master通信使用用戶
- shell= 可選值為rsh、ssh或vdbench,默認值為rsh,多主機聯機測試時,mater和slave主機間通信方式
 當參數值為rsh時,需要配置master和slave主機rsh互信,考慮到rsh使用明文傳輸,安全級別不夠,通常情況下不建議使用這種通信方式
 當參數值為ssh時,需要配置master和slave主機ssh互信,通常Linux主機聯機時使用此通信方式
 當參數值為vdbench,需要在所有slave主機運行vdbench rsh啟用vdbench本身的rsh守護進程,通常Window主機聯機時使用此通信方式
1.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= 標識存儲定義的名稱
- hd= 標識主機定義的名稱
- lun= 寫入塊設備,linux使用sdb盤,則指定路徑為/dev/sdb;windows使用G盤,則指定路徑為\\.\G:;
- openflags= 通過設置為o_direct或directio,以無緩沖緩存的方式進行讀寫操作
- threads= 對SD的最大并發I/O請求數量
1.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= 標識工作負載定義的名稱
- sd= 標識存儲定義的名稱
- seekpct= 可選值為0或100(也可使用sequential或random表示),默認值為100,隨機尋道的百分比,設置為0時表示順序,設置為100時表示隨機。
- rdpct= 讀取請求占請求總數的百分比,設置為0時表示寫,設置為100時表示讀
- xfersize= 要傳輸的數據大小。默認設置為4k
- skew= 非必選項,一般在多個工作負載時需要指定,表示該工作負載占總工作量百分比(skew總和為100)
1.4、RD(Run Define)
rd=rd1,wd=wd*,iorate=max,maxdata=400GB,warmup=30,elapse=604800,interval=5- rd= 標識運行定義的名稱
- wd= 標識工作負載定義的名稱
- iorate= 常用可選值為100、max,此工作負載的固定I/O速率
 –當參數值為100時,以每秒100個I/Os的速度運行工作負載,當參數值設置為一個低于最大速率的值時,可以達到限制讀寫速度的效果
 –當參數值為max時,以最大的I/O速率運行工作負載,一般測試讀寫最大性能時,該參數值均為max
- warmup= 預熱時間(單位為秒),默認情況下vdbench會將第一個時間間隔輸出數據排除在外,程序在預熱時間內的測試不納入最終測試結果中(即預熱結束后,才開始正式測試)
 –當interval為5、elapsed為600時,測試性能為2~elapsed/interval(avg_2-120)時間間隔內的平均性能
 –當interval為5、warmup為60、elapsed為600時,測試性能為1+(warmup/interval)~(warmup+elapsed)/interval(avg_13-132)時間間隔內的平均性能
- maxdata= 讀寫數據大小,通常情況下,當運行elapsed時間后測試結束;當同時指定elapsed和maxdata參數值時,以最快運行完的參數為準(即maxdata測試時間小于elapsed時,程序寫完elapsed數據量后結束)
 –當參數值為100以下時,表示讀寫數據量為總存儲定義大小的倍數(如maxdata=2,2個存儲定義(每個存儲定義數據量為100G),則實際讀寫數據大小為400G)
 –當參數值為100以上時,表示數據量為實際讀寫數據量(可以使用單位M、G、T等)
- elapsed= 默認值為30,測試運行持續時間(單位為秒)
- interval= 報告時間間隔(單位為秒)
五、運行使用
1、單機運行
- Linux
 ?示例如下,單節點針對裸盤測試,1M順序寫,測試時間600s,預熱時間60s,報告時間間隔2s
- Window
 ?示例如下,單節點針對文件系統測試,1M順序寫,目錄深度為2,每層目錄數為3,每個目錄文件數為10,每個文件大小為200M,測試時間為600s,報告時間時間2s
2、聯機運行
- Linux
 1、按照二、安裝部署,配置多主機ssh互信
 2、master主機運行測試參數文件即可
 示例如下,三節點針對裸盤聯機測試,1M順序寫,測試數據量為400G,預熱時間30s,報告間隔5s
- Window
 1、所有slave主機運行vdbench本身rsh守護進程
2、master主機運行測試參數文件即可
 示例如下,三節點針對文件系統聯機測試,1M順序寫,目錄深度為2,每層目錄數為3,每個目錄文件數為10000,每個文件大小為200M,測試時間為600s,報告間隔1s
六、結果分析
當vdbench運行完負載測試后,會在安裝目錄下生成output文件夾,里邊包含測試結果文件
1、輸出文件
- errorlog.html
 當運行測試啟用數據校驗時,它可能會包含一些錯誤信息,如:- 無效的密鑰讀取
- 無效的 lba 讀取(一個扇區的邏輯字節地址)
- 無效的 SD 或 FSD 名稱讀取
- 數據損壞
- 壞扇區
 
- flatfile.html
 vdbench 生成的一種逐列的 ASCII 格式的信息,可以使用parseflat參數解析結果
- histogram.html
 一種包含報告柱狀圖的響應時間、文本格式的文件
- logfile.html
 包含 Java 代碼寫入控制臺窗口的每行信息的副本。logfile.html 主要用于調試用途
- parmfile.html
 包含測試運行配置參數信息
- summary.html
 記錄全部數據信息,顯示每個報告間隔內總體性能情況及工作負載情況,以及除第一個間隔外的所有間隔的加權平均值
- totals.html
 記錄全部數據計算之后的平均值,一般測試結果從該文件取值,除第一個間隔外所有間隔的加權平均值
2、結果分析
2.1、文件系統
測試參數如下: 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.98418:48:42.000 Starting RD=rd1; elapsed=600; fwdrate=max. For loops: None18: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 - rate
 每秒讀寫I/O個數(讀寫IOPS),可以通過rd運行定義參數fwdrate控制
 當fwdrate為max時,以最大I/O速率運行工作負載
 當fwdrate為低于最大I/0速率的一個數值時,可以限制讀寫速度,以固定I/O速率運行工作負載
- resp
 讀寫請求響應時間(讀寫時延),單位為ms
 
- rate
-  cpu% - tatol
 總的cpu占用率
- sys
 系統cpu占用率
 
- tatol
-  read pct 
 讀取請求占總請求數百分比占比,當為0時表示寫,當為100時表示讀
-  read - rate
 每秒讀I/O個數(讀IOPS)
- resp
 讀請求響應時間(讀時延),單位為ms
 
- rate
-  write - rate
 每秒寫I/O個數(寫IOPS)
- resp
 寫請求響應時間(寫時延),單位為ms
 
- rate
-  mb/sec - read
 每秒讀取速度
- write
 每秒寫入速度
- total
 每秒讀寫速度總和
 
- read
-  xfersize 
 每個讀寫I/O傳輸數據量(即單個讀寫I/O大小),單位為字節B
2.2、塊設備
測試參數如下: 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
七、測試說明
1、測試總結
2、常見測試參數
- 4M順序寫
 目錄深度2、單級目錄數100、單個目錄文件數100、單文件大小4M、IO塊大小1M、順序寫
- 4M順序讀
 目錄深度2、單級目錄數100、單個目錄文件數100、單文件大小4M、IO塊大小1M、順序讀
- 8M混合讀寫
 目錄深度2、單級目錄數100、單個目錄文件數100、單文件大小8M、IO塊大小1M、混合讀寫(讀寫比為6:4)
七、Q&A
1、open failed for xxx
- 問題描述:
使用vdbench測試過程中,測試中斷,報錯信息如下:
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- 原因分析:
默認vdbench限制了java內存使用量,測試期間java運行內存不足才導致測試異常中斷。
- 處理措施:
增大vdbench運行腳本的java內存參數
[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最大內存分配池,Xms表示初始內存分配池
 進程初始以Xms內存大小啟動,當空余堆內存小于40%時,jvm會增大內存至Xmx;當空余堆內存大于70%時,jvm會減少內存至Xms;為避免每次GC后JVM重新分配內存,可以將Xmx和Xms設置為相同的參數值
2、linux/aarch64.so does not exist
- 問題描述:
arm服務器運行vdbench,出現共享庫不匹配問題linux/aarch64.so does not exist,提示需要手動編譯
[root@node163 vdbench50407]# ./vdbench -t14:07:47.486 Created output directory '/root/vdbench50407/output' 14:07:47.737 input argument scanned: '-f/tmp/parmfile' 14:07:47.866 Starting slave: /root/vdbench50407/vdbench SlaveJvm -m localhost -n localhost-10-220209-14.07.47.444 -l localhost-0 -p 5570 14:07:47.890 14:07:47.890 File /root/vdbench50407/linux/aarch64.so does not exist. 14:07:47.891 This may be an OS that a shared library currently 14:07:47.891 is not available for. You may have to do your own compile. 14:07:47.891 t: java.lang.UnsatisfiedLinkError: Can't load library: /root/vdbench50407/linux/aarch64.so 14:07:47.892 14:07:47.892 Loading of shared library /root/vdbench50407/linux/aarch64.so failed. 14:07:47.892 There may be issues related to a cpu type not being 14:07:47.892 acceptable to Vdbench, e.g. MAC PPC vs. X86 14:07:47.893 Contact me at the Oracle Vdbench Forum for support. 14:07:47.893 14:07:48.395 14:07:48.396 Failure loading shared library 14:07:48.396 java.lang.RuntimeException: Failure loading shared libraryat Vdb.common.failure(common.java:350)at Vdb.common.get_shared_lib(common.java:1103)at Vdb.Native.<clinit>(Native.java:31)at Vdb.common.signal_caller(common.java:737)at Vdb.ConnectSlaves.connectToSlaves(ConnectSlaves.java:98)at Vdb.Vdbmain.masterRun(Vdbmain.java:814)at Vdb.Vdbmain.main(Vdbmain.java:628)- 原因分析:
vdbench根目錄動態庫文件linux/linux64.so為基于x86編譯的,需要基于aarch64重新編譯linux/linux64.so動態庫文件
[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- 處理措施:
- 下載vdbench50407源碼包,下載地址:vdbench50407.src.zip
 解壓縮源碼包,創建linux目錄
- 進入Jni目錄下,修改make.linux文件,主要修改如下:
 – 指定vdbench源碼路徑(vdb=xx)
 – 指定jdk路徑(java=xx),通常在/usr/lib/jvm/路徑下
 – 刪除全文-m32和-m64字符
- 執行源碼編譯操作./make.linux
 執行成功后會在../linux目錄下生成linux32.so和linux64.so文件,將linux64.so文件拷貝到vdbench測試工具根目錄linux/aarch64.so下,重新運行vdbench測試
3、Raw device ‘sd=sd1,lun=\.\G:’ does not exist, or no permissions.
- 問題描述:
windows系統下使用vdbench測試裸盤性能,腳本運行失敗,提示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、檢查裸盤路徑是否正確,如測試G盤裸盤性能,則測試參數指定為lun=\\.\G:
 2、檢查是否有執行權限,cmd窗口需要以管理員身份運行
4、Minimum required Java version for Vdbench is 1.7.0
- 問題描述:
Linux下運行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- 處理措施:
查看官方相關說明,vdbench50407以前的版本,存在java檢測功能(vdbench50407版本已移除),在不變更現有環境java版本的情況下,可升級版本至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);}}版本發布說明:# Vdbench 50407 is now available
50407rc29 * The check to make sure you are running java 1.7 or higher has been removed.總結
以上是生活随笔為你收集整理的【存储测试】vdbench存储性能测试工具的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 如何卸载服务(Service)?
- 下一篇: 基于EEGLAB的脑电数据预处理
