在過(guò)去的30年中,硬盤一直是存儲(chǔ)的主力,在未來(lái)的15年甚至更長(zhǎng)時(shí)間內(nèi),可以預(yù)計(jì)硬盤仍然是大容量存儲(chǔ)的主力。只有理解了硬盤的性能,才能明白存儲(chǔ)能提供什么樣的性能。
要從應(yīng)用程序角度理解硬盤的存取速度,就必須理解硬盤是如何工作的,硬盤的數(shù)據(jù)存儲(chǔ)在一個(gè)圓盤的表面,圓盤不停的旋轉(zhuǎn),磁頭在上面讀取,這就象唱片一樣,不同的是唱片是螺旋線,而磁盤保存數(shù)據(jù)的磁道是同心圓。要讀取硬盤不同位置的數(shù)據(jù),磁頭就必須來(lái)回移動(dòng),這叫尋道,和磁頭在一個(gè)磁道上順序讀取數(shù)據(jù)比,磁頭尋道的速度是很慢的。要明白這點(diǎn)非常重要,假如你要自編應(yīng)用程序讀寫海量數(shù)據(jù),這是非常關(guān)鍵的。
我來(lái)舉例說(shuō)明下,對(duì)一個(gè)典型的7200RPM硬盤,平均尋道時(shí)間可能是8.9ms,也就是說(shuō)磁頭平均要花8.9ms的時(shí)間才能移動(dòng)到磁盤表面的任意磁道,但是且慢,磁頭移動(dòng)到了正確的磁道并不等于你的數(shù)據(jù)正好到了磁頭下面可以讀,磁頭還需等待平均是磁盤旋轉(zhuǎn)一圈周期的一半時(shí)間才能讀到想要的數(shù)據(jù),對(duì)7200RPM來(lái)說(shuō),每秒120圈,這就是4.2ms,這就是說(shuō)磁頭平均移動(dòng)讀一次至少要8.9+4.2=14.1ms,1秒鐘只能讀70次,當(dāng)然假如你不是對(duì)全盤任意位置讀取數(shù)據(jù),而只是限定在開(kāi)頭的比如1/10容量的分區(qū)隨機(jī)存取,那樣平均尋道時(shí)間會(huì)短不少,但4.2ms平均等待時(shí)間是不變的(如果用NCQ這方面會(huì)有所改善,這里不討論),所以1秒鐘隨機(jī)存取次數(shù)也不會(huì)超過(guò)150次(典型的10K硬盤工作時(shí)次數(shù)也不超過(guò)250次/秒)。假如我們每次只讀4KB的數(shù)據(jù),那隨機(jī)訪問(wèn)你每秒鐘只能讀0.6MB/s的數(shù)據(jù),或者假如你的數(shù)據(jù)庫(kù)內(nèi)容沒(méi)有緩存入內(nèi)存,你每秒只能讀不到150條記錄,這和7200RPM硬盤典型的66~33MB/s持續(xù)傳輸速率比,落差無(wú)異是十分巨大的。
早期的硬盤每個(gè)磁道的容量都是一樣的,大概是為了解碼電路工作在固定頻率上吧,現(xiàn)在的磁盤采用可變的磁道容量,所以越靠外面的磁道容量越大,目前典型的7200RPM硬盤傳輸率在66到33MB/s之間變化,這個(gè)最大速率取決于磁道的線密度,磁道的最大半徑,轉(zhuǎn)速,而磁道的最小半徑?jīng)Q定了最低速率。10K的硬盤一般采用比3.5寸盤小一點(diǎn)的3.3寸盤,半徑小了些,同時(shí)由于最小半徑與最大半徑的比值比7200的盤大,面積進(jìn)一步縮小,所以同樣的線密度下容量會(huì)少不少,而傳輸速率增加則沒(méi)有40%這么高,典型比如最大80Mb/s。15K的盤速度更高,尺寸更小,一般是2.5寸的,所以同樣的線密度的情況下持續(xù)傳輸率并不會(huì)有什么明顯的增加,而容量又小了很多,當(dāng)然如果還是3.5寸的,那增加還是不少的。
高速盤的主要優(yōu)點(diǎn)是縮短了隨機(jī)存取的時(shí)間,這個(gè)是隨轉(zhuǎn)速和盤徑的減小直線增長(zhǎng)的,15K盤和7200比幾乎能增加一倍,缺點(diǎn)是昂貴和單盤存儲(chǔ)容量的下降。如果你期望增加持續(xù)傳輸率的話,磁盤陣列應(yīng)該是更好的解決方案。大部分應(yīng)用程序工作在隨機(jī)存取和持續(xù)傳輸之間,所能期望得到的速率就取決于讀取數(shù)據(jù)的方式。簡(jiǎn)單的說(shuō),假如一個(gè)盤比另外一個(gè)盤,隨機(jī)尋道時(shí)間和平均等待時(shí)間降低了30%,平均傳輸速率增加了30%,那不管什么應(yīng)用,磁盤速度都可以說(shuō)提高了30%,如果兩邊的性能增長(zhǎng)不是這么平衡,那改善的效果就取決于應(yīng)用讀數(shù)數(shù)據(jù)的方式更趨向于隨機(jī)還是順序存取了。
對(duì)于自用的PC,建議用戶劃分小的操作系統(tǒng)分區(qū)(8~12G),把需要快速存取的文件盡量放在硬盤靠前(靠外道)的位置,而把備份和不常訪問(wèn)的數(shù)據(jù)放在末尾的分區(qū),這個(gè)傳輸速率差異還是很大的。
接下來(lái)要說(shuō)緩存了,緩存分硬盤內(nèi)緩存和硬盤外緩存,盤外緩存又分存儲(chǔ)的緩存和主機(jī)的緩存。盤內(nèi)緩存有些盤外緩存不具備的優(yōu)點(diǎn),就是對(duì)磁道的數(shù)據(jù)預(yù)取,磁頭不光讀你指定位置的數(shù)據(jù),也會(huì)自動(dòng)讀之前和之后的數(shù)據(jù),假如OS沒(méi)有預(yù)取的功能,盤內(nèi)的預(yù)取就有明顯的優(yōu)點(diǎn),而且不傳輸不必要的數(shù)據(jù)因此不占用傳輸通道。基于這種考慮,我認(rèn)為磁盤的緩存起碼要足夠存儲(chǔ)幾個(gè)磁道的數(shù)據(jù),以一個(gè)7200的盤計(jì)算,最外面每秒66MB數(shù)據(jù),而每秒轉(zhuǎn)120轉(zhuǎn),因此一個(gè)磁道大概也就是0.5MB,這樣看,2MB的緩存起碼能存4個(gè)磁道的數(shù)據(jù),也還差不多了,因此把緩存增加到16MB通常情況下是不會(huì)有太大效益的。我的意思并不是說(shuō)16MB的緩存毫無(wú)用處,其實(shí)現(xiàn)在內(nèi)存這么便宜我認(rèn)為個(gè)個(gè)硬盤都該配這么大緩存,只是廠家為了差異化故意搞出這些差異,但是你要對(duì)16MB期望太高那是不現(xiàn)實(shí)的。硬盤外緩存,如果只是讀而言,同樣的容量存儲(chǔ)的緩存不會(huì)比主機(jī)的緩存更有優(yōu)勢(shì),除非是很多主機(jī)共享讀同樣的文件,但就寫而言,如果存儲(chǔ)的緩存帶電池備份,可以在實(shí)際硬盤沒(méi)有寫完前就通知主機(jī)的應(yīng)用程序已經(jīng)寫完畢,性能上的提高有可能是很大的。
下面簡(jiǎn)略的說(shuō)一次RAID陣列的速度和磁盤速度的關(guān)系,RAID0用分片存儲(chǔ)方式把數(shù)據(jù)分布在兩個(gè)盤或更多盤上,讀寫持續(xù)傳輸速率會(huì)增加一倍,隨機(jī)讀寫速度按理論是有可能增加的,這取決于數(shù)據(jù)分片大小和讀寫的大小,不過(guò)總的來(lái)說(shuō)很值得懷疑;硬件RAID1的隨機(jī)和持續(xù)寫速率和單個(gè)硬盤是完全一樣的,但讀的話由于可以從兩個(gè)硬盤隨意選一個(gè)讀,隨機(jī)讀性能會(huì)有明顯的增加,可能至2倍,至于持續(xù)讀取速率理論上有可能增加,不過(guò)我很懷疑有這方面的優(yōu)化,估計(jì)還是一樣的;RAID5由于寫要N+1個(gè)盤一起寫,所以隨機(jī)讀寫速率和單個(gè)硬盤是一樣的(或者更差),而持續(xù)讀寫速率按理論是單個(gè)硬盤的N倍,不過(guò)我也遇到過(guò)還不如RAID1的情況,這怎么說(shuō)呢?沒(méi)法說(shuō)了。
最后說(shuō)下IDE、ATA、SATA、SCSI、FC等這些傳輸通道,我知道我說(shuō)這些肯定是會(huì)有爭(zhēng)議的。既然現(xiàn)在的傳輸通道速率已經(jīng)遠(yuǎn)遠(yuǎn)的超過(guò)了硬盤的持續(xù)傳輸速率,還要這些更高的速度有什么必要呢?我只能這樣看,這不是完全沒(méi)必要的,更高的速率能減輕通道的擁塞,讓緩存中的數(shù)據(jù)更快傳輸,也許還能減低主機(jī)的CPU占用率什么的。但正如這些懷疑論者所想,存儲(chǔ)的性能根本上是由硬盤決定的,其它這些外圍的東西只能起有限的提高,不能起決定作用。
另外再多嘴說(shuō)下硬盤的可靠性,很多用戶會(huì)想當(dāng)然的認(rèn)為他們花幾倍價(jià)錢買來(lái)的硬盤肯定是更可靠的。就我的經(jīng)驗(yàn),實(shí)際的情況不是這樣,我所遇到的硬盤損壞比例服務(wù)器和存儲(chǔ)專用硬盤明顯高于普通消費(fèi)級(jí)別硬盤,幾年前這點(diǎn)還很明顯,近幾年可能是由于硬盤可靠性普遍提高,兩方面的例子都變少了,不太好下結(jié)論了。簡(jiǎn)單的說(shuō),硬盤廠家把最先進(jìn)的技術(shù)同時(shí)用于專用硬盤和消費(fèi)硬盤,甚至可能由于保守的緣故消費(fèi)級(jí)別硬盤先采用新技術(shù);專用硬盤轉(zhuǎn)速更快,發(fā)熱更高,同樣的技術(shù)水平更容易壞;消費(fèi)級(jí)別硬盤出貨量遠(yuǎn)遠(yuǎn)高于專業(yè)硬盤,故障更有可能暴露出來(lái),我想這是最重要的因素。當(dāng)然我不否認(rèn)采用更好的軸承等技術(shù),專用硬盤可能有更好的壽命,(但是我所接觸的環(huán)境PC機(jī)也常常24小時(shí)運(yùn)行,特別是幾年前),但不管怎么說(shuō)專業(yè)硬盤的可靠性絕對(duì)不可能是消費(fèi)級(jí)別硬盤的價(jià)格倍數(shù)。
寫的很匆忙,必定有很多錯(cuò)漏之處,歡迎指正!
訂正下,上面的文字就不動(dòng)了。
“RAID5由于寫要N+1個(gè)盤一起寫,所以隨機(jī)讀寫速率和單個(gè)硬盤是一樣的(或者更差)”
這段我對(duì)RAID5的存儲(chǔ)方式理解有錯(cuò)誤,讀不是要N+1個(gè)盤一起讀,所以每秒隨機(jī)讀次數(shù)在并發(fā)IO的情況下能有很大提高。
感謝冬瓜頭指出!
[ 本帖最后由 wdqwdq 于 2006-12-28 18:41 編輯 ]