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