說明: 操作系統是CentOS Linux
->表示命令提示符 ; # 表示備註
1: 安裝fio
#下載fio
-> wget http://brick.kernel.dk/snaps/fio-2.1.10.tar.gz
# 解壓
-> tar -zxvf fio-2.1.10.tar.gz
# 配置 安裝
->cd fio-2.1.10
-> make
->make install
如果fio安裝不了,請先安裝 libaio 和 libaio-devel 包 yum install libaio libaio-devel
2: fio 的一些查看命令
fio --help 查看fio選項
fio --cmdhelp 查看fio 命令選項
fio --enghelp 查看fio 支持的engine 類型
fio --debug
fio --output 制定fio的輸出
3: fio 測試樣板
隨機讀:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=200G -numjobs=10 -runtime=1000 -group_reporting -name=mytest
順序讀
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
隨機寫:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
順序寫:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
混合隨機讀寫:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop
4: 測試參數介紹
direct=1 測試過程繞過機器自帶的buffer。使測試結果更真實。
rw=randwrite 測試隨機寫的I/O
rw=randrw 測試隨機寫和讀的I/O
bs=4k 單次io的塊文件大小爲4k
size=2g 本次的測試文件大小爲2g,以每次4k的io進行測試。
numjobs=64 本次的測試線程爲64.
runtime=20 測試時間爲20秒,如果不寫則一直將2g文件分4k每次寫完爲止。
lockmem=1g 只使用1g內存進行測試。
name=/dev/md0 測試的盤
filename=/dev/sdb1 測試文件名稱,通常選擇需要測試的盤的data目錄。
group_reporting 關於顯示結果的,彙總每個進程的信息。
zero_buffers 用0初始化系統buffer。
nrfiles=8 每個進程生成文件的數量。
bsrange=512-2048 同上,提定數據塊的大小範圍
ioengine=psync io引擎使用pync方式
rwmixwrite=30 在混合讀寫的模式下,寫佔30%
5: 結果查看
test-rand-read: (groupid=0, jobs=64): err= 0: pid=8120: Sat Oct 18 22:33:48 2014
read : io=20396KB, bw=968625B/s, iops=236, runt= 21562msec
slat (usec): min=2, max=17009K, avg=256160.22, stdev=1729741.00
clat (msec): min=10, max=19881, avg=10338.59, stdev=5499.82
lat (msec): min=10, max=21478, avg=10594.75, stdev=5462.88
clat percentiles (msec):
| 1.00th=[ 196], 5.00th=[ 1565], 10.00th=[ 2671], 20.00th=[ 4490],
| 30.00th=[ 6980], 40.00th=[ 8586], 50.00th=[10421], 60.00th=[12125],
| 70.00th=[15401], 80.00th=[16712], 90.00th=[16712], 95.00th=[16712],
| 99.00th=[16712], 99.50th=[16712], 99.90th=[16712], 99.95th=[16712],
| 99.99th=[16712]
bw (KB /s): min= 0, max= 227, per=1.05%, avg= 9.89, stdev=32.03
lat (msec) : 20=0.02%, 50=0.16%, 100=0.06%, 250=2.26%, 500=0.86%
lat (msec) : 750=0.39%, 1000=0.49%, 2000=2.63%, >=2000=93.14%
cpu : usr=0.00%, sys=0.00%, ctx=739, majf=0, minf=6314
IO depths : 1=1.3%, 2=2.5%, 4=5.0%, 8=10.0%, 16=20.1%, 32=40.2%, >=64=20.9%
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=94.3%, 8=0.0%, 16=0.0%, 32=0.0%, 64=5.7%, >=64=0.0%
issued : total=r=5099/w=0/d=0, short=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=64
Run status group 0 (all jobs):
READ: io=20396KB, aggrb=945KB/s, minb=945KB/s, maxb=945KB/s, mint=21562msec, maxt=21562msec
Disk stats (read/write):
sda: ios=5070/4, merge=0/12, ticks=2999683/654, in_queue=3214957, util=99.64%
因報告內容豐富,而我們只需要關注以下兩項即可:
bw:磁盤的吞吐量,這個是順序讀寫考察的重點
iops:磁盤的每秒讀寫次數,這個是隨機讀寫考察的重點
例如:
test-rand-read: (groupid=0, jobs=64): err= 0: pid=8120: Sat Oct 18 22:33:48 2014
read : io=20396KB, bw=968625B/s, iops=236, runt= 21562msec
測試隨機讀; 帶寬: 968625B/s, iops=236