一 fio介紹
linux下的一種經常使用的磁盤測試工具,支持裸盤和文件形式進行測試
二 硬盤測試經常使用名詞
延遲:io的發起到返回寫入成功的時間成爲延遲,fio中延遲分爲lat,slat,clat。
slat:提交延遲,表示硬盤將io提交到kernel須要的時間
clat:完成延遲,表示從kernel到io完成須要的時間。
lat:自slat開始至clat結束經歷的時間。
吞吐:帶寬的上限
帶寬:單位時間內從一端到另外一端的數據量,成爲帶寬。
三 常見參數
direct=1 //不使用文件系統緩存
iodepth //io深度,線程向ssd發送多少個io請求,iodepth與接口有關,與介質無關,通常sata < 32; sas < 128; nvme <4096
rw //值能夠是write,read,randread,randwrite,randrw,當設置爲rw時需指定rwmixread
ioengine //寫入引擎,linux一般使用libaio
bs //最小寫入塊
numjobs //開啓多個線程同時寫入
runtime //限制任務運行的時間,若測試任務先於改時間結束,且未指定tmie_based ,則任務會直接退出
tmie_based //和runtime連用,若runtime未用完,會一直跑下去
loops //循環,一般不和runtime連用
ramp_time //在執行測試前忽略的時間
ioscheduler //io調度算法
iodepth_batch //默認是iodepth的值
iodepth_batch_complete //io請求過來後,能retrieve得到的最多請求數;
ipdepth_low //io請求達到這個水平線後,開始嘗試去補充和獲取請求,默認是iodepth的值;
max_latency //最大延遲,當延遲超過該值,fio會自動退出
latency_target=int //目標延遲,最大可接受的延遲,單位微秒
latency_window=int //延遲窗口,工做在不一樣隊列深度下測試性能的窗口,單位微妙
latency_percentile=float //延遲時間百分比,默認爲100.0,意味着全部IO延遲必須等於或低於目標設置的值。
四 經常使用參數理解
4.1 iodepth
iodepth即隊列深度,機械硬盤不支持異步寫入,該值對機械硬盤無心義。固態硬盤是支持異步處理的,同時能夠處理多個io請求,iodepth能夠控制io隊列的深度,增大該值能夠提升讀寫性能,但隨着iodepth的增大,延遲一樣也會增大。
4.2 延遲
固態硬盤產品手冊能達到的最大讀寫和iops是理想單盤狀況下能達到的最大值,可是實際生產使用中,由於raid,陣列卡緩存,寫入延遲的影響,一般使用過程當中的寫入性能是低於產品手冊的,咱們能夠經過fio設置latency_target,latency_window,latency_percentile等值,在實際的應用場景下模擬生產業務要求進行寫入測試
五 fio測試結果分析
usec/msec //時間單位,微秒,毫秒
stdev //標準差
clat percentiles //寫入延遲分佈狀況
ctx //進程上下文切換次數
majf/minf //主要和次要頁面錯誤數量
submits/complete //表明同一時間段內fio發送上去和已完成的io數量,此處小於4(多是1)可能和收割參數有關
issued //發送的io總量
aggrb //group總帶寬
minb //最小平均帶寬.
mint //group中線程的最短運行時間.
ios //全部group總共執行的IO數.
merge //總共發生的IO合併數.
in_queue //花費在隊列上的總共時間.
util //磁盤利用率
六 測試示列
fio -filename=/dev/sdb -direct=1 -iodepth=128 -thread -rw=randwrite -ioengine=libaio -bs=4k -size=100G -numjobs=8 -runtime=6m -ramp_time=60 -group_reporting -name=mytest -iodepth_batch_complete=16
fio -filename=/data/tempfile.dat -direct=1 -iodepth=128 -thread -rw=randwrite -ioengine=libaio -bs=4k -size=100G -numjobs=8 -runtime=6m -ramp_time=60 -group_reporting -name=mytest -iodepth_batch_complete=16 -latency_target=4000 -latency_window=50000000 -latency_percentile=99 //限定99%的io請求延遲在4毫秒下
參考連接