簡介:fio 是一個 開源的硬件I/O壓力測試工具,主要是用來測試磁盤/SSD的io性能,也可測試cpu,nic的io性能。它能夠支持13種不一樣的I/O引擎,包括:sync, mmap, libaio, posixaio, SG v3, splice, network, syslet, guasi, solarisaio, I/O priorities (針對新的Linux內核), rate I/O, forked or threaded jobs等。不一樣引擎的具體含義,能夠參看fio的說明文檔(安裝後能夠經過man fio查看),例如:html
sync: Basic read(2) or write(2) I/O. fseek(2) is used to position the I/O location.linux
psync: Basic pread(2) or pwrite(2) I/O.ios
vsync: Basic readv(2) or writev(2) I/O. Will emulate queuing by coalescing adjacents IOs into a single submission.async
libaio: Linux native asynchronous I/O.ide
……工具
fio支持的平臺:Linux, FreeBSD, NetBSD, OS X, OpenSolaris, AIX, Windows,這裏主要講講linux下地使用。性能
下載地址:http://freecode.com/projects/fio測試
依賴包:libaio-devui
安裝:下載解壓後具體安裝過程詳見README,其實只要make, make install便可;rest
安裝過程若是報錯請安裝依賴包:sudo apt-get install libaio-dev。
使用:這個工具的可定製性很是強,能夠根據測試者的想法進行各類混合io的測試。使用方法主要有兩種形式,一種是命令形式,即fio [-options];另外一種則是fio + 負載說明文件形式,下面咱們來具體看兩個例子。
1. 命令形式
fio –filename=/dev/sda1 –direct=1 –rw=randread –bs=4k –size=60G –numjobs=64 –runtime=10 –group_reporting –name=test
各參數含義可經過man fio查詢獲得,這裏只簡單說明幾個:
filename:待測試的設備名或掛載文件名
direct:繞過OS的文件系統緩衝區測試
rw:指定讀寫模式,這裏是測隨機讀性能
bs:每次請求的IO大小
size:測試的目標區域大小
name:本次測試任務的名字,隨便取
2.負載說明文件形式:先生成一個負載說明文件,再經過fio 負載文件名方式執行
安裝後,安裝目錄下有個examples文件夾,下面已有現成的一些例子,這裏舉個測試SSD「四項全能」性能的例子:
[文件名:SSD-test]
# drives are usually separated from the good drives.
#
# This uses a queue depth of 4. New SATA SSD's will support up to 32
# in flight commands, so it may also be interesting to increase the queue
# depth and compare. Note that most real-life usage will not see that
# large of a queue depth, so 4 is more representative of normal use.
#
[global]
bs=4k
ioengine=libaio
iodepth=4
size=1g
direct=1
runtime=60
directory=/mount-point-of-ssd
filename=ssd.test.file
[seq-read]
rw=read
stonewall
[rand-read]
rw=randread
stonewall
[seq-write]
rw=write
stonewall
[rand-write]
rw=randwrite
stonewall
測試結果以下:
seq-read: (g=0): rw=read, bs=1M-1M/1M-1M/1M-1M, ioengine=libaio, iodepth=4
rand-read: (g=1): rw=randread, bs=1M-1M/1M-1M/1M-1M, ioengine=libaio, iodepth=4
seq-write: (g=2): rw=write, bs=1M-1M/1M-1M/1M-1M, ioengine=libaio, iodepth=4
rand-write: (g=3): rw=randwrite, bs=1M-1M/1M-1M/1M-1M, ioengine=libaio, iodepth=4
fio-2.0.10
Starting 4 processes
seq-read: Laying out IO file(s) (1 file(s) / 1024MB)
seq-read(順序讀性能): (groupid=0, jobs=1): err= 0: pid=2460: Thu Nov 1 21:15:52 2012
read : io(測試了1G的數據)=1024.0MB, bw(帶寬)=139643KB/s, iops(每秒鐘的IO數)=136 , runt(總運行時間)= 7509msec
slat (usec): min=71 , max=814 , avg=95.42, stdev=42.51
clat (msec): min=8 , max=43 , avg=29.20, stdev= 1.16
lat (msec): min=9 , max=43 , avg=29.30, stdev= 1.14
clat percentiles (usec):
| 1.00th=[28288], 5.00th=[29056], 10.00th=[29056], 20.00th=[29056],
| 30.00th=[29056], 40.00th=[29312], 50.00th=[29312], 60.00th=[29312],
| 70.00th=[29312], 80.00th=[29312], 90.00th=[29312], 95.00th=[29312],
| 99.00th=[31872], 99.50th=[36608], 99.90th=[36608], 99.95th=[43776],
| 99.99th=[43776]
bw (KB/s) : min=137885, max=139912, per=100.00%, avg=139767.21, stdev=541.74
lat (msec) : 10=0.10%, 20=0.10%, 50=99.80%
cpu : usr=0.11%, sys=1.55%, ctx=1050, majf=0, minf=0
IO depths : 1=0.1%, 2=0.2%, 4=99.7%, 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 : total=r=1024/w=0/d=0, short=r=0/w=0/d=0
rand-read(隨機讀性能): (groupid=1, jobs=1): err= 0: pid=2461: Thu Nov 1 21:15:52 2012
read : io=1024.0MB, bw=139624KB/s, iops=136 , runt= 7510msec
slat (usec): min=69 , max=750 , avg=87.59, stdev=41.23
clat (msec): min=8 , max=43 , avg=29.21, stdev= 1.19
lat (msec): min=9 , max=43 , avg=29.30, stdev= 1.17
clat percentiles (usec):
| 1.00th=[25728], 5.00th=[29056], 10.00th=[29056], 20.00th=[29056],
| 30.00th=[29056], 40.00th=[29312], 50.00th=[29312], 60.00th=[29312],
| 70.00th=[29312], 80.00th=[29312], 90.00th=[29312], 95.00th=[29312],
| 99.00th=[33024], 99.50th=[36608], 99.90th=[37120], 99.95th=[43776],
| 99.99th=[43776]
bw (KB/s) : min=137612, max=139912, per=100.00%, avg=139747.71, stdev=614.70
lat (msec) : 10=0.10%, 20=0.10%, 50=99.80%
cpu : usr=0.21%, sys=1.39%, ctx=1042, majf=0, minf=0
IO depths : 1=0.1%, 2=0.2%, 4=99.7%, 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 : total=r=1024/w=0/d=0, short=r=0/w=0/d=0
seq-write(順序寫性能): (groupid=2, jobs=1): err= 0: pid=2462: Thu Nov 1 21:15:52 2012
write: io=1024.0MB, bw=124593KB/s, iops=121 , runt= 8416msec
slat (usec): min=91 , max=218 , avg=121.47, stdev=16.35
clat (msec): min=9 , max=123 , avg=32.73, stdev= 7.10
lat (msec): min=9 , max=123 , avg=32.85, stdev= 7.10
clat percentiles (msec):
| 1.00th=[ 29], 5.00th=[ 30], 10.00th=[ 30], 20.00th=[ 30],
| 30.00th=[ 30], 40.00th=[ 30], 50.00th=[ 31], 60.00th=[ 31],
| 70.00th=[ 33], 80.00th=[ 36], 90.00th=[ 41], 95.00th=[ 42],
| 99.00th=[ 45], 99.50th=[ 47], 99.90th=[ 124], 99.95th=[ 124],
| 99.99th=[ 124]
bw (KB/s) : min=102400, max=136669, per=99.68%, avg=124194.63, stdev=14056.58
lat (msec) : 10=0.10%, 20=0.10%, 50=99.41%, 250=0.39%
cpu : usr=0.57%, sys=1.24%, ctx=1066, majf=0, minf=0
IO depths : 1=0.1%, 2=0.2%, 4=99.7%, 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 : total=r=0/w=0/d=1024, short=r=0/w=0/d=0
rand-write(隨機寫性能): (groupid=3, jobs=1): err= 0: pid=2463: Thu Nov 1 21:15:52 2012
write: io=1024.0MB, bw=101351KB/s, iops=98 , runt= 10346msec
slat (usec): min=90 , max=217 , avg=121.88, stdev=11.10
clat (msec): min=7 , max=152 , avg=40.26, stdev=12.33
lat (msec): min=7 , max=152 , avg=40.38, stdev=12.33
clat percentiles (msec):
| 1.00th=[ 29], 5.00th=[ 33], 10.00th=[ 34], 20.00th=[ 36],
| 30.00th=[ 38], 40.00th=[ 39], 50.00th=[ 40], 60.00th=[ 40],
| 70.00th=[ 41], 80.00th=[ 42], 90.00th=[ 44], 95.00th=[ 48],
| 99.00th=[ 128], 99.50th=[ 133], 99.90th=[ 139], 99.95th=[ 153],
| 99.99th=[ 153]
bw (KB/s) : min=64887, max=108544, per=99.84%, avg=101187.60, stdev=9916.67
lat (msec) : 10=0.10%, 20=0.10%, 50=96.48%, 100=1.76%, 250=1.56%
cpu : usr=0.70%, sys=0.81%, ctx=1058, majf=0, minf=0
IO depths : 1=0.1%, 2=0.2%, 4=99.7%, 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 : total=r=0/w=0/d=1024, short=r=0/w=0/d=0
Run status group 0 (all jobs):
READ: io=1024.0MB, aggrb=139642KB/s, minb=139642KB/s, maxb=139642KB/s, mint=7509msec, maxt=7509msec
Run status group 1 (all jobs):
READ: io=1024.0MB, aggrb=139623KB/s, minb=139623KB/s, maxb=139623KB/s, mint=7510msec, maxt=7510msec
Run status group 2 (all jobs):
WRITE: io=1024.0MB, aggrb=124593KB/s, minb=124593KB/s, maxb=124593KB/s, mint=8416msec, maxt=8416msec
Run status group 3 (all jobs):
WRITE: io=1024.0MB, aggrb=101350KB/s, minb=101350KB/s, maxb=101350KB/s, mint=10346msec, maxt=10346msec
Disk stats (read/write):
sdb: ios=4640/4587, merge=5110/5070, ticks=124524/153520, in_queue=278152, util=97.17%