IO測試工具之fio詳解
本文章向大家介紹IO測試工具之fio詳解,主要包括IO測試工具之fio詳解使用實例、應用技巧、基本知識點總結和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。
目前主流的第三方IO測試工具有fio、iometer和Orion,這三種工具各有千秋。
fio在Linux系統下使用比較方便,iometer在window系統下使用比較方便,Orion是oracle的IO測試軟件,可在沒有安裝oracle數據庫的情況下模擬oracle數據庫場景的讀寫。
如下是在Linux系統上采用fio工具來對磁盤進行的IO測試。請在進行測試前先看下第4點的注意事項。
1、安裝fio
下載源碼包:
wget -P /tmp/ https://brick.kernel.dk/snaps/fio-3.0.tar.gz
tar -xzvf /tmp/fio-3.0.tar.gz
cd /tmp/fio-3.0
./configure&&make&&make install
之后就可以使用fio了。
2、fio參數解釋
可以使用fio -help查看每個參數,具體的參數左右可以在官網查看how to文檔,如下為幾個常見的參數描述
filename=/dev/vdb 支持文件系統或者裸設備,-filename=/dev/sdb或-filename=/data/fiotest
direct=1 測試過程繞過機器自帶的buffer,使測試結果更真實
rw=randwread 測試隨機讀的I/O
rw=randwrite 測試隨機寫的I/O
rw=randrw 測試隨機混合寫和讀的I/O
rw=read 測試順序讀的I/O
rw=write 測試順序寫的I/O
rw=rw 測試順序混合寫和讀的I/O
bs=4k 單次io的塊文件大小為4k
bsrange=512-2048 同上,提定數據塊的大小范圍
size=5g 本次的測試文件大小為5g,以每次4k的io進行測試
numjobs=30 本次的測試線程為30
runtime=1000 測試時間為1000秒,如果不寫則一直將5g文件分4k每次寫完為止
ioengine=psync io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包
rwmixwrite=30 在混合讀寫的模式下,寫占30%
group_reporting 關於顯示結果的,匯總每個進程的信息
此外
lockmem=1g 只使用1g內存進行測試
zero_buffers 用0初始化系統buffer
nrfiles=8 每個進程生成文件的數量
3、fio測試場景及生成報告詳解
測試場景:
100%隨機,100%讀, 4K
fio -filename=/dev/vdb -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=100G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k
100%隨機,100%寫, 4K
fio -filename=/dev/vdb -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=100G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k
100%順序,100%讀 ,4K
fio -filename=/dev/vdb -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=100G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100read_4k
100%順序,100%寫 ,4K
fio -filename=/dev/vdb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=100G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100write_4k
100%隨機,70%讀,30%寫 4K
fio -filename=/dev/vdb -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=100G -numjobs=50 -runtime=180 -group_reporting -name=randrw_70read_4k
結果報告查看:
[root@my_test]# fio -filename=/data/fiotest -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=60G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k
rand_100write_4k: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
...
fio-3.0
Starting 50 threads
rand_100write_4k: (groupid=0, jobs=50): err= 0: pid=6793: Fri Dec 11 14:32:00 2020
write: IOPS=1945, BW=7782KiB/s (7969kB/s)(1368MiB/180028msec)
clat (usec): min=282, max=1522.2k, avg=25587.08, stdev=79681.76
lat (usec): min=282, max=1522.2k, avg=25587.68, stdev=79681.83
clat percentiles (usec):
| 1.00th=[ 334], 5.00th=[ 355], 10.00th=[ 367],
| 20.00th=[ 383], 30.00th=[ 400], 40.00th=[ 416],
| 50.00th=[ 437], 60.00th=[ 461], 70.00th=[ 506],
| 80.00th=[ 586], 90.00th=[ 106431], 95.00th=[ 196084],
| 99.00th=[ 362808], 99.50th=[ 404751], 99.90th=[ 750781],
| 99.95th=[ 994051], 99.99th=[1317012]
bw ( KiB/s): min= 7, max= 1701, per=2.07%, avg=161.41, stdev=159.66, samples=17455
iops : min= 1, max= 425, avg=40.19, stdev=39.80, samples=17455
lat (usec) : 500=69.21%, 750=14.97%, 1000=0.96%
lat (msec) : 2=1.40%, 4=0.17%, 10=0.06%, 20=0.22%, 50=0.38%
lat (msec) : 100=2.15%, 250=7.11%, 500=3.15%, 750=0.11%, 1000=0.05%
lat (msec) : 2000=0.05%
cpu : usr=0.03%, sys=0.23%, ctx=700195, majf=0, minf=13
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwt: total=0,350237,0, short=0,0,0, dropped=0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: bw=7782KiB/s (7969kB/s), 7782KiB/s-7782KiB/s (7969kB/s-7969kB/s), io=1368MiB (1435MB), run=180028-180028msec
Disk stats (read/write):
vdb: ios=0/350018, merge=0/35, ticks=0/167514, in_queue=167395, util=93.03%
結果解析
io=執行了多少M的IO
bw=平均IO帶寬
iops=IOPS
runt=線程運行時間
slat=提交延遲
clat=完成延遲
lat=響應時間
bw=帶寬
cpu=利用率
IO depths=io隊列
IO submit=單個IO提交要提交的IO數
IO complete=Like the above submit number, but for completions instead.
IO issued=The number of read/write requests issued, and how many of them were short.
IO latencies=IO完延遲的分布
io=總共執行了多少size的IO
aggrb=group總帶寬
minb=最小.平均帶寬.
maxb=最大平均帶寬.
mint=group中線程的最短運行時間.
maxt=group中線程的最長運行時間.
ios=所有group總共執行的IO數.
merge=總共發生的IO合並數.
ticks=Number of ticks we kept the disk busy.
io\_queue=花費在隊列上的總共時間.
util=磁盤利用率
4、注意事項
參數-filename= 后如果接的是裸設備,如:-filename=/dev/vdb那么FIO命令對硬盤的寫入是覆蓋寫入,寫入的地方原有數據將被全部覆蓋不可修復,此時你會發現你正在測試的磁盤所在的文件系統崩潰了或者數據庫的數據被刪除數據庫奔潰。所以在測試前一定要注意這一點,知道自己在做什么。已經格式化成文件系統的盤-filename= 后面不要寫盤符,也勁量不要去生產系統做這樣的測試,否則有可能會一失足成千古恨。
如果要測試的是已經掛載的文件系統可以這樣寫 -filename=/data/fiotest ,/data是你的掛載點,fiotest替換成你要讀寫數據的文件名,可以隨便給個名字(不能和已有文件名重復哦,重復了原有數據又該被刪除了),這樣在測試時對文件系統/data下的數據是沒有影響的。
另外fio測試讀寫的數據量最好不要超過文件系統剩余的可用容量。