磁盤性能測試工具之fio


fio是測試磁盤性能的一個非常好的工具,用來對硬件進行壓力測試和驗證。

注意事項

  • CentOS 6.5等較老版本的操作系統用fdisk創建分區時,默認為非4KB對齊選擇初始磁柱編號,對性能有較大的影響,建議針對該類操作系統,在創建分區時4KB對齊選取初始磁柱編號。
  • 請不要在系統盤上進行fio測試,避免損壞系統重要文件。
  • 測試硬盤性能時,建議直接測試裸數據盤(如 /dev/vdb)。
  • 測試文件系統性能時,推薦指定具體文件測試(如 /data/file)。
  • fio測試建議在空閑的、未保存重要數據的磁盤上進行,並在測試完成后重新創建文件系統。

參數

參數名 說明 取值樣例
name 定義測試任務名稱 N/A
filename 測試對象,即待測試的磁盤設備名稱。 N/A
bs 每次請求的塊大小。取值包括4k、8k及16k等。 4k
bsrange bsrange=512-2048 數據塊的大小范圍 N/A
size I/O 測試的尋址空間。也可是百分數,比如size=20%,表示讀/寫的數據量占該設備總文件的20%的空間 100GB
ioengine I/O 引擎。推薦使用 Linux 的異步 I/O 引擎。 libaio
iodepth 請求的 I/O 隊列深度。此處定義的隊列深度是指每個線程的隊列深度,如果有多個線程測試,意味着每個線程都是此處定義的隊列深度。fio總的I/O並發數=iodepth * numjobs。 1
numjobs 定義測試的並發線程數。 1
direct 定義是否使用direct I/O,可選值如下:值為0,表示使用buffered I/O值為1,表示使用direct I/O 1
rw 讀寫模式。取值包括順序讀(read)、順序寫(write)、隨機讀(randread)、隨機寫(randwrite)、混合隨機讀寫(randrw)和混合順序讀寫(rw,readwrite)。 read
rwmixwrite rwmixwrite=30 在混合讀寫的模式下,寫占30%
time_based 指定采用時間模式。無需設置該參數值,只要 FIO 基於時間來運行。 N/A
runtime 指定測試時長,即 FIO 運行時長。 600
refill_buffers FIO 將在每次提交時重新填充 I/O 緩沖區。默認設置是僅在初始時填充並重用該數據。 N/A
norandommap 在進行隨機 I/O 時,FIO 將覆蓋文件的每個塊。若給出此參數,則將選擇新的偏移量而不查看 I/O 歷史記錄。 N/A
randrepeat 隨機序列是否可重復,True(1)表示隨機序列可重復,False(0)表示隨機序列不可重復。默認為 True(1)。 0
group_reporting 多個 job 並發時,打印整個 group 的統計值。 N/A

常用測試場景

測試延遲

​ 隊列深度為1,bs設置為4k,也就是模擬單個隊列讀寫的延遲測試

吞吐

​ 隊列深度為32,bs設置為128k,測試最大能力去跑滿整個磁盤帶寬

iops

​ 隊列深度為32,bs設置為4k,要在最短的時間內多去讀磁盤

小文件通常測試隨機讀寫,大文件通常測試順序讀寫。

測試順序讀IOPS

fio -name=Seq_Read_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=read -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=10G -numjobs=1 -runtime=600 -filename=/dev/[device] 

測試順序寫IOPS

fio -name=Seq_Write_IOPS_Test -group_reporting  -direct=1 -iodepth=128 -rw=write -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=10G -numjobs=1 -runtime=600 -filename=/dev/[device] 

測試隨機寫IOPS

fio -name=Rand_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=10G -numjobs=1 -runtime=600 -filename=/dev/[device] 

測試隨機讀IOPS

fio -name=Rand_Read_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=10G -numjobs=1 -runtime=600 -filename=/dev/[device] 

測試混合讀寫

fio -name=Read_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randrw -rwmixread=70 -refill_buffers -norandommap -randrepeat=0 -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -ioscheduler=noop

測試寫吞吐量

fio -name=Write_BandWidth_Test -group_reporting -direct=1 -iodepth=32 -rw=write -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=1024k -size=10G -numjobs=1 -runtime=600 -filename=/dev/[device] 

測試讀吞吐量

fio -name=Read_BandWidth_Test -group_reporting -direct=1 -iodepth=32 -rw=read -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=1024k -size=10G -numjobs=1 -runtime=600 -filename=/dev/[device] 

測試結果輸出指標

  • IOPS:每秒讀/寫次數,單位為次(計數)。存儲設備的底層驅動類型決定了不同的 IOPS。 --> iops
  • 吞吐量:每秒的讀寫數據量,單位為MB/s。 --> bw
  • 時延:I/O 操作的發送時間到接收確認所經過的時間,單位為秒。 --> lat (msec)
  • runt:總運行時間

22-20-02-m86vuW

refer

華為雲硬盤的性能

雲硬盤性能測試工具

騰訊如何衡量雲硬盤的性能

fio 含job用法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM