首頁 > 軟體

使用 dd 命令進行硬碟 I/O 效能檢測

2020-06-16 17:54:11

如何使用dd命令測試我的硬碟效能?如何在linux作業系統下檢測硬碟的讀寫速度?

你可以使用以下命令在一個Linux或類Unix作業系統上進行簡單的I/O效能測試。

  • dd命令 :它被用來在Linux和類Unix系統下對硬碟裝置進行寫效能的檢測。
  • hparm命令:它用來在基於 Linux 的系統上獲取或設定硬碟引數,包括測試讀效能以及快取效能等。

在這篇指南中,你將會學到如何使用dd命令來測試硬碟效能。

Linux/UNIX: 使用 dd 命令建立 1GB 大小的二進位制  http://www.linuxidc.com/Linux/2014-12/110147.htm

Linux系統中使用 DD 命令測試 USB 和 SSD 硬碟的讀寫速度  http://www.linuxidc.com/Linux/2014-08/105880.htm

Linux dd 命令的簡單介紹  http://www.linuxidc.com/Linux/2011-01/31645.htm

使用dd命令來監控硬碟的讀寫效能:

  • 開啟shell終端。
  • 或者通過ssh登入到遠端伺服器。
  • 使用dd命令來測量伺服器的吞吐率(寫速度) dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync
  • 使用dd命令測量伺服器延遲 dd if=/dev/zero of=/tmp/test2.img bs=512 count=1000 oflag=dsync

 

理解dd命令的選項

在這個例子當中,我將使用搭載Ubuntu Linux 14.04 LTS系統的RAID-10(配有SAS SSD的Adaptec 5405Z)伺服器陣列來執行。基本語法為:

  1. dd if=/dev/input.file of=/path/to/output.file bs=block-size count=number-of-blocks oflag=dsync
  2. ## GNU dd語法 ##
  3. dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync
  4. ##另外一種GNU dd的語法 ##
  5. dd if=/dev/zero of=/tmp/testALT.img bs=1G count=1 conv=fdatasync

輸出樣例:

圖01: 使用dd命令獲取的伺服器吞吐率

請各位注意在這個實驗中,我們寫入一個G的資料,可以發現,伺服器的吞吐率是135 MB/s,這其中

  • if=/dev/zero (if=/dev/input.file) :用來設定dd命令讀取的輸入檔名。
  • of=/tmp/test1.img (of=/path/to/output.file):dd命令將input.file寫入的輸出檔案的名字。
  • bs=1G (bs=block-size) :設定dd命令讀取的塊的大小。例子中為1個G。
  • count=1 (count=number-of-blocks):dd命令讀取的塊的個數。
  • oflag=dsync (oflag=dsync) :使用同步I/O。不要省略這個選項。這個選項能夠幫助你去除caching的影響,以便呈現給你精準的結果。
  • conv=fdatasyn: 這個選項和oflag=dsync含義一樣。

在下面這個例子中,一共寫了1000次,每次寫入512位元組來獲得RAID10伺服器的延遲時間:

  1. dd if=/dev/zero of=/tmp/test2.img bs=512 count=1000 oflag=dsync

輸出樣例:

  1. 1000+0 records in
  2. 1000+0 records out
  3. 512000 bytes (512 kB) copied,0.60362 s,848 kB/s

請注意伺服器的吞吐率以及延遲時間也取決於伺服器/應用的負載。所以我推薦你在一個剛剛重新啟動過並且處於峰值時間的伺服器上來執行測試,以便得到更加準確的度量。現在你可以在你的所有裝置上互相比較這些測試結果了。

 

為什麼伺服器的吞吐率和延遲時間都這麼差?

低的數值並不意味著你在使用差勁的硬體。可能是硬體 RAID10的控制器快取導致的。

使用hdparm命令來檢視硬碟快取的讀速度。

我建議你執行下面的命令2-3次來對裝置讀效能進行檢測,以作為參照和相互比較:

  1. ### 有快取的硬碟讀效能測試——/dev/sda ###
  2. hdparm -t /dev/sda1
  3. ## 或者 ##
  4. hdparm -t /dev/sda

然後執行下面這個命令2-3次來對快取的讀效能進行對照性檢測:

  1. ## Cache讀基準——/dev/sda ###
  2. hdparm -T /dev/sda1
  3. ## 或者 ##
  4. hdparm -T /dev/sda

或者乾脆把兩個測試結合起來:

  1. hdparm -Tt/dev/sda

輸出樣例:

圖02: 檢測硬碟讀入以及快取效能的Linux hdparm命令

請再次注意,由於檔案檔案操作的快取屬性,你將總是會看到很高的讀速度。

 

使用dd命令來測試讀取速度

為了獲得精確的讀測試資料,首先在測試前執行下列命令,來將快取設定為無效:

  1. flush
  2. echo 3| sudo tee /proc/sys/vm/drop_caches
  3. time time dd if=/path/to/bigfile of=/dev/null bs=8k 

筆電上的範例

執行下列命令:

  1. ### 帶有Cache的Debian系統筆電吞吐率###
  2. dd if=/dev/zero of=/tmp/laptop.bin bs=1G count=1 oflag=direct
  3. ###使cache失效###
  4. hdparm -W0 /dev/sda
  5. ###沒有Cache的Debian系統筆電吞吐率###
  6. dd if=/dev/zero of=/tmp/laptop.bin bs=1G count=1 oflag=direct

更多詳情見請繼續閱讀下一頁的精彩內容http://www.linuxidc.com/Linux/2015-08/122370p2.htm


IT145.com E-mail:sddin#qq.com