vdbench測試
HD:主機定義
· 如果您希望展示當前主機,則設置 hd= localhost。如果希望指定一個遠程主機,hd= label。
· system= IP 地址或網絡名稱。
· clients= 用於模擬服務器的正在運行的客戶端數量。
SD:存儲定義
· sd= 標識存儲的名稱。
· host= 存儲所在的主機的 ID。
· lun= 原始磁盤、磁帶或文件系統的名稱。vdbench 也可為您創建一個磁盤。
· threads= 對 SD 的最大並發 I/O 請求數量。默認為 8。
· hitarea= 調整讀取命中百分比的大小。默認為 1m。
· openflags= 用於打開一個 lun 或一個文件的 flag_list。
WD:工作負載定義
· wd= 標識工作負載的名稱。
· sd= 要使用的存儲定義的 ID。
· host= 要運行此工作負載的主機的 ID。默認設置為 localhost。
· rdpct= 讀取請求占請求總數的百分比。
· rhpct= 讀取命中百分比。默認設置為 0。
· whpct= 寫入命中百分比。默認設置為 0。
· xfersize= 要傳輸的數據大小。默認設置為4k。
· seekpct= 隨機尋道的百分比。可為隨機值。
· openflags= 用於打開一個 lun 或一個文件的 flag_list。
· iorate= 此工作負載的固定 I/O 速率。
RD:運行定義
· rd= 標識運行的名稱。
· wd= 用於此運行的工作負載的ID。
· iorate= (#,#,...) 一個或多個 I/O 速率。
· curve:性能曲線(待定義)。
· max:不受控制的工作負載。
· apsed= time:以秒為單位的運行持續時間。默認設置為 30。
· warmup= time:加熱期,最終會被忽略。
· distribution= I/O 請求的分布:指數、統一或確定性。
· pause= 在下一次運行之前休眠的時間,以秒為單位。
· openflags= 用於打開一個 lun 或一個文件的 flag_list。
對於一個文件系統
對於一個文件系統,配置以下參數:
HD:主機定義。與虛擬塊設備相同。
FSD:文件系統定義
· fsd= 標識文件系統定義的名稱
· anchor= 將在其中創建目錄結構的目錄
· width= 要在定位符下創建的目錄數
· depth= 要在定位符下創建的級別數
· files= 要在最低級別創建的文件數
· sizes= (size,size,...) 將創建的文件大小
· distribution= bottom(如果希望僅在最低級別創建文件)和 all(如果希望在所有目錄中創建文件)
· openflags= 用於打開一個文件系統 (Solaris) 的 flag_list
FWD:文件系統工作負載定義
· fwd= 標識文件系統工作負載定義的名稱。
· fsd= 要使用的文件系統定義的ID。
· host= 要用於此工作負載的主機的 ID。
· fileio= random 或 sequential,表示文件 I/O 將執行的方式。
· fileselect= random 或 sequential,標識選擇文件或目錄的方式。
· xfersizes= 數據傳輸(讀取和寫入操作)處理的數據大小。
· operation= mkdir、rmdir、create、delete、open、close、read、write、getattr setattr。選擇要執行的單個文件操作。
· rdpct= (僅)讀取和寫入操作的百分比。
· threads= 此工作負載的並發線程數量。每個線程需要至少 1 個文件。
RD:運行定義
· fwd= 要使用的文件系統工作負載定義的ID。
· fwdrate= 每秒執行的文件系統操作數量。
· format= yes / no / only / restart / clean / directories。在開始運行之前要執行的操作。
· operations= 覆蓋 fwd 操作。選項相同。
運行之后的輸出文件夾文件
每次運行后,vdbench 會創建一個包含以下文件的輸出文件夾:當為測試啟用了數據驗證時,它可包含一些數據塊中的錯誤的相關信息:
- 無效的密鑰讀取
- 無效的 lba 讀取(一個扇區的邏輯字節地址)
- 無效的 SD 或 FSD 名稱讀取
- 數據損壞,即使在使用錯誤的 lba 或密鑰時
- 數據損壞
- 壞扇區
包含 vdbench 生成的一種逐列的 ASCII 格式的信息。一種包含報告柱狀圖的響應時間、文本格式的文件。包含 Java 代碼寫入控制台窗口的每行信息的副本。l 主要用於調試用途顯示已包含用於測試的每項內容的最終結果
l、l、resourcel
- 摘要報告
- stdout/stderr 報告
- 主機 N 的摘要報告
- 最后 “nn” 行文件 /var/adm/messages 和 /var/adm/messages。每個 M 個 JVM/Slave 的目標主機 N 和主機 N 上為 0。
sdl、
每個 N 存儲定義的柱狀圖和存儲定義 “N” 報告。主要報告文件,顯示為在每個報告間隔的每次運行生成的總工作負載,以及除第一個間隔外的所有間隔的加權平均值。
- interval:報告間隔序號
- I/O rate:每秒觀察到的平均 I/O 速率
- MB sec:傳輸的數據的平均 MB 數
- bytes I/O:平均數據傳輸大小
- read pct:平均讀取百分比
- resp time:以讀/寫請求持續時間度量的平均響應時間。所有 vdbench 時間都以毫秒為單位。
- resp max:在此間隔中觀察到的最大響應時間。最后一行包含最大值總數。
- resp stddev:響應時間的標准偏差
- cpu% sys+usr:處理器繁忙 = 100(系統 + 用戶時間)(Solaris、Windows、Linux)
- cpu% sys:處理器利用率:系統時間
swat_mon.txt,swat_mon_total.txt
- vdbench 與 Sun StorageTekTM Workload Analysis Tool (Swat) Trace Facility (STF) 相結合,支持您重放使用 Swat 創建的一個軌跡的 I/O 工作負載。
- Swat 使用 Create Replay File 選項創建和處理的軌跡文件會創建文件 flatfile.bin(flatfile.bin.gz 用於 vdbench403 和更高版本),其中包含 Swat 所識別的每個 I/O 操作的一條記錄。
- 這些文件包含一個格式化的報告,可將該報告導入 Swat Performance Monitor (SPM) 中來創建性能圖表。
基准測試和結果
我們運行了 3 個不同的測試。
測試 1
在第一個測試中,使用一個 parmfile 定義對單個原始磁盤的單次運行測試。
名為 sd1 的存儲指向大小為 4MB 的設備 /dev/rdsk/c0t0d0s0。
定義了工作負載 wd1 來在存儲 sd1 上運行,其中讀取操作占 100%,每個操作涉及到一個 4KB 數據塊。
定義了運行,以 100 個操作/秒的速度使用工作負載 wd1 10 秒。
清單 5. 定義了對單個原始磁盤的一次運行測試的 Parmfile
*SD: StorageDefinition *WD: Workload Definition *RD: Run Definition *sd=sd1,lun=/dev/rdsk/c0t0d0s0,size=4m wd=wd1,sd=sd1,xfersize=4096,readpct=100rd=run1,wd=wd1,iorate=100,elapsed=10,interval=1 *Single raw disk, 100% randomread of 4KB blocks at I/O rate of 100 for 10 seconds
測試 2
在此測試期間,parmfile 定義了對一個文件系統和對遠程主機 129.35.213.249 的一次測試。HD 包含安裝在遠程主機上的 vdbench 的完整路徑,以及用於通信的 shell(ssh 或 own rsh)。
在本例中,vdbench 表示 rsh。User=root 是擁有遠程主機上的進程的用戶。文件系統的定義支持創建一個包含 3 個級別的結構,每個級別包含兩個目錄和兩個文件(借助於選項 distribution=all)。工作負載包含 80% 的讀取操作(20% 的寫入操作)、一個隨機文件選擇操作和隨機文件I/O。操作涉及到 4KB 的數據塊。
該運行以最大速率使用此工作負載 600 秒,每秒抽樣一次並在啟動時格式化文件系統。
清單 6. 定義對一個文件系統和一個遠程主機的一次測試的 Parmfile
hd=resource1,system=129.35.213.249,vdbench=/var/www/html/vdbench,shell=vdbench,user=rootfsd=fsd1,anchor=/fs,width=2,depth=3,files=2,distribution=all,size=4m,openflags=(o_dsync,o_rsync)fwd=fwd1,fsd=fsd1,host=resource1,xfersize=4096,operation=read,rdpct=80,fileselect=random,fileio=random,threads=1 rd=run1,fwd=fwd1,fwdrate=max,format=yes,elapsed=600,interval=3
測試 3
在此測試中,parmfile 定義一個要在其中執行測試的 SmartCloud 主機。存儲是一個臨時創建的 1GB 大的虛擬塊設備,稱為 disk1.raw。
所有設置都以再現最壞的情形(沒有任何命中區域)為導向,以加快響應速度,使用 open-flags 來打開文件或設備以避免使用緩沖區緩存(o_direct)。
工作負載定義強化了同時避免讀取和寫入命中 (rhpct=0whpct=0) 的概念,隨機尋道百分比為 100%。該測試執行 11 次,每次按照一條定義的曲線執行 1500 秒。第一次運行嘗試發現最大的 i/o 速率。其他運行將 I/O 速率增加 10%,一直從 10 增加到 100。每次運行生成一個具有指數分布的工作負載。
清單 7. 定義要在其上執行測試的 SmartCloud 主機的 Parmfile
hd=resource1,system=129.35.209.189,vdbench=/var/www/html/vdbench503,shell=vdbench,user=root sd=sd1,lun=/home/idcuser/disk1.raw,hitarea=0m,offset=32256,openflags=o_directwd=wd1,sd=sd1,host=resource1,xfersize=4096,rdpct=40,rhpct=0,whpct=0,seekpct=100rd=run1,wd=wd1,iorate=curve,curve=(10-100,10),format=yes,elapsed=1500,warmup=18,distribution=exponential,pause=60,interval=6,threads=1
示例Demo:
1.先將以下4個文件准備好:
jdk-6u3-linux-i586-rpm.bin
Parmfile
vdbench502.tar
Vdbench使用指導書.doc
2.在linux下建立一個文件夾,為vdbench。
3.將上面的4個文件copy到剛才建立的文件建vdbench中。
4.安裝jdk - jdk-6u3-linux-i586-rpm.bin
先賦予權限:chmod 755 *
在執行:./jdk-6u3-linux-i586-rpm.bin
執行該命令后,會讓你閱讀協議,一直點擊回車到最后,輸入yes或者y,同意協議。
5.解壓tar包: tar -xvf vdbench502.tar
6.執行命令:./vdbench -t。對vdbench進行測試
最后輸出: Vdbench execution completed successfully. Output directory: /root/vdbench/output。表示執行測試成功。
7.使用命名: vi parmfile 。進入文件,對里面的參數進行修改。
8.保存parmfile文件后。執行命令:./vdbench -f parmfile。就能達到效果了。
vdbench工具的測試命令可以如下書寫:
vdbench -fsd=sd1,lun=/dev/sdb1,size=100g,align=8192,threads=64,openflags=o_dsync,openflag=o_rsync,openflag=o_direct
wd=wd1,sd=sd1,xfersize=8k,seekpct=random,rdpct=100
rd=run1,wd=wd1,iorate=max,warmup=30,elapsed=60,interval=1
-o wm
其中,lun指出待測試設備名稱,threads數為線程數,xfersize為緩存空間,seekpct為測試類型,warmup為預熱時間(在最后統計時會去除),elapsed指命令運行時間
fio測試
fio --name=test1 --filename=/dev/rbd0 --ioengine=libaio --numjobs=1 --iodepth=32 --rw=randwrite --blocksize=16k --size=100G --direct=1 --output=ranr100G.txt
二、FIO用法:
隨機讀:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=200G -numjobs=10 -runtime=1000 -group_reporting -name=mytest
說明:
filename=/dev/sdb1 測試文件名稱,通常選擇需要測試的盤的data目錄。
direct=1 測試過程繞過機器自帶的buffer。使測試結果更真實。
rw=randwrite 測試隨機寫的I/O
rw=randrw 測試隨機寫和讀的I/O
bs=16k 單次io的塊文件大小為16k
bsrange=512-2048 同上,提定數據塊的大小范圍
size=5g 本次的測試文件大小為5g,以每次4k的io進行測試。
numjobs=30 本次的測試線程為30.
runtime=1000 測試時間為1000秒,如果不寫則一直將5g文件分4k每次寫完為止。
ioengine=psync io引擎使用pync方式
rwmixwrite=30 在混合讀寫的模式下,寫占30%
group_reporting 關於顯示結果的,匯總每個進程的信息。
此外
lockmem=1g 只使用1g內存進行測試。
zero_buffers 用0初始化系統buffer。
nrfiles=8 每個進程生成文件的數量。
順序讀:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
隨機寫:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
順序寫:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
混合隨機讀寫:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop