1. 程式人生 > >使用 dd 命令進行硬碟 I/O 效能檢測

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

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

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

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

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

使用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

輸出樣例:

Fig.01: Ubuntu Linux Server with RAID10 and testing server throughput with dd

圖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

輸出樣例:

Fig.02: Linux hdparm command to test reading and caching disk performance

圖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

蘋果OS X Unix(Macbook pro)的例子

GNU dd has many more options but OS X/BSD and Unix-like dd command need to run as follows to test real disk I/O and not memory add sync option as follows:

GNU dd命令有其他許多選項,但是在 OS X/BSD 以及類Unix中, dd命令需要像下面那樣執行來檢測去除掉記憶體地址同步的硬碟真實I/O效能:

  1. ## 執行這個命令2-3次來獲得更好地結果 ###
  2. time sh -c "dd if=/dev/zero of=/tmp/testfile bs=100k count=1k && sync"

輸出樣例:

  1. 1024+0 records in
  2. 1024+0 records out
  3. 104857600 bytes transferred in0.165040 secs (635346520 bytes/sec)
  4. real 0m0.241s
  5. user 0m0.004s
  6. sys 0m0.113s

本人Macbook Pro的寫速度是635346520位元組(635.347MB/s)。

不喜歡用命令列?

你可以在Linux或基於Unix的系統上使用disk utility(gnome-disk-utility)這款工具來得到同樣的資訊。下面的那個圖就是在我的Fedora Linux v22 VM上擷取的。

圖形化方法

點選“Activites”或者“Super”按鍵來在桌面和Activites檢視間切換。輸入“Disks”

Fig.03: Start the Gnome disk utility

圖03: 開啟Gnome硬碟工具

在左邊的面板上選擇你的硬碟,點選configure按鈕,然後點選“Benchmark partition”:

Fig.04: Benchmark disk/partition

圖04: 評測硬碟/分割槽

最後,點選“Start Benchmark...”按鈕(你可能需要輸入管理員使用者名稱和密碼):

Fig.05: Final benchmark result

圖05: 最終的評測結果

