fio 命令入門到跑路(千萬不能在系統所在的分割槽測試硬碟效能)
fio是一種I / O工具,用於基準測試和壓力/硬體驗證。它支援19種不同型別的I / O引擎(sync,mmap,libaio,posixaio,SG v3,splice,null,network,syslet,guasi,solarisaio等),I / O優先順序(適用於較新的Linux核心) ,評估I / O,分叉或執行緒作業等等。它可以在塊裝置和檔案上工作。fio以簡單易懂的文字格式接受職位描述。包含幾個示例作業檔案。fio顯示各種I / O效能資訊,包括完整的IO延遲和百分位數。Fio在許多地方廣泛使用,用於基準測試,QA和驗證目的。它支援Linux,FreeBSD,NetBSD,OpenBSD,OS X,OpenSolaris,AIX,HP-UX,Android和Windows。
fio 官網地址:
安裝:
yum install fio –y
用法
fio分順序讀 -rw=read ,隨機讀 -rw=randread,順序寫 -rw=write,隨機寫-rw=randwrite ,混合隨機讀寫模式 -rw=randrw
引數:
filename: 指定檔案(裝置)的名稱。可以通過冒號分割同時指定多個檔案,如filename=/dev/sda:/dev/sdb。
directory: 設定filename的路徑字首。在後面的基準測試中,採用這種方式來指定裝置。
name: 指定job的名字,在命令列中表示新啟動一個job。
direct: bool型別,如果設定成true (1),表示不使用io buffer。
ioengine: I/O引擎,現在fio支援19種ioengine。預設值是sync同步阻塞I/O,libaio是Linux的native非同步I/O。
iodepth: 如果ioengine採用非同步方式,該引數表示一批提交保持的io單元數。該引數可參考文章“Fio壓測工具和io佇列深度理解和誤區”。
rw: I/O模式,隨機讀寫,順序讀寫等等。
bs: I/O block大小,預設是4k。
size: 指定job處理的檔案的大小。
numjobs: 指定job的克隆數(執行緒)。
time_based: 如果在runtime指定的時間還沒到時檔案就被讀寫完成,將繼續重複知道runtime時間結束。
runtime: 指定在多少秒後停止程序。如果未指定該引數,fio將執行至指定的檔案讀寫完全完成。
group_reporting: 當同時指定了numjobs了時,輸出結果按組顯示。
下面是帶數字的解釋:
direct=1 #測試過程繞過機器自帶的buffer。使測試結果更真實 rw=randwrite #測試隨機寫的I/O rw=randrw #測試隨機寫和讀的I/O bs=16k #單次io的塊檔案大小為16k bsrange=512-2048 #同上,提定資料塊的大小範圍 size=5G #本次的測試檔案大小為5g,以每次4k的io進行測試 numjobs=30 #本次的測試執行緒為30個 runtime=1000 #測試時間1000秒,如果不寫則一直將5g檔案分4k每次寫完為止 ioengine=psync #io引擎使用psync方式 rwmixwrite=30 #在混合讀寫的模式下,寫佔30% group_reporting #關於顯示結果的,彙總每個程序的資訊 lockmem=1G #只使用1g記憶體進行測試 zero_buffers #用0初始化系統buffer nrfiles=8 #每個程序生成檔案的數量
filename引數指定某個要測試的裸裝置(硬碟或分割槽),切勿在系統分割槽做測試,會破壞系統分割槽,而導致系統崩潰。若一定要測試系統分割槽較為安全的方法是:在根目錄下建立一個空目錄,在測試命令中使用directory引數指定該目錄,而不使用filename引數。
例如:要測試根目錄
mkdir /test/
fio -directory=/test/ ……
我建了一個/data
fio -directory=/data/ -name=tempfile.dat -direct=1 -rw=randwrite -bs=4k -size=1M -numjobs=16 -time_based -runtime=100 -group_reporting
看看生成的一堆檔案
#複製下面的配置內容,將directory=/path/to/test修改為你測試硬碟掛載目錄的地址,並另存為fio.conf
[global] ioengine=libaio direct=1 thread=1 norandommap=1 randrepeat=0 runtime=60 ramp_time=6 size=1g directory=/data [read4k-rand] stonewall group_reporting bs=4k rw=randread numjobs=8 iodepth=32 [read64k-seq] stonewall group_reporting bs=64k rw=read numjobs=4 iodepth=8 [write4k-rand] stonewall group_reporting bs=4k rw=randwrite numjobs=2 iodepth=4 [write64k-seq] stonewall group_reporting bs=64k rw=write numjobs=2 iodepth=4
#測試
fio fio.conf
---------------------
怎麼跑路的:
我之前用的dd命令測試的硬碟效能
•使用dd命令來測量伺服器的吞吐率(寫速度) dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync
•使用dd命令測量伺服器延遲 dd if=/dev/zero of=/tmp/test2.img bs=512 count=1000 oflag=dsync
•if=/dev/zero (if=/dev/input.file) :用來設定dd命令讀取的輸入檔名。
•of=/tmp/test1.img (of=/path/to/output.file):dd命令將input.file寫入的輸出檔案的名字。
•bs=1G (bs=block-size) :設定dd命令讀取的塊的大小。例子中為1個G。
•count=1 (count=number-of-blocks):dd命令讀取的塊的個數。
•oflag=dsync (oflag=dsync) :使用同步I/O。不要省略這個選項。這個選項能夠幫助你去除caching的影響,以便呈現給你精準的結果。
•conv=fdatasyn: 這個選項和oflag=dsync含義一樣。
QQ群裡一個小夥說用fio測試才準確,差 你個糟老頭子,我信了你個鬼。
我就執行了下面的命令 ,sda1是系統所在的盤。
fio -name iops -rw=write -bs=4k -runtime=60 -iodepth 32 -filename /dev/sda1 -ioengine libaio -direct=1
還沒執行完系統就斷了,聯絡機房看了下報錯,檔案系統崩潰了,哎 哎 哎 不讓說哎 就說哎
我能怎麼辦只能下面這個樣子了: