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/web

安裝:  緩存

        yum install fio –y安全

image

用法bash

      fio分順序讀  -rw=read ,隨機讀 -rw=randread,順序寫 -rw=write,隨機寫-rw=randwrite ,混合隨機讀寫模式  -rw=randrw服務器

參數:dom

       filename: 指定文件(設備)的名稱。能夠經過冒號分割同時指定多個文件,如filename=/dev/sda:/dev/sdb。異步

       directory: 設置filename的路徑前綴。在後面的基準測試中,採用這種方式來指定設備。ide

       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

dd命令測試的是對的

dd if=/dev/zero of=/tmp/test.dbf bs=4k count=10000  oflag=dsync

QQ截圖20181122081935.png

另一個就快

QQ截圖20181122082134.png

爲何差距這麼大呢?後來發現是由於一個是sas卡 一個是raid卡 raid卡有緩存比sas卡快

QQ截圖20181121154444.png

QQ截圖20181121154534.png


到最後終於找到緣由了,奉勸你不要用這個fio命令,趕忙忘記他,去你的fio命令

相關文章
相關標籤/搜索