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操作)。direct
和dsync
比較類似,direct
在dsync
的基礎上不使用系統的快取。
可以對小檔案進行多次讀取來測試磁碟的延遲,例如:
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