1. 程式人生 > >fio 命令入門到跑路(千萬不能在系統所在的分割槽測試硬碟效能)

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 官網地址:

http://freshmeat.net/projects/fio/

安裝:  

        yum install fio –y

image

用法

      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

image


看看生成的一堆檔案

QQ截圖20181120103917.png

#複製下面的配置內容,將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截圖20181120104029.png



QQ群裡一個小夥說用fio測試才準確,差 你個糟老頭子,我信了你個鬼。

QQ截圖20181120104127.png

我就執行了下面的命令 ,sda1是系統所在的盤。

fio -name iops -rw=write -bs=4k -runtime=60 -iodepth 32 -filename /dev/sda1 -ioengine libaio -direct=1

還沒執行完系統就斷了,聯絡機房看了下報錯,檔案系統崩潰了,哎 哎 哎 不讓說哎 就說哎


webwxgetmsgimg (2).jpg


我能怎麼辦只能下面這個樣子了:

timg.jpg