對于I/O的性能測試,基本都是用dd開始的,dd 是 Linux/UNIX 下的一個非常有用的命令,作用是用指定大小的塊拷貝一個文件,并在拷貝的同時進行指定的轉換。它是缺省的工具,也是最簡單的工具,但是沒有并行化,對于SSD不友好。
接著進階的就是IOmeter,在SSD出現之前,IOmeter基本可以滿足大部分工作,除了他的Linux版本的I/O generator在早期的時候對Linux的Direct I/O的支持不好。
之后,就是Fio的出現,在目前所有的性能測試工具中,Fio生成一個IO請求的代價是最小的。
1 dd命令測試方法
1.1參數說明
| if=file | 輸入文件名,缺省為標準輸入 | 
| of=file | 輸出文件名,缺省為標準輸出 | 
| ibs=bytes | 一次讀入 bytes 個字節(即一個塊大小為 bytes 個字節) | 
| obs=bytes | 一次寫 bytes 個字節(即一個塊大小為 bytes 個字節) | 
| bs=bytes | 同時設置讀寫塊的大小為 bytes ,可代替 ibs 和 obs | 
| cbs=bytes | 一次轉換 bytes 個字節,即轉換緩沖區大小 | 
| skip=blocks | 從輸入文件開頭跳過 blocks 個塊后再開始復制 | 
| seek=blocks | 從輸出文件開頭跳過 blocks 個塊后再開始復制(通常只有當輸出文件是磁盤或磁帶時才有效) | 
| count=blocks | 僅拷貝 blocks 個塊,塊大小等于 ibs 指定的字節數 | 
| conv=conversion[,conversion…] | 用指定的參數轉換文件 | 
| iflag=FLAGS | 指定讀的方式FLAGS,參見“FLAGS參數說明” | 
| oflag=FLAGS | 指定寫的方式FLAGS,參見“FLAGS參數說明” | 
 
1.2 測試磁盤寫能力
| dd if=/dev/zero of=/opt/iotest bs=4k count=100000 | 
 
因為/dev/zero是一個偽設備,它只產生空字符流,對它不會產生IO,所以,IO都會集中在of文件中,of文件只用于寫,所以這個命令相當于測試磁盤的寫能力。命令結尾添加oflag=direct將跳過內存緩存,添加oflag=sync將跳過hdd緩存。
1.3 測試磁盤讀能力
dd if=/dev/sdb of=/dev/null bs=4k
因為/dev/sdb是一個物理分區,對它的讀取會產生IO,/dev/null是偽設備,相當于黑洞,of到該設備不會產生IO,所以,這個命令的IO只發生在/dev/sdb上,也相當于測試磁盤的讀能力。
1.4 測試同時讀寫能力
time dd if=/dev/sdb of=/testrw.dbf bs=4k
在這個命令下,一個是物理分區,一個是實際的文件,對它們的讀寫都會產生IO(對/dev/sdb是讀,對/testrw.dbf是寫),假設它們都在一個磁盤中,這個命令就相當于測試磁盤的同時讀寫能力。
1.5 測試純寫入性能
登錄后復制
dd if=/dev/zero of=test bs=8k count=10000 oflag=direct
1.
1.6、測試純讀取性能
dd if=test of=/dev/null bs=8k count=10000 iflag=direct
1.
注意:dd 只能提供一個大概的測試結果,而且是連續 I/O 而不是隨機 I/O,理論上文件規模越大,測試結果越準確。 同時,iflag/oflag 提供 direct 模式,direct 模式是把寫入請求直接封裝成 I/O 指令發到磁盤,非 direct 模式只是把數據寫入到系統緩存就認為 I/O 成功,并由操作系統決定緩存中的數據什么時候被寫入磁盤。
-----------------------------------
Linux 中用 dd 命令來測試硬盤讀寫速度
//blog.51cto.com/moerjinrong/2286323
 
 
 
1.1 主要選項
指定數字的地方若以下列字符結尾乘以相應的數字:
b=512, c=1, k=1024, w=2, xm=number m
 
參數       說明
if=file     輸入文件名,缺省為標準輸入
of=file    輸出文件名,缺省為標準輸出
ibs=bytes      一次讀入 bytes 個字節(即一個塊大小為 bytes 個字節)
obs=bytes     一次寫 bytes 個字節(即一個塊大小為 bytes 個字節)
bs=bytes 同時設置讀寫塊的大小為 bytes ,可代替 ibs 和 obs
cbs=bytes     一次轉換 bytes 個字節,即轉換緩沖區大小
skip=blocks   從輸入文件開頭跳過 blocks 個塊后再開始復制
seek=blocks  從輸出文件開頭跳過 blocks 個塊后再開始復制(通常只有當輸出文件是磁盤或磁帶時才有效)
count=blocks 僅拷貝 blocks 個塊,塊大小等于 ibs 指定的字節數
conv=conversion[,conversion…] 用指定的參數轉換文件
iflag=FLAGS   指定讀的方式FLAGS,參見“FLAGS參數說明”
oflag=FLAGS 指定寫的方式FLAGS,參見“FLAGS參數說明”
1.2 conv 轉換參數:
-----------------------------------
Linux 中用 dd 命令來測試硬盤讀寫速度
//blog.51cto.com/moerjinrong/2286323
 
 
 
FIO測試方法
1、安裝fio
  在fio官網下載fio-2.1.10.tar文件,解壓后./configure、make、make install之后就可以使用fio了。
2、fio參數詳解
| filename=/dev/emcpowerb | 支持的文件系統或者設備,-filename=/dev/sda2或-filename=/dev/sdb | 
| direct=1 | 測試過程繞過機器自帶的buffer,使測試結果更真實 | 
| rw=randwread | 測試隨機讀的I/O | 
| rw=randwrite | 測試隨機寫的I/O | 
| rw=randrw | 測試隨機混合寫和讀的I/O | 
| rw=read | 測試順序讀的I/O | 
| rw=write | 測試順序寫的I/O | 
| rw=rw | 測試順序混合寫和讀的I/O | 
| bs=4k | 單次io的塊文件大小為4k | 
| bsrange=512-2048 | 指定數據塊的大小范圍 | 
| size=5g | 本次的測試文件大小為5g,以每次4k的io進行測試 | 
| numjobs=30 | 本次的測試線程為30 | 
| runtime=1000 | 測試時間為1000秒,如果不寫則一直將5g文件分4k每次寫完為止 | 
| ioengine=psync | io引擎使用pync方式 | 
| rwmixwrite=30 | 在混合讀寫的模式下,寫占據30% | 
| group_reporting | 關于顯示結果的,匯總每個進程的信息 | 
| lockmem=1g | 只使用1g內存進行測試 | 
| zero_buffers | 用0初始化系統buffer | 
| nrfiles=8 | 每個進程生成文件的數量 |