1. 程式人生 > >DD測試磁碟讀寫速度

DD測試磁碟讀寫速度

1
2
3
4

dd bs=1M count=128 if=/dev/zero of=test 
dd bs=1M count=128 if=/dev/zero of=testsync 
dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync
dd bs=1M count=128 if=/dev/zero of=test oflag=dsync

答:區別在於記憶體中寫快取的處理方式。
1.

dd bs=1M count=128 if=/dev/zero of=test

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

dd bs=1M count=128 if=/dev/zero of=testsync

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

dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync

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

dd bs=1M count=128 if=/dev/zero of=test oflag=dsync

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

問:那應該用哪一種呢?
答:建議使用

dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync

因為這種方式最接近計算機實際操作,所以測出來的資料最有參考價值。

轉自:http://blog.csdn.net/xrb66/article/details/7180919