問: 以下幾種方式測試磁盤讀寫速度有什么區(qū)別?
dd bs=1M count=128 if=/dev/zero of=test
dd bs=1M count=128 if=/dev/zero of=test; sync
dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync
dd bs=1M count=128 if=/dev/zero of=test oflag=dsync
答:區(qū)別在于內(nèi)存中寫緩存的處理方式。
dd bs=1M count=128 if=/dev/zero of=test
沒有加任何參數(shù),dd默認(rèn)的方式不包括“同步(sync)”命令。也就是說,dd命令完成前并沒有讓系統(tǒng)真正把文件寫到磁盤上。所以以上命令只是單純地把這128MB的數(shù)據(jù)讀到內(nèi)存緩沖當(dāng)中(寫緩存[write cache])。所以你得到的將是一個超級快的速度。因?yàn)槠鋵?shí)dd給你的只是讀取速度,直到dd完成后系統(tǒng)才開始真正往磁盤上寫數(shù)據(jù),但這個速度你是看不到了。所以如果這個速度很快,先不要偷著樂。呵呵
dd bs=1M count=128 if=/dev/zero of=test; sync
和前面1中的完全一樣。分號隔開的只是先后兩個獨(dú)立的命令。當(dāng)sync命令準(zhǔn)備開始往磁盤上真正寫入數(shù)據(jù)的時候,前面dd命令已經(jīng)把錯誤的“寫入速度”值顯示在屏幕上了。所以你還是得不到真正的寫入速度。
dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync
加入這個參數(shù)后,dd命令執(zhí)行到最后會真正執(zhí)行一次“同步(sync)”操作,所以這時候你得到的是讀取這128M數(shù)據(jù)到內(nèi)存并寫入到磁盤上所需的時間,這樣算出來的時間才是比較符合實(shí)際的。
dd bs=1M count=128 if=/dev/zero of=test oflag=dsync
加入這個參數(shù)后,dd在執(zhí)行時每次都會進(jìn)行同步寫入操作。也就是說,這條命令每次讀取1M后就要先把這1M寫入磁盤,然后再讀取下面這1M,一共重復(fù)128次。這可能是*慢的一種方式了,因?yàn)榛旧蠜]有用到寫緩存(write cache)。
問:那應(yīng)該用哪一種呢?
答:建議使用
dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync
因?yàn)檫@種方式*接近計(jì)算機(jī)實(shí)際操作,所以測出來的數(shù)據(jù)*有參考價值。
PS:
寫: dd if=/dev/zero of= bs=4096 count=1M conv=fdatasync
# 用sync不靠譜, *好還是在開機(jī)的時候把內(nèi)存設(shè)的很小, 測試文件的大小遠(yuǎn)遠(yuǎn)大于內(nèi)存才比較合理.
讀: dd if= of=/dev/zero bs=4096 count=1M iflag=direct