1. 程式人生 > 其它 >dd 命令測試磁碟效能

dd 命令測試磁碟效能

技術標籤:檔案系統

1.dd命令的簡單使用

工作中,我們經常需要測試磁碟的效能,我們可以使用dd命令對系統的磁碟效能進行一個測試。

dd if=/dev/zero of=/mnt/test/testfile bs=1G count=1 oflag=direct
  • if:表示從/dev/zero這個裝置讀取資料,在類UNIX 作業系統中,/dev/zero是一個特殊的裝置檔案,當你讀它的時候,它會提供無限的空字元(NULL, ASCII NUL, 0x00)

  • of:就是資料的輸出位置,這裡可以是驅動器、分割槽、或者檔案。上面的例子中使用的就是檔案/mnt/test/testfile

  • bs:(block-size)每進行一次讀寫的資料量大小,預設單位是byte,上面例子中就是1G

  • count:表示進行讀寫的次數,上面例子中就是進行了1次讀寫

  • oflag:表示讀寫磁碟的方式。direct代表不使用系統的快取,直接對磁碟進行讀寫。dsync代表使用同步io對磁碟進行讀寫。sync表示同時寫入元資料(metadata包括size、訪問時間st_atime & st_mtime等等,因為元資料一般存放在其他的地方,一次需要進行2次IO操作)。directdsync比較類似,directdsync的基礎上不使用系統的快取。

可以對小檔案進行多次讀取來測試磁碟的延遲,例如:

dd if=/dev/zero of=/root/testfile bs=512 count=100000 oflag=dsync

輸出:

我們可以測算出,每次的io延遲大概在182.505s/100000=0.00182s左右,也就是每次的IO延遲在1ms左右。

上述的壓測是基於dsync模式下進行的,也就是同步寫入,同時沒有使用系統的快取,如果我們使用預設的引數,那麼dd命令預設是使用系統的快取的,我們可以得到一個很好的結果,如圖:

最後,我們可以使用下面的命令對磁碟的讀取速度進行測試:

dd if=/root/testfile of=/dev/null bs=4k count=10000 iflag=direct

結果輸出:

如果我們將iflag=direct刪除,因為系統快取的原因,壓測結果會非常好,完全就是記憶體的讀取速度,如圖:

總結,在使用dd

進行壓測的過程中,系統的快取對壓測的成績影響很大,因此為了真實的還原系統磁碟的處理速度,我們需要在壓測過程中注意新增相應的iflag和oflag引數,同時還要多次測試求平均值,從而更好的反映磁碟的真實效能。

2.參考文獻

《Linux I/O Performance Tests using dd》

《Linux 中直接 I/O 機制的介紹》