您好,登錄后才能下訂單哦!
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
用法
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
還沒執行完系統就斷了,聯系機房看了下報錯,文件系統崩潰了,哎 哎 哎 不讓說哎 就說哎
我能怎么辦只能下面這個樣子了:
dd命令測試的是對的
dd if=/dev/zero of=/tmp/test.dbf bs=4k count=10000 oflag=dsync
另外一個就快
為什么差距這么大呢?后來發現是因為一個是sas卡 一個是raid卡 raid卡有緩存比sas卡快
到最后終于找到原因了,奉勸你不要用這個fio命令,趕緊忘記他,去你的fio命令
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。