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