如果你要問,我推薦使用哪種命令和方法?

  • 我推薦在所有的類Unix系統上使用dd命令(time sh -c "dd if=/dev/zero of=/tmp/testfile bs=100k count=1k && sync
  • 如果你在使用GNU/Linux,使用dd命令 (dd if=/dev/zero of=/tmp/testALT.img bs=1G count=1 conv=fdatasync)
  • 確保你每次使用時,都調整了count以及bs引數以獲得更好的結果。
  • GUI方法只適合桌面系統為Gnome2或Gnome3的Linux/Unix筆記本使用者。

作者:Vivek Gite 譯者:DongShuaike 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

相關推薦

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

如何使用dd命令測試我的硬碟效能?如何在linux作業系統下檢測硬碟的讀寫速度? 你可以使用以下命令在一個Linux或類Unix作業系統上進行簡單的I/O效能測試。 dd命令 :它被用來在Linux和類Unix系統下對硬碟裝置進行寫效能的檢測。hparm命令:它用來在基於 Linux 的系統上獲取或設定

服務端I/O效能大比拼:Node、PHP、Java和Go

正如大部分存在多種解決途徑的場景一樣,重點不在於哪一種途徑更好,而是在於理解如何進行權衡。讓我們來參觀下I/O的景觀,看下可以從中竊取點什麼。 在這篇文章,我們將會結合Apache分別比較Node,Java,Go,和PHP,討論這些不同的語言如何對他們的I/O進行建模,各個模型的優點和缺點,並得出一些初步基準

磁碟I/O效能優化--磁碟陣列

  一款用於監控Linux系統資源與程序的工具,它以一定的頻率記錄系統的執行狀態,所採集的資料包含系統資源(CPU、記憶體、磁碟和網路)使用情況和程序執行情況,並能以日誌檔案的方式儲存在磁碟中,伺服器出現問題後,我們可獲取相應的atop日誌檔案進行分析。

【Linux】dd命令進行磁碟備份

運用dd命令,將/dev/sdb磁碟中所有的資料全部備份到/dev/sdc磁碟上,需要的命令如下 dd  if=/dev/sdb of=/dev/sdc bs=1024k      說明,if是需要備份的磁碟  of後面是將備份匯入的磁碟,bs=1024k這個地方的1

服務端I/O效能大比拼:Node、PHP、Java、Go

摘要:本文首先簡單介紹了I/O相關的基礎概念,然後橫向比較了Node、PHP、Java、Go的I/O效能,並給出了選型建議。以下是譯文。 瞭解應用程式的輸入/輸出(I/O)模型能夠更好的理解它在處理負載時理想情況與實際情況下的差異。也許你的應用程式很小,也

Linux磁碟I/O效能測試

磁碟效能評價指標 IOPS:(Input/Output Per Second)每秒的讀寫次數,隨機讀寫關注指標,是隨機讀寫頻繁的應用,如OLTP(Online Transaction Processing),的關鍵衡量指標。 吞吐量:(Throughput)

[Linux] 硬碟效能測試DD命令詳解

首先要了解兩個特殊的裝置: /dev/null:回收站、無底洞 /dev/zero:產生字元 Ø 測試磁碟寫能力 time dd if=/dev/zero of=/test.dbf bs=64k count=16k 因為/dev/zero是一個偽裝置,它只產生空

SQL Server 檢測到基於一致性的邏輯 I/O 錯誤 pageid不正確、數據庫日誌文 件丟失

日誌文件 科技 文件丟失 i/o 處理 企業管理 eid dbcc 無法連接 客戶名稱:深圳某科技信息有限公司 數據庫類型:sql2000 數據庫大小:20g 故障經過 電腦突然斷電,軟件就顯示某數據庫錯誤,無法連接,打開企業管理器,顯示數 據庫質疑,DBCC查詢顯示“ S

Node.js中的異步I/O是如何進行的?

ioc 而是 網絡 調用 發現 回調函數 異步調用 技術 如何 Node.js的異步I/O通過事件循環的方式實現。其中異步I/O又分磁盤I/O和網絡I/O。在磁盤I/O的調用中,當發起異步調用後,會將異步操作送進libuv提供的隊列中,然後返回。當磁盤I/O執行完成之後,會

SQL Server 檢測到基於一致性的邏輯 I/O 錯誤 pageid 不正確(應為 1:1772,但實際為 0:0)。在文件 'D:Program FilesMicrosoft SQL Ser

red 完成 sdn blank net tools ocl views 偏移 SQL Server 檢測到基於一致性的邏輯 I/O 錯誤 pageid 不正確(應為 1:1772,但實際為 0:0)。在文件 ‘D:\Program Files\Microsoft S

假定我們有3個程式,每個程式花費80%的時間進行I/O,20%的時間使用CPU

2 假定我們有3個程式,每個程式花費80%的時間進行I/O,20%的時間使用CPU,每個程式的啟動時間和其需要使用CPU進行計算機的分鐘數如表所示 程式編號      啟動時間    &nb

使用 libevent 和 libev 提高網路應用效能——I/O模型演進變化史

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux的系統呼叫 網路連線狀態 磁碟I/O 可疑行為監控/日誌收集 SHELL命令執行流程

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

當我們進行綜合和I/O佈局後會發生什麼QwQ

基於的平臺是Vivado 2018.2 本文主要以一個簡單的半加器加器(組合邏輯為例)學習vivado的綜合,I/O配置的一些內容。 本人小白,記一些自己的理解。 任務: 分析Log檔案。 佈局I/O管腳 分析兩個檢視 分析約束.xdc檔案 &nb

通過 Mach-O 檔案動態分析進行 iOS load 方法耗時檢測

背景 目前部分產品反饋啟動時間還是較慢。但目前啟動時間耗時統計方案無法統計到 main 方法之前的 load 方法耗時,無法定位耗時長的元件程式碼。 第三方方案:Hook所有+load方法(包括Category) 該方案通過 Hook 所有 Class 中的 load 方法的方式實現了 load 方法的

linux效能分析工具介紹(CPU,記憶體,磁碟I/O,網路)

一. CPU效能評估 1.vmstat [-V] [-n] [depay [count]] -V : 打印出版本資訊,可選引數 -n : 在週期性迴圈輸出時,頭部資訊僅顯示一次 delay : 兩次輸出之間的時間間隔 count : 按照delay指定的時間間隔統計

java輸入輸出效能提升(高效能I/O

在java各種輸入輸出流效能由低到高排序:      -RandomAccessFile      -其他各種輸入輸出流      -帶快取的流:BufferedInputStream,BufferedOutputStream      -記憶體對映 記憶體對映是什

Java I/O 使用位元組流/字元流進行檔案拷貝

例項 利用位元組流複製檔案 /** * 利用位元組流複製檔案 * @throws IOException */ @Test public void testByteCopy() throws IOException { InputStrea

在本地計算機無法啟動windows installer服務.錯誤997:重疊I/O操作進行

“必須填入文章內容”真討厭! 如何解決這個問題呢? 嘗試一下下面的辦法: 解決辦法:1. 單擊“開始”,單擊“執行”,鍵入 MSIEXEC /UNREGISTER,然後單擊“確定”。這時系統可能不會有任何反應,即使您的操作完全正確。 2. 單擊“開始”,單擊“執行”,鍵入 M

Linux 系統管理命令 - iotop - 動態顯示磁碟 I/O 統計資訊 iotop詳解

命令詳解 重要星級:         ★★★★☆ 功能說明:         iotop 命令是一款實時監控磁碟 I/O 的工具, 但必須以 root 使用者的身份執行。使用 iotop 命令可以很方便的檢視每個程序使用磁