fio使用詳解

fio使用詳解

1.常用參數的說明

–debug 調試模式
–version 顯示版本信息
測試任務相關的參數
–output= 文件名 輸出到文件
–runtime= 限制運行時間 單位爲秒
– name= 字符串 測試項目名稱
–description= 字符串 測試項目描述
–filename= 測試文件,也可以制定到裸設備上
–size= 測試文件大小
–filesize= 單獨的文件大小,也可以是一個範圍,fio在設定的size只內隨機的選擇大小,如果沒有指定,每個子文件大小相同。
讀寫相關的參數
–readwrite=
read 順序讀
write 順序寫
trim 順序trim,只支持Linux塊設備
randread 隨機讀
randwrite 隨機寫
randtrim 隨機trim 只支持Linux塊設備
rw,readnwrite 混合讀寫
randrw 隨機混合讀寫
如果是混合讀寫,默認是 50/50 即50%讀加50%的寫,對於特定的類型,結果會有些出入,因爲速度可能不一樣。可以在測試的指定一個數字,
rwmixwrite=20 混合讀寫,寫佔20%
direct=1 或者0 ,1爲繞過文件系統的緩存
–blocksize=
–bs= 測試塊大小,4K 8K 1M 等
–bssplit=字符串 需要測試混合塊大小的時候使用,可以按照如下的格式
bssplit=4k/10:64k/50:32k/40 4K佔10% 64K佔50% 32k佔40%
也可以不指定百分比,fio會平均分配,比如
bssplit=4k/50:1k/:32k/ 就是4k佔50% 1K 32看各佔25%
bssplit 讀寫的時候都可以使用
運行相關參數
–max-job= 運行的最高線程
–zero_buffers 如果使用這個參數,fio會初始化IO緩存,並默認使用隨機的數據填滿緩存。
–refill_buffers 強制重新填寫讀寫緩存
–iodepth= io隊列深度 默認是1
–direct= 0或者1 1爲關閉文件系統緩存
–numjobs= 線程數量
–group_reporting 彙總每個進程的信息
–lockmem= 固件測試的時候內存大小 比如2G
–nrfiles=8 每個進程生成文件的數量

下面幾個參數在libaio的引擎下的作用:
–iodepth_batch=當隊列裏面的IO個數達到該值的時候,就調用io_submit批次提交請求
–iodepth_batch_complete=一次最多可收割的io數
–iodepth_low=隊列的io數降到該值,就重新填充

2.fio使用案例

文件系統4k順序讀測試
fio –filename=/tmp/test –direct=1 –rw=read –bs=4k –size=15G –numjobs=64 –runtime=300 –group_reporting –name=test-read
文件系統4k隨機寫測試
fio –filename=/tmp/test –direct=1 –rw=randwrite –bs=4k –size=15G –numjobs=64 –runtime=300 –group_reporting –name=test-read
裸設備4k順序寫測試
fio –filename=/dev/sdb –direct=1 –rw=write –bs=4k –size=15G –numjobs=64 –runtime=300 –group_reporting –name=test-read

3.測試結果解讀

fio –filename=/test –direct=1 –rw=randwrite –bs=4k –size=1G –numjobs=64 –runtime=300 –group_reporting –name=test-randwrite

write: io=2850.2MB, bw=9726.1KB/s, iops=2431 , runt=300048msec
clat (usec): min=159 , max=448315 , avg=410.20, stdev=1208.19
lat (usec): min=159 , max=448315 , avg=411.15, stdev=1208.27
clat percentiles (usec):
| 1.00th=[ 203], 5.00th=[ 278], 10.00th=[ 326], 20.00th=[ 346],
| 30.00th=[ 366], 40.00th=[ 386], 50.00th=[ 402], 60.00th=[ 418],
| 70.00th=[ 434], 80.00th=[ 454], 90.00th=[ 486], 95.00th=[ 516],
| 99.00th=[ 724], 99.50th=[ 1032], 99.90th=[ 1368], 99.95th=[ 2224],
| 99.99th=[ 8256]
bw (KB/s) : min= 3, max= 667, per=1.57%, avg=152.30, stdev=27.63
lat (usec) : 250=3.92%, 500=89.07%, 750=6.14%, 1000=0.32%
lat (msec) : 2=0.49%, 4=0.03%, 10=0.02%, 20=0.01%, 50=0.01%
lat (msec) : 500=0.01%
cpu : usr=0.04%, sys=0.23%, ctx=1548182, majf=0, minf=1844
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued : total=r=0/w=729637/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
WRITE: io=2850.2MB, aggrb=9726KB/s, minb=9726KB/s, maxb=9726KB/s, mint=300048msec, maxt=300048msec

Disk stats (read/write):
dm-0: ios=0/766673, merge=0/0, ticks=0/341324, in_queue=341316, util=86.15%, aggrios=0/731075, aggrmerge=0/35722, aggrticks=0/268135, aggrin_queue=267337, aggrutil=85.33%
vda: ios=0/731075, merge=0/35722, ticks=0/268135, in_queue=267337, util=85.33%

I/O延遲包括三種:slat,clat,lat
關係是 lat = slat + clat。
slat 表示fio submit某個I/O的延遲。
clat 表示fio complete某個I/O的延遲。
lat 表示從fio將請求提交給內核,再到內核完成這個I/O爲止所需要的時間。

4.通過腳本執行fio測試

fio 也可以將測試用例寫好腳本,通過運行腳本,完成多項測試任務
; – start –
[global]
[random-writers]
rw=randwrite
bs=4K
direct=1
size=30G
numjobs=63
[random-read]
rw=randread
bs=4K
direct=1
size=30G
numjobs=63

; – end –

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章