硬碟測試工具fio用法總結

linyukk發表於2021-02-15
一  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毫秒下
 
 
 
 
參考連結
 
 
 
 
 

相關文章