linux用dd測試磁碟速度例子

來源:互聯網
上載者:User

首先要瞭解兩個特殊的裝置:

/dev/null:資源回收筒、無底洞
/dev/zero:產生字元
Ø 測試磁碟寫能力

time dd if=/dev/zero of=/test.dbf bs=8k count=300000

因為/dev//zero是一個偽裝置,它只產生Null 字元流,對它不會產生IO,所以,IO都會集中在of檔案中,of檔案只用於寫,所以這個命令相當於測試磁碟的寫能力。
Ø 測試磁碟讀能力

time dd if=/dev/sdb1 of=/dev/null bs=8k

因為/dev/sdb1是一個物理分區,對它的讀取會產生IO,/dev/null是偽裝置,相當於黑洞,of到該裝置不會產生IO,所以,這個命令的IO只發生在/dev/sdb1上,也相當於測試磁碟的讀能力。
Ø 測試同時讀寫能力

time dd if=/dev/sdb1 of=/test1.dbf bs=8k

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

下面直接介紹幾種常見的DD命令,先看一下他的區別~

dd bs=64k count=4k if=/dev/zero of=test
dd bs=64k count=4k if=/dev/zero of=test; sync
dd bs=64k count=4k if=/dev/zero of=test conv=fdatasync
dd bs=64k count=4k if=/dev/zero of=test oflag=dsync

這四條DD命令區別在於記憶體中寫緩衝的處理方式。

1.

dd bs=64k count=4k if=/dev/zero of=test

  沒有加任何參數,dd預設的方式不包括“同步(sync)”命令。也就是說,dd命令完成前並沒有讓系統真正把檔案寫到磁碟上。所以以上命令只是單純地把這128MB的資料讀到記憶體緩衝當中(寫緩衝[write cache])。所以你得到的將是一個超級快的速度。因為其實dd給你的只是讀取速度,直到dd完成後系統才開始真正往磁碟上寫資料,但這個速度你是看不到了。所以如果這個速度很快,沒有什麼作用。

實際運行結果:

268435456 bytes (268 MB) copied, 1.3529 seconds, 198 MB/s

2.

dd bs=64k count=4k if=/dev/zero of=test; sync

  和前面1中的完全一樣。分號隔開的只是先後兩個獨立的命令。當sync命令準備開始往磁碟上真正寫入資料的時候,前面dd命令已經把錯誤的“寫入速度”值顯示在螢幕上了。所以你還是得不到真正的寫入速度。

實際運行結果:

268435456 bytes (268 MB) copied, 0.522815 seconds, 513 MB/s

3.

dd bs=64k count=4k if=/dev/zero of=test conv=fdatasync

  加入這個參數後,dd命令執行到最後會真正執行一次“同步(sync)”操作,所以這時候你得到的是讀取這128M資料到記憶體並寫入到磁碟上所需的時間,這樣算出來的時間才是比較符合實際使用結果的。

實際運行結果:

268435456 bytes (268 MB) copied, 2.8046 seconds, 95.7 MB/s

4.

dd bs=64k count=4k if=/dev/zero of=test oflag=dsync

  加入這個參數後,dd在執行時每次都會進行同步寫入操作。也就是說,這條命令每次讀取64k後就要先把這64k寫入磁碟,然後再讀取下面這64k,一共重複128次。這可能是最慢的一種方式了,因為基本上沒有用到寫緩衝(write cache)。

實際運行結果:

268435456 bytes (268 MB) copied, 3.40069 seconds, 78.9 MB/s

  一般來說,第四種方法是最嚴格的,可以類比資料庫的插入操作,所以很慢,也是用來測試vps硬碟效能標準的一條標杆,一般來說測試結果,如果超過10M,對正常建站就無影響。超過50M,就是非常給力狀態,看了這個vps硬碟效能非常的好,DD速度達到了78.9MB/s。

  在這幾條命令中,bs=64k表示同時讀入/輸出的塊大小為64k個位元組,count=4k表示拷貝塊的個數為4000個,如果測試再嚴格一點,我們運行1G資料量的DD:

dd if=/dev/zero of=test bs=64k count=16k oflag=dsync

表示每個塊大小為64k個位元組,測試16k個數量的塊,實際測試結果:

1073741824 bytes (1.1 GB) copied, 18.9098 seconds, 56.8 MB/s

  寫到這裡,我覺得利用DD命令測試硬碟應該很清楚了,通常我們測試用第四條命令即可,當然DD越快並不能代表格服務器的效能好壞,普通硬碟的伺服器執行DD命令結果在30M左右就不錯了,另外,執行DD命令測試硬碟IO效能,對硬碟的損害很大,不建議多次或長時間嘗試!

例子

首先要瞭解兩個特殊的裝置:
/dev/null:資源回收筒、無底洞
/dev/zero:產生字元

 

time有計時作用,dd用於複製,從if讀出,寫到of。if=/dev/zero不產生IO,因此可以用來測試純寫速度。同理of=/dev/null不產生IO,可以用來測試純讀速度。bs是每次讀或寫的大小,即一個塊的大小,count是讀寫塊的數量。

測/data目錄所在磁碟的純寫速度:

[root@nagios ~]# time dd if=/dev/zero of=/var/test bs=8k count=1000000
1000000+0 records in
1000000+0 records out
8192000000 bytes (8.2 GB) copied, 52.5749 seconds, 156 MB/s

real 0m55.841s
user 0m0.507s
sys 0m15.706s

##紅色部分是因為使用了time命令才顯示的,因此需要time命令來計算複製的時間。

測/data目錄所在磁碟的純讀速度:

[root@nagios ~]# time dd if=/var/test of=/dev/null bs=8k
1000000+0 records in
1000000+0 records out
8192000000 bytes (8.2 GB) copied, 49.0088 seconds, 167 MB/s

real 0m49.025s
user 0m0.559s
sys 0m6.383s

測讀寫速度:

[root@nagios ~]# time dd if=/dev/zeroof=/tmp/test bs=64k
125000+0 records in
125000+0 records out
8192000000 bytes (8.2 GB) copied, 129.239 seconds, 63.4 MB/s

real 2m9.251s
user 0m0.114s
sys 0m21.494s

看來這個測試結果還不錯,嘿嘿

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.