Quantcast
Channel: Hardware – Benjr.tw
Viewing all articles
Browse latest Browse all 145

Fio 效能測試

$
0
0

沒用過 Fio 的請先參考使用介紹 http://benjr.tw/34632

測試環境為 CentOS 7 x86_64 (虛擬機)

效能測試需求如下:

  • Hard drive – /dev/sdb
  • iodepth – 4
  • block size – 4k , 32k
  • RW – 100% Read , 100% write

直接使用 Fio Job file (configuration) 檔案來設定會比較適合完整的效能測試,先編輯好我們要測試的不同參數值,Job file 兩段 [global] : 共用的設定參數 , [job] :特別指定的參數.

[root@localhost ~]# vi fio.cfg
[global]
filename=/dev/sdb
direct=1
ioengine=libaio
time_based
runtime=10
iodepth=4
refill_buffers
group_reporting
wait_for_previous
ramp_time=5
[JOB1]
bs=4k
rw=read
[JOB2]
bs=32k
rw=read
[JOB3]
bs=4k
rw=write
[JOB4]
bs=32k
rw=write

使用參數說明:

  • filename
    指定要測試的磁碟.
  • direct
    預設值為 0 ,必須設定為 1 才會測試到真實的 non-buffered I/O.
  • ioengine
    定義如何跑 I/O 的方式, libaio 是 Linux 本身非同步(asynchronous) I/O 的方式.
    其他還有 sync , psync , vsync , posixaio , mmap , splice , syslet-rw , sg , null , net , netsplice , cpuio , guasi , external.
  • time_based
    測試以時間為單位,另外一種方式是以 kb_base (kilobyte).
  • runtime
    這一測試所需的時間,單位為 秒.
  • iodepth=16
    同一時間有多少 I/O 在做存取,越多不代表存儲裝置表現會更好,通常是 RAID 時須要設大一點.
  • refill_buffers
    refill_buffers 為預設值,應該是跟 I/O Buffer 有關 (refill the IO buffers on every submit),把 Buffer 填滿就不會跑到 Buffer 的值.
  • group_reporting
    如果 numjobs 有指定,設定 group_reporting 報告會以 per-group 的顯示方式,而不是預設的 per-job (會顯示所有個別 numjobs 的測試結果)
  • wait_for_previous
    預設所有的 Job 會一起執行,wait_for_previous 可以讓依序一個接著一個執行.
  • ramp_time
    設定 ramp_time 會讓測試開始的一段時間不統計到整體效能裡.
  • bs=4k
    bs 或是 blocksize ,也就是檔案寫入大小,預設值為 4K,如何設定這個值,因為不同性質的儲存裝置需要不同的值.看你是 File Server,Web server , Database … 設定都會不一樣.
  • rw
    可以設定的參數如下,通常在跑效能時會使用單純的 read 與 write,其他可以使用參數如下:
    • read : Sequential reads. (循序讀)
    • write : Sequential writes. (循序寫)
    • trim : Sequential trim.
    • randread : Random reads. (隨機讀)
    • randwrite : Random writes. (隨機寫)
    • randtrim : Random trim.
    • rw : Mixed sequential reads and writes. (循序讀寫)
    • readwrite : Sequential read and write mix (循序混合讀寫)
    • randrw : Mixed random reads and writes. (隨機讀寫)
    • trimwrite : Trim and write mix, trims preceding writes.

執行測試.

[root@localhost ~]# fio fio.cfg 
JOB1: (g=0): rw=read, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=4
JOB2: (g=1): rw=read, bs=32K-32K/32K-32K/32K-32K, ioengine=libaio, iodepth=4
JOB3: (g=2): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=4
JOB4: (g=3): rw=write, bs=32K-32K/32K-32K/32K-32K, ioengine=libaio, iodepth=4
fio-2.2.8
Starting 4 processes
...
Run status group 0 (all jobs):
   READ: io=478308KB, aggrb=47826KB/s, minb=47826KB/s, maxb=47826KB/s, mint=10001msec, maxt=10001msec

Run status group 1 (all jobs):
   READ: io=3871.8MB, aggrb=396421KB/s, minb=396421KB/s, maxb=396421KB/s, mint=10001msec, maxt=10001msec

Run status group 2 (all jobs):
  WRITE: io=455712KB, aggrb=45566KB/s, minb=45566KB/s, maxb=45566KB/s, mint=10001msec, maxt=10001msec

Run status group 3 (all jobs):
  WRITE: io=1092.8MB, aggrb=111880KB/s, minb=111880KB/s, maxb=111880KB/s, mint=10001msec, maxt=10001msec

Disk stats (read/write):
  sdb: ios=243555/148762, merge=0/0, ticks=26920/42484, in_queue=69607, util=92.90%

統計資料所代表的結果如下:

  • io: Number of megabytes I/O performed.
    時間內所執行的 IO 次數.
  • aggrb: Aggregate bandwidth of threads in the group.
    平均的測試頻寬結果.
  • minb: Minimum average bandwidth a thread saw.
    因為效能有時高有時低,所以這個值代表平均最小測試頻寬結果.
  • maxb: Maximum average bandwidth a thread saw.
    因為效能有時高有時低,所以這個值代表平均最大測試頻寬結果.
  • mint: Shortest runtime of threads in the group.
    因為執行時間時高有時低,所以這個值代表 threads 執行平均最短所需的時間.
  • maxt: Longest runtime of threads in the group.
    因為執行時間時高有時低,所以這個值代表 threads 執行平均最大所需的時間.

Viewing all articles
Browse latest Browse all 145

Trending Articles