使用 Linux dd 命令測試磁碟讀寫性能

来源:https://www.cnblogs.com/it-log/archive/2023/03/25/17255853.html
-Advertisement-
Play Games

使用 Linux dd 命令測試磁碟讀寫性能 從幫助手冊中可以看出,dd命令可以複製文件,根據操作數進行轉換和格式化。我這裡記錄一下dd命令用於測試磁碟I/O性能的過程。 dd 可從標準輸入或文件中讀取數據,根據指定的格式來轉換數據,再輸出到文件、設備或標準輸出。 dd 命令用法: Usage: d ...


使用 Linux dd 命令測試磁碟讀寫性能

從幫助手冊中可以看出,dd命令可以複製文件,根據操作數進行轉換和格式化。我這裡記錄一下dd命令用於測試磁碟I/O性能的過程。

dd 可從標準輸入或文件中讀取數據,根據指定的格式來轉換數據,再輸出到文件、設備或標準輸出。

dd 命令用法:
Usage: dd [OPERAND]...
  or:  dd OPTION

dd 命令通用語法格式如下:
dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks
##參數說明:

if=文件名:輸入文件名,預設為標準輸入。即指定源文件。
of=文件名:輸出文件名,預設為標準輸出。即指定目的文件。
ibs=bytes:一次讀入bytes個位元組,即指定一個塊大小為bytes個位元組。
obs=bytes:一次輸出bytes個位元組,即指定一個塊大小為bytes個位元組。
bs=bytes:同時設置讀入/輸出的塊大小為bytes個位元組。
cbs=bytes:一次轉換bytes個位元組,即指定轉換緩衝區大小。
skip=blocks:從輸入文件開頭跳過blocks個塊後再開始複製。
seek=blocks:從輸出文件開頭跳過blocks個塊後再開始複製。
count=blocks:僅拷貝blocks個塊,塊大小等於ibs指定的位元組數。
conv=<關鍵字>,關鍵字可以有以下11種:
    conversion:用指定的參數轉換文件。
    ascii:轉換ebcdic為ascii
    ebcdic:轉換ascii為ebcdic
    ibm:轉換ascii為alternate ebcdic
    block:把每一行轉換為長度為cbs,不足部分用空格填充
    unblock:使每一行的長度都為cbs,不足部分用空格填充
    lcase:把大寫字元轉換為小寫字元
    ucase:把小寫字元轉換為大寫字元
    swap:交換輸入的每對位元組
    noerror:出錯時不停止
    notrunc:不截短輸出文件
    sync:將每個輸入塊填充到ibs個位元組,不足部分用空(NUL)字元補齊。

 

time+dd 測磁碟讀寫速度

1、先熟悉兩個特殊的設備及一些相關參數:

1) time有計時作用,dd用於複製,從if讀出,寫到of;

2) if=/dev/zero(產生字元)不產生IO,因此可以用來測試純寫速度;

3) 同理of=/dev/null(回收站、無底洞)不產生IO,可以用來測試純讀速度;

4) 將/tmp/test拷貝到/var則同時測試了讀寫速度;

5) bs是每次讀或寫的大小,即一個塊的大小,count是讀寫塊的數量。

當寫入到驅動盤的時候,我們簡單的從無窮無用位元組的源 /dev/zero 讀取,當從驅動盤讀取的時候,我們讀取的是剛纔的文件,並把輸出結果發送到無用的 /dev/null。
在整個操作過程中, dd 命令會跟蹤數據傳輸的速度並且報告出結果。

2、測試磁碟寫能力

time dd if=/dev/zero of=/testw.dbf bs=4k count=100000

因為/dev/zero是一個偽設備,它只產生空字元流,對它不會產生IO,所以,IO都會集中在of文件中,of文件只用於寫,所以這個命令相當於測試磁碟的寫能力。命令結尾添加oflag=direct將跳過記憶體緩存,添加oflag=sync將跳過hdd緩存。

3、測試磁碟讀能力

time dd if=/dev/sdb of=/dev/null bs=4k

因為/dev/sdb是一個物理分區,對它的讀取會產生IO,/dev/null是偽設備,相當於黑洞,of到該設備不會產生IO,所以,這個命令的IO只發生在/dev/sdb上,也相當於測試磁碟的讀能力。(Ctrl+c終止測試)

4、測試同時讀寫能力

