一 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毫秒下
參考連結