在Linux系統(tǒng)中經(jīng)常會(huì)使用dd命令來(lái)測(cè)試硬盤的寫(xiě)入速度,命令會(huì)涉及到兩個(gè)參數(shù):dsync與fdatasync,本文介紹一下其區(qū)別。
dd if=/dev/zero of=/tmp/1Gbytes bs=4k count=256000 oflag=dsync
dd if=/dev/zero of=/tmp/1Gbytes bs=4k count=256000 conv=fdatasync
相信上述兩個(gè)在Linux系統(tǒng)上使用dd測(cè)試磁盤INPUT性能的命令各位都看過(guò),甚至使用過(guò)。
兩個(gè)都是往硬盤中寫(xiě)入1 Gbytes的數(shù)據(jù),只是第一個(gè)的速度慢的要命。
使用dsync,dd會(huì)從/dev/zero中,每次讀取4Kbytes數(shù)據(jù),然后直接寫(xiě)入到硬盤當(dāng)中,重復(fù)此步驟,直到共讀取并且寫(xiě)入了1 Gbytes的數(shù)據(jù)。
使用fdatasync,dd會(huì)從/dev/zero中一次性讀取1 Gbytes的數(shù)據(jù),寫(xiě)入到磁盤的緩存中,然后再?gòu)拇疟P緩存中讀取,一次性寫(xiě)入到硬盤當(dāng)中。
/dev/在內(nèi)存當(dāng)中,和緩存一樣,讀取速度都非常快,因此兩種方式最終的讀取速度對(duì)最終的寫(xiě)入速度無(wú)任何影響。
換種說(shuō)法,就是此處不管有沒(méi)有的硬盤緩存,對(duì)IO都不產(chǎn)生任何影響。
那也就是說(shuō),兩種方式的主要差異就在于多步與一步。
為什么寫(xiě)入速度會(huì)有如此大的差異?
看完這個(gè)比喻,你就會(huì)明白了:
現(xiàn)在有兩輛一模一樣的車,最高行駛速度為20 M/s,加速度為5 M/s^2,分別為甲車,乙車,他們都要走直線的,1000 M的路程。
甲車每次只能走四米,達(dá)到四米就得剎車,乙車可以一次性走完一千米。
相信大家也清楚,甲車還沒(méi)加速到最高速度,就得剎車,走完這一千米需要不少時(shí)間。
而乙車,可以一直加速到其所能達(dá)到的最大速率,走完這一千米,花的時(shí)間明顯比甲少。
因此可以推斷,使用dsync,以1 Gbytes為blocksize,次數(shù)為一的方式往硬盤中寫(xiě)入1 Gbytes的數(shù)據(jù),結(jié)果將不會(huì)與dd if=/dev/zero of=/tmp/1Gbytes bs=4k count=256000 conv=fdatasync有太大的差距。