time dd if=/dev/sdb of=/testrw.dbf bs=4k

在這個命令下,一個是物理分區,一個是實際的文件,對它們的讀寫都會產生IO(對/dev/sdb是讀,對/testrw.dbf是寫),假設它們都在一個磁碟中,這個命令就相當於測試磁碟的同時讀寫能力。

5、測試純寫入性能

dd if=/dev/zero of=test bs=8k count=10000 oflag=direct

6、測試純讀取性能

dd if=test of=/dev/null bs=8k count=10000 iflag=direct

註意:dd 只能提供一個大概的測試結果,而且是連續 I/O 而不是隨機 I/O,理論上文件規模越大,測試結果越準確。 同時,iflag/oflag 提供 direct 模式,direct 模式是把寫入請求直接封裝成 I/O 指令發到磁碟,非 direct 模式只是把數據寫入到系統緩存就認為 I/O 成功,並由操作系統決定緩存中的數據什麼時候被寫入磁碟。

 

操作實例

1)寫入速度

首先我們將文件寫入固態硬碟

# dd if=/dev/zero of=./largefile bs=1M count=1024
1M的大小實際上是相當大的。你可以嘗試用更小的尺寸如 64K 甚至是 4K 的。

2)讀取速度

現在讀回這個文件。但是,得首先清除記憶體的緩存,以確保這個文件確實是從驅動盤讀取的。

運行下麵的命令來清除記憶體緩存

# sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

現在讀取此文件

# dd if=./largefile of=/dev/null bs=4k

參考鏈接:https://www.cnblogs.com/sylar5/p/6649009.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文已收錄至Github,推薦閱讀 👉 Java隨想錄 微信公眾號:Java隨想錄 摘要 Redis是一款性能強勁的記憶體資料庫,但是在使用過程中,我們可能會遇到Big Key問題,這個問題就是Redis中某個key的value過大,所以Big Key問題本質是Big Value問題,導致Redis ...
  • 9 月 15 日,Figma 的 CEO Dylan Field 發佈消息:今天,Figma 宣佈接受 Adobe 的收購... Adobe 以約 200 億美元收購 Figma,這也是 Adobe 該公司在其歷史上的最大一筆收購。那是什麼樣的魔力,讓 Figma 被 Adobe 收購呢?下麵以定位 ...
  • 實現Redis的database層(核心層:處理命令並返回) https://github.com/csgopher/go-redis 本文涉及以下文件: dict:定義字典的一些方法 sync_dict:實現dict db:分資料庫 command:定義指令 ping,keys,string:指令 ...
  • Antlr4 簡介 ANTLR(全名:ANother Tool for Language Recognition)是基於LL(*)演算法實現的語法解析器生成器(parser generator),用Java語言編寫,使用自上而下(top-down)的遞歸下降LL剖析器方法。由舊金山大學的Terence ...
  • 導入的文件 前端點擊上傳得到文件(MultipartFile file 【這裡是存放的臨時文件】) 本人前端用的vue3,elementui, 導入按鈕代碼 <!--導入文件 --> <el-col :span="1.5"> <el-button type="info" plain icon="el ...
  • 如題,很簡單,就是先用chardet 庫識別文件編碼,解碼之後再輸出成目標編碼。算是個偶爾能用上的小工具,要用的時候萬一沒有就很難受的那種,比如,網上下載了別人的項目文件,一打開全是亂碼…… 代碼 加了比較詳細的註釋~~ 看懂的要求應該不高,平時用過Python,知道幾個常用庫就行。 from pa ...
  • TIDB簡介 什麼是TIDB TiDB 是一個分散式 NewSQL 資料庫。它支持水平彈性擴展、ACID 事務、標準 SQL、MySQL 語法和 MySQL 協議,具有數據強一致的高可用特性,是一個不僅適合 OLTP 場景還適合 OLAP 場景的混合資料庫。 TiDB 是 PingCAP 公司自主設 ...
  • 在前面的設計和實現中,我們的微服務開發平臺通過JustAuth來實現第三方授權登錄,通過集成公共組件,著實減少了很多工作量,大多數的第三方登錄直接通過配置就可以實現。而在第三方授權登錄中,微信小程式授權登錄和APP微信授權登錄是兩種特殊的第三方授權登錄。 JustAuth之所以能夠將多種第三方授權登 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...