使用 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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...