儲存裝置(storage) fio performance verify的測試範例

Copy from http://blog.sina.com.tw/william_liao/article.php?entryid=658195

這篇文章主要目的是在提醒,當使用fio在做performance verify的時候,一些事前的準備工作,以及其他要注意的設定事項。

fio (flexible I/O tester)
FIO主要是用來驗證storage的IOPS以及MBps, 它算是在Linux環境底下常用的tool之一, 它也可以用來做壓力測試的驗證 (I/O Stress verify), 目前它有Support 13種不同的I/O engine, 其中包括sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi以及solarisaio, 有興趣的讀者們可以用google search到學習網站去了解一下,在這裡我會以ubuntu 14.04以及Windows 7 Professional SP1兩個OS平台做為測試樣本。
這次是以Uptech SC340(順發3C就有在賣了)為測試樣本,這張SATA-III 4-Port hardware RAID HBA,它是PCI-e Gen:2 2x的interface,support HyperDuo(capacity/safe),RAID0,1以及RAID10,IOP採用的是Marvell 88SE9230,並使用ASRock Z68 Extreme4 Gen3來當做測試的platform,以下是本次測試的configuration。

Computer Type ACPI x64-based PC 
amd64 Operating System ubuntu 14.04 (kernel 3.13.0-35-generic #62)
Microsoft Windows 7 Professional Service Pack 1
Motherboard ASRock Z68 Extreme4 Gen3 (3 PCI-E x16,4 DDR3 DIMM) 
CPU Type QuadCore Intel Core i7-3770K, 3700 MHz (37 x 100) 
Northbridge Intel Cougar Point Z68, Intel Ivy Bridge rev.09 
Southbridge Intel Z68 rev. B3 
System Memory 3989 MB  (Kingston DDR3-1333 DDR3 SDRAM) 
BIOS Type AMI (06/29/2012) 
Storage Controller Uptech SC340
Storage Driver Standard AHCI 1.0 Serial ATA Controller (AHCI inbox driver) 
Storage IOP Marvell 88SE9230
SATA3 Devices SSD-OCZ-VERTEX3, and HDD-ST4000NM0033
Test Tool fio 2.1.3-Linux, and fio 2.1.8-Windows

官方網站
http://freecode.com/projects/fio
http://git.kernel.dk/?p=fio.git;a=summary

學習網站
http://linux.die.net/man/1/fio
http://blog.csdn.net/dbadream/article/details/30484631

下載
For Linux RPM http://pkgs.repoforge.org/fio/
                       http://pkgs.fedoraproject.org/repo/pkgs/fio/
For Windows http://www.bluestop.org/fio/

1. 測試前的注意事項
Host/Master端 (主機端-Motherboard)
  ◆ 請不要install其他不必要的軟體或常駐程式。(盡量確保resource的最大值)
  ◆ 淨空PCI-e的slot,只留下待測試的HBA。(也就是說VGA請盡量用on-board的,以避免外在因素的干擾)
  ◆ PCI-e的bandwidth也要注意一下,目前市售的motherboard都有support到Gen:3 16x足以應付市面上的HBA。
  ◆ Memory至少要在4G以上。

Target/Slave端 (設備端-HDD/SSD/RAID devices)
  ◆ 在驗證之前,先confirm原廠的HDD/SSD production data sheet的performance。
  ◆ SATA device也不要接入Enclosure內。(因為direct attach比較不會有外在因素影響)
  ◆ 不要對PD或RAID做任何format的動作。(因為file system還是有cache的存在)
  ◆ 如果測試的Target是with SSD的話,先注意下列動作:
      A. 先將SSD做wipe-out。(erase SSD的block以及其他garbage)
      B. 測試的procedure依序為 Seq.Read → Rdm.Read → Seq.Write → Rdm.Write。(這樣受到SSD的limition也會比較小)
  ◆ 關於RAID的initial:
      A. 針對Non-XOR RAID的話,請不要對RAID做任何initial的動作,因為initial還是會對RAID做Write的動作。
      B. 如果是針對XOR RAID的話,就必須要做initial,以避免I/O在access的時候又要計算Parity。

2. 安裝fio
  ◆ For Linux ubuntu 14.04
Step.1 : 使用ubuntu root權限登入。

Step.2 : 用apt-get指令來安裝fio套件。 (記得網路要通!!)

Step.3 : 用which指令來確認fio的套件已被安裝,並同時確認fio的版本。

  ◆ For Windows 7
 Step.1 : 請依照下列步驟執行安裝。

Step.2 : 進入程式集,請確認fio安裝完成與版本的確認。

3. 執行測試範例
  ◆ For Linux ubuntu 14.04
fio –ioengine=libaio –prio=0 –numjobs=32 –direct=1 –iodepth=1 –fadvise_hint=0 –runtime=30 –bwavgtime=5000 –time_based –norandommap –rw=read –bs=128k –group_reporting –name=/dev/sdb

  ◆ For Windows 7
Step.1 : 請依照下列步驟執行RAW image create。

Step.2 : 開啟命令提示字元(cmd),在DOS命令行下輸入mountvol指令,並查詢RAW file system的載入點。

Step.3 : 請在C:\ create一個text file (在這裡我以檔名fio_test做為範例),鍵入下列的指令並儲存它,請記得要鍵入RAW file system的載入點。

Step.4 : 請在C:\ 執行fio c:\fio_text (這個測試手法在Linux環境下,也同樣適用)。

底下是我比較常用的指令, 更deatil的command option, 也煩請各位讀者們可以到我提供的學習網站去study一下。

 

–ioengine=libaio Host端所要使用的I/O engine, Linux底下是設為libaio, 在Windows底下是設為windowsaio。
–prio=0 設定job的優先等級(在Linux一共有0~7個level), 0是最高。
–numjobs=32 同時間要測試的IO數, default值為1。(相當於Iometer的Outstanding IO)
–direct=1 直接對physics drive做direct access, default值為1(也就是enable)。
–iodepth=1 IO個數的設定, default值為1。
–fadvise_hint=0 設定fio kernel所要create的IO類型。 (我個人建議這個值設為0也就是disable, 最好是使用ioengine來做驗證, 這樣會比較客觀。)
–runtime=30 測試的時間, 以second(sec)為單位, 若不設定則會依據磁碟掛載點的size或是capacity的值, 一直將size或是capacity的檔案讀/寫完為止。
–time_based 如果置入此參數, 也要執行runtime所設定的時間, 即使所有的size/capacity都已經完全被讀/寫完。
–bwavgtime=5000 設定測試時間的平均值, 以millisecond(ms)為單位。
–norandommap fio在做random IO的時後, 會隨機create一個新的offset。
–rw=read 測試的I/O type, 在這裡只列出我自己常用的四種模式,分別是:read, write, randread, randwrite。
–bs=128k 測試的I/O blocksize(或稱I/O size), 在這裡我以128k為範例。 (default值為4k)
–size=200g 測試的檔案大小為200g, 每次以Seq.Read.128k的I/O(blocksize)來進行測試, 若不設定則會依據磁碟掛載點的capacity, 一直將磁碟的capacity讀/寫完為止。
–group_reporting 以group為單位, 顯示測試的結果。
–name=/dev/sdb 測試端的磁碟掛載點。
–verify=md5 如果是當做I/O stress的burn-in測試,加入這個option可以用來驗證是否有data compare error。(附記: MD5;Message-Digest Algorithm 5,(訊息摘要演算法第五版),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一,又譯為雜湊演算法、摘要演算法等,主流程式語言普遍已有MD5的實作。) Reference: http://zh.wikipedia.org/zh-tw/MD5

4. 測試結果
在這裡我個人只會看bw (MBps), iops以及cpu sys值, 來評斷HBA或SATA devices的performance, 在這裡我只列舉出一些簡單的測試結果, 其他的驗證就有勞各位讀者們去試試看。
  ◆ For Linux ubuntu 14.04

  ◆ For Windows 7

  ◆ 簡單的測試結果範例。

發表於 2014/09/19 05:34 PM
Storage儲存領域[] | 回應 [] | 引用[] | 人氣 [] | 推薦 [] |

Measure

Measure