Linux 測試磁盤IO性能的幾種方法

 在磁盤測試中最關心的幾個指標分別爲:iops(每秒執行的IO次數)、bw(帶寬,每秒的吞吐量)、lat(每次IO操作的延遲)。 

當每次IO操作的block較小時,如512bytes/4k/8k等,測試的主要是iops。 

當每次IO操作的block較大時,如256k/512k/1M等,測試的主要是bw。

1. 最簡單的dd

 dd是linux自帶的磁盤讀寫工具,可用於測試順序讀寫。 

一般而言,磁盤讀寫有兩種方式:BufferIO、DirectIO,DirectIO可以更好的瞭解純磁盤讀寫的性能。

1.1 dd測試DirectIO 

iops——寫測試 dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct 

iops——讀測試 dd if=./a.dat of=/dev/null bs=8k count=1M iflag=direct

bw——寫測試 dd if=/dev/zero of=./a.dat bs=1M count=8k oflag=direct 

bw——讀測試 dd if=./a.dat of=/dev/null bs=1M count=8k iflag=direct

1.2 dd測試BufferIO

  BufferIO主要出現在一些大文件讀寫的場景,由於使用內存做Cache所以讀寫性能上和DirectIO相比,通常會高很多,尤其是讀,所以這個場景下我們僅關心bw即可。

用dd測試BufferIO的寫時,需要增加一個conv=fdatasync,使用該參數,在完成所有讀寫後會調用一個sync確保數據全部刷到磁盤上(期間操作系統也有可能會主動flush),否則就是主要在測內存讀寫了;

另外還有一個參數是oflag=dsync,使用該參數也是走的BufferIO,但卻是會在每次IO操作後都執行一個sync。

通常conv=fdatasync更符合大文件讀寫的場景,所以這裏以其作爲參數進行測試。

bw——寫測試 dd if=/dev/zero of=./a.dat bs=1M count=8k conv=fdatasync

bw——讀測試 dd if=./a.dat of=/dev/null bs=1M count=8k

2. 更專業的fio

  fio是專門用於測試磁盤IO的工具,與dd相比那是要強大非常多,它可以用於測試順序讀寫、隨機讀寫、順序混合讀寫、隨機混合讀寫,並且可以調整IO併發量,在測試完成後還會生成一份測試報告,相當給力

本人寫了一個使用fio自動測試並整理報告的腳本,安裝好fio後即可直接使用。

測試腳本地址如下: https://gist.github.com/sennajox/3667757

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