使用 fio 工具測試 EBS 效能

java06051515發表於2018-11-26

fio

fio 是一個專業的磁碟效能測試工具,本文將以 滴滴雲 SSD 雲盤為例,演示用 fio 測試 EBS 效能的方法。

磁碟效能指標

指標 說明
IOPS 每秒處理隨機讀寫的 IO 個數
頻寬 每秒處理順序讀寫的 IO 資料量
延遲 處理單個 IO 的平均耗時

讀寫型別說明

型別 說明
順序讀/寫 每次 IO 的讀/寫位置緊跟上一個 IO 的讀/寫位置,即每次讀/寫的偏移量是順序遞增的
隨機讀/寫 每次 IO 的讀/寫位置在磁碟內是隨機的,與上一個 IO 的讀/寫位置無關

環境準備

建立滴滴雲 EBS

DC2 配置:

引數 型別 規格 說明
作業系統 centos 7
CPU 4核
記憶體 8G
系統盤 本地 SSD 80G vda
資料盤 SSD 雲盤(EBS) 200G vdb

登入 DC2, 用 lsblk 命令檢視掛載好的塊裝置:

其中, vdb 就是接下來要測試的 EBS。

安裝 fio

  # sudo yum install fio -y

檢視 fio 版本

  [ dc2 - user @ 10 - 254 - 252 - 85  ~ ]$   fio  - v

  fio - 3.1

開始測試

注:如果 EBS 裡已有資料,為防止資料損壞,請用檔案的方式進行測試,即: 將 EBS mount 到目錄後,用 fio 讀寫 mount 目錄下的 test 檔案。

測試順序寫頻寬

  [ dc2 - user @ 10 - 254 - 252 - 85  ~ ]$   sudo  fio  - direct = 1  - iodepth = 128  - ioengine = libaio  - rw = write  - bs = 1M  - size = 10G  - numjobs = 1  - runtime = 200  < mark >- filename =/ mnt / test </ mark > - name = perf

輸出:

其中 BW=121MiB/s 表示頻寬為 121MiB/s。

測試隨機寫 IOPS

  [ dc2 - user @ 10 - 254 - 252 - 85  ~ ]$   sudo  fio  - direct = 1  - iodepth = 128  - ioengine = libaio  - rw = randwrite  - bs = 4K  - size = 5G  - numjobs = 1  - runtime = 200  - filename =/ mnt / test  - name = perf

 

輸出:

測試結果為:IOPS=8206。

測試隨機寫延遲

  [ dc2 - user @ 10 - 254 - 252 - 85  ~ ]$   sudo  fio  - direct = 1  - iodepth = 1  - ioengine = libaio  - rw = randwrite  - bs = 4K  - size = 5G  - numjobs = 1  - runtime = 200  - filename =/ mnt / test  - name = perf

輸出:

測試結果為, 寫平均延遲 = 118 us。

測試順序讀頻寬

  [ dc2 - user @ 10 - 254 - 252 - 85  ~ ]$   sudo  fio  - direct = 1  - iodepth = 128  - ioengine = libaio  - rw = read  - bs = 1M  - size = 10G  - numjobs = 1  - runtime = 200  < mark >- filename =/ mnt / test </ mark > - name = perf

測試隨機讀 IOPS

  [ dc2 - user @ 10 - 254 - 252 - 85  ~ ]$   sudo  fio  - direct = 1  - iodepth = 128  - ioengine = libaio  - rw = randread  - bs = 4K  - size = 10G  - numjobs = 1  - runtime = 200  < mark >- filename =/ mnt / test </ mark > - name = perf

測試隨機讀延遲

  [ dc2 - user @ 10 - 254 - 252 - 85  ~ ]$   sudo  fio  - direct = 1  - iodepth = 1  - ioengine = libaio  - rw = randread  - bs = 4K  - size = 5G  - numjobs = 1  - runtime = 200  - filename =/ mnt / test  - name = perf

fio 引數說明

引數 說明
direct direct=1 表示測試的 IO 用直接 IO,即跳過檔案系統快取記憶體, 使測試結果更接近磁碟效能
iodepth IO 佇列長度,典型值: 64 或 128, 值越大磁碟的 IO 負載越高,同時 IO 延遲也會增大,iodepth=1 用來測 IO 延遲
ioengine 設定 IO 引擎, 決定 fio 呼叫哪種 IO 庫,通常用 libaio
rw IO 型別:read = 順序讀,write = 順序寫,randread = 隨機讀,randwrite = 隨機寫…
bs IO 塊大小,即每個 IO 讀寫的資料量,通常 bs=1M 用於測試順序讀寫頻寬,bs=4K 用於測試隨機讀寫的 IOPS
size IO 讀寫資料總量,如果 runtime 引數設定的時間到,則會停止
numjobs 同時讀寫的子程式數
runtime 讀寫時長,如果讀寫完 size 引數設定的資料量後還未到讀寫時長且沒有設定 time_based 選項,則停止
name 本次測試任務的名字


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559758/viewspace-2221624/,如需轉載,請註明出處,否則將追究法律責任。

相關文章