FIO安裝部署及測試方法案例

    I/O輸入/輸出(Input/Output),讀和寫,提高緩存(cache)和做磁盤陣列(RAID)能提高存儲IO性能。

     IOPS (英文:Input/Output Operations Per Second),即每秒進行讀寫(I/O)操作的次數,多用於數據庫、存儲等場合,衡量隨機訪問的性能。

  存儲端的IOPS性能和主機端的IO是不同的,IOPS是指存儲每秒可接受多少次主機發出的訪問主機的一次IO需要三次訪問存儲纔可以完成。例如,主機寫入一個最小的數據塊,也要經過“發送寫入請求、寫入數據、收到寫入確認”等三個步驟,也就是3個存儲端訪問。

     Linux下常用Fio、dd工具,  Windows下常用IOMeter。

     FIO是測試IOPS的非常好的工具,用來對硬件進行壓力測試和驗證,支持13種不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。  

 

linux下安裝使用流程

一,FIO安裝


下載源碼包:   wget http://brick.kernel.dk/snaps/fio-2.0.7.tar.gz
安裝依賴軟件:yum install libaio-devel   我們一般使用libaio,發起異步IO請求。
解壓:            tar -zxvf fio-2.0.7.tar.gz
安裝:            cd fio-2.0.7
編譯:            make  
安裝:            make install  

 

上部流程中如果沒有找到wget你需要先安裝

yum install wget

二.使用

下面的語句是我用來測試磁盤隨機讀寫的命令

強調:!!!測試文件名稱,通常選擇需要測試的盤的data目錄。只能是分區,不能是目錄,會破壞數據。!!!

 fio -filename=/dev/sda1 -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest 

具體參數說明

說明:
filename=/dev/sdb1     測試文件名稱,通常選擇需要測試的盤的data目錄。只能是分區,不能是目錄,會破壞數據。
direct=1                     測試過程繞過機器自帶的buffer。使測試結果更真實。

iodepth 1                   隊列深度,只有使用libaio時纔有意義,這是一個可以影響IOPS的參數,通常情況下爲1。

rw=randwrite              測試隨機寫的I/O
rw=randrw                測試隨機寫和讀的I/O

ioengine=psync           io引擎使用pync方式 
bs=4k                   單次io的塊文件大小爲4k
bsrange=512-2048         同上,提定數據塊的大小範圍
size=50G    本次的測試文件大小爲50g,以每次4k的io進行測試,此大小不能超過filename的大小,否則會報錯。
numjobs=10               本次的測試線程爲10.
runtime=1000             測試時間爲1000秒,如果不寫則一直將5g文件分4k每次寫完爲止。
rwmixwrite=30            在混合讀寫的模式下,寫佔30%
group_reporting          關於顯示結果的,彙總每個進程的信息。

 

此外
lockmem=1g               只使用1g內存進行測試。
zero_buffers             用0初始化系統buffer。
nrfiles=8                每個進程生成文件的數量。

 

read 順序讀

write 順序寫

rw,readwrite 順序混合讀寫

randwrite 隨機寫

randread 隨機讀

randrw 隨機混合讀寫

其他常用語句

順序讀
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=50G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

隨機寫
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=50G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

順序寫
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=50G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

混合隨機讀寫
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=50G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop

 

三.測試結果 

下面是我用虛擬機中linux執行測試隨機讀寫命令的結果

[root@localhost dev]#  fio -filename=/dev/sda1 -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10
 -group_reporting -name=mytest mytest: (g=0): rw=randrw, bs=16K-16K/16K-16K, ioengine=psync, iodepth=1
...
mytest: (g=0): rw=randrw, bs=16K-16K/16K-16K, ioengine=psync, iodepth=1
fio 2.0.7
Starting 10 threads
Jobs: 10 (f=10): [mmmmmmmmmm] [100.0% done] [1651K/1831K /s] [100 /111  iops] [eta 00m:00s]
mytest: (groupid=0, jobs=10): err= 0: pid=4075
  read : io=28976KB, bw=2854.6KB/s, iops=178 , runt= 10151msec
    clat (usec): min=49 , max=525390 , avg=35563.60, stdev=69691.20
     lat (usec): min=49 , max=525390 , avg=35563.72, stdev=69691.20
    clat percentiles (usec):
     |  1.00th=[   65],  5.00th=[   70], 10.00th=[   92], 20.00th=[  116],
     | 30.00th=[  137], 40.00th=[  151], 50.00th=[  175], 60.00th=[  286],
     | 70.00th=[14144], 80.00th=[69120], 90.00th=[138240], 95.00th=[197632],
     | 99.00th=[280576], 99.50th=[301056], 99.90th=[452608], 99.95th=[528384],
     | 99.99th=[528384]
    bw (KB/s)  : min=   16, max= 1440, per=12.25%, avg=349.55, stdev=236.44
  write: io=29616KB, bw=2917.6KB/s, iops=182 , runt= 10151msec
    clat (usec): min=64 , max=2030.4K, avg=19768.52, stdev=155468.56
     lat (usec): min=64 , max=2030.4K, avg=19768.86, stdev=155468.56
    clat percentiles (usec):
     |  1.00th=[   70],  5.00th=[   83], 10.00th=[   93], 20.00th=[  115],
     | 30.00th=[  131], 40.00th=[  141], 50.00th=[  151], 60.00th=[  161],
     | 70.00th=[  177], 80.00th=[  209], 90.00th=[  310], 95.00th=[  532],
     | 99.00th=[700416], 99.50th=[1056768], 99.90th=[2007040], 99.95th=[2023424],
     | 99.99th=[2023424]
    bw (KB/s)  : min=   21, max= 1392, per=11.98%, avg=349.49, stdev=253.50
    lat (usec) : 50=0.03%, 100=13.11%, 250=58.60%, 500=7.76%, 750=1.34%
    lat (usec) : 1000=0.38%
    lat (msec) : 2=0.87%, 4=0.74%, 10=0.38%, 20=1.37%, 50=3.63%
    lat (msec) : 100=2.57%, 250=6.80%, 500=1.64%, 750=0.33%, 1000=0.14%
    lat (msec) : 2000=0.27%, >=2000=0.05%
  cpu          : usr=0.04%, sys=1.52%, ctx=45844, majf=0, minf=798
  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    : total=r=1811/w=1851/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
   READ: io=28976KB, aggrb=2854KB/s, minb=2854KB/s, maxb=2854KB/s, mint=10151msec, maxt=10151msec
  WRITE: io=29616KB, aggrb=2917KB/s, minb=2917KB/s, maxb=2917KB/s, mint=10151msec, maxt=10151msec

Disk stats (read/write):
  sda: ios=1818/1846, merge=0/5, ticks=63776/33966, in_queue=104258, util=99.84%

其中

bw:磁盤的吞吐量,這個是順序讀寫考察的重點,類似於下載速度。

iops:磁盤的每秒讀寫次數,這個是隨機讀寫考察的重點

io總的輸入輸出量 

runt:總運行時間

lat (msec):延遲(毫秒)

msec: 毫秒

usec: 微秒

 

藍色方框裏面的是測出的IOPS 182, 綠色方框裏面是每個IO請求的平均響應時間,大約是19ms。黃色方框表示95%的IO請求的響應時間是小於等於0.5 ms。橙色方框表示該硬盤的利用率已經達到了99.84%。

 

當然這上面是用虛擬機模擬測試,和實際環境還是有偏差的 主要記錄上面各項指標代表什麼含義

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章