互聯(lián)網(wǎng)協(xié)議 — TCP — 擁塞控制(網(wǎng)絡(luò)質(zhì)量保障)">互聯(lián)網(wǎng)協(xié)議 — TCP — 擁塞控制(網(wǎng)絡(luò)質(zhì)量保障)
1059
2022-05-28
無論是作為個人電腦的數(shù)據(jù)盤,還是在數(shù)據(jù)中心里面用作海量數(shù)據(jù)的存儲,機械硬盤仍然在被大量使用。隨著成本下降,機械硬盤還替代掉了很多傳統(tǒng)的存儲設(shè)備,如以前常用來備份冷數(shù)據(jù)的磁帶。
拆解機械硬盤
機械硬盤的IOPS大概只能做到每秒100次左右。機械硬盤拆開,自然知道為什么它的IOPS是100左右了。
硬盤的構(gòu)造,里面有接口,有對應(yīng)的控制電路版,以及實際的I/O設(shè)備(也就是我們的機械硬盤)。
一塊機械硬盤是由盤面、磁頭和懸臂三個部件組成的。
盤面(Disk Platter)
實際存儲數(shù)據(jù)的盤片。
本身通常是用的鋁、玻璃或者陶瓷這樣的材質(zhì)做成的光滑盤片。有層磁性涂層。數(shù)據(jù)就存儲在這個磁性的涂層上。
中間有個受電機控制的轉(zhuǎn)軸。控制盤面去旋轉(zhuǎn)。
硬盤的轉(zhuǎn)速5400轉(zhuǎn)的、7200轉(zhuǎn),指的就是盤面中間電機控制的轉(zhuǎn)軸的旋轉(zhuǎn)速度,英文單位叫RPM,也就是每分鐘的旋轉(zhuǎn)圈數(shù)(Rotations Per Minute)。所謂7200轉(zhuǎn),其實更準確地說是7200RPM,指的就是一旦電腦開機供電之后,我們的硬盤就可以一直做到每分鐘轉(zhuǎn)上7200圈。如果折算到每一秒鐘,就是120圈。
磁頭(Drive Head)
數(shù)據(jù)并不能直接從盤面?zhèn)鬏數(shù)娇偩€上,而是通過磁頭,從盤面上讀取到,然后再通過電路信號傳輸給控制電路、接口,再到總線。
一個盤面有兩個磁頭,分別在盤面的正反面。盤面在正反兩面都有對應(yīng)的磁性涂層來存儲數(shù)據(jù),而且一塊硬盤也不是只有一個盤面,而是上下堆疊了很多個盤面,各個盤面之間是平行的。每個盤面的正反兩面都有對應(yīng)的磁頭。
懸臂(Actutor Arm)
懸臂鏈接在磁頭上,并且在一定范圍內(nèi)會去把磁頭定位到盤面的某個特定的磁道(Track)。
磁道
一個盤面通常圓形,由很多同心圓,每個“甜甜圈”就是個磁道。每個磁道都有自己的編號。
懸臂只是控制到底讀最里面那個“甜甜圈”,還是最外面的“甜甜圈”數(shù)據(jù)。
扇區(qū)(Sector)
一個磁道,會分成一個個扇區(qū)。
柱面(Cylinder)
上下平行的一個個盤面的相同扇區(qū)叫一個柱面。
讀取數(shù)據(jù)
兩個步驟:
把盤面旋轉(zhuǎn)到某個位置
在這個位置,懸臂可定位到整個盤面的某個子區(qū)間。該子區(qū)間像塊披薩餅,叫幾何扇區(qū)(Geometrical Sector),即“幾何位置上”,所有這些扇區(qū)都可以被懸臂訪問到。
把懸臂移動到特定磁道的特定扇區(qū),即在這個“幾何扇區(qū)”里,找到實際扇區(qū)。找到后,磁頭會落下,即可讀取到正對著扇區(qū)的數(shù)據(jù)。
一次硬盤的隨機訪問所需時間
平均延時(Average Latency)
盤面旋轉(zhuǎn),把幾何扇區(qū)對準懸臂位置的時間。
和機械硬盤轉(zhuǎn)速相關(guān)。隨機情況下,平均找到一個幾何扇區(qū),需旋轉(zhuǎn)半圈盤面。
7200r硬盤,1s可旋轉(zhuǎn)240個半圈,平均延時:
1s / 240 = 4.17ms
1
平均尋道時間(Average Seek Time)
盤面選轉(zhuǎn)之后,我們的懸臂定位到扇區(qū)的的時間。我們現(xiàn)在用的HDD硬盤的平均尋道時間一般在4-10ms。
若隨機在硬盤找個數(shù)據(jù),需 8~14 ms。硬盤只有一個電機轉(zhuǎn)軸,也只有一個懸臂,所以無法并行定位或讀數(shù)據(jù)。那一塊7200r硬盤,1s隨機的I/O訪問次數(shù)就是:
1s / 8 ms = 125 IOPS 或 1s / 14ms = 70 IOPS
1
2
3
若不是隨機的數(shù)據(jù)訪問,而是順序的數(shù)據(jù)讀寫,應(yīng)如何最大化讀取效率?
順序存放的數(shù)據(jù),盡可能存放在同一柱面。這就只需旋轉(zhuǎn)一次盤面,進行一次尋道,就可寫或讀,同一個垂直空間上的多個盤面的數(shù)據(jù)。
若一個柱面上的數(shù)據(jù)不夠,也不要去動懸臂,而是通過電機轉(zhuǎn)動盤面,即可順序讀完一個磁道上的所有數(shù)據(jù)。所以,對HDD的順序數(shù)據(jù)讀寫,吞吐率還不錯,約200MB/s。
Partial Stroking:根據(jù)場景提升性能
100 IOPS,難以滿足現(xiàn)在互聯(lián)網(wǎng)海量高并發(fā)請求。所以,DB都會將數(shù)據(jù)存在SSD。
但20年前,沒有現(xiàn)在這么便宜的SSD硬盤。DB數(shù)據(jù)只能存放在HDD。
即便如今數(shù)據(jù)中心用的HDD,也是7200r,要更快隨機訪問速度,會選擇SSD。但當時,SSD非常貴,還沒能商業(yè)化。硬盤廠商們在不斷研發(fā)轉(zhuǎn)得更快的硬盤。數(shù)據(jù)中心往往用10000轉(zhuǎn),乃至15000轉(zhuǎn)的硬盤。
直到2010年,SSD開始逐步進入市場,西數(shù)還在嘗試研發(fā)20000轉(zhuǎn)硬盤。轉(zhuǎn)速更高、尋道時間更短的機械硬盤,才能滿足實際DB需求。
但10000r,乃至15000r硬盤也更貴,想節(jié)約成本,提高性價比,就得想它法。Google早年用家用PC乃至二手硬件,通過軟件層面設(shè)計解決了可靠性和性能。那有辦法提高機械硬盤的IOPS嗎?這就是Partial Stroking或者Short Stroking,“縮短行程”技術(shù)。
既然訪問一次數(shù)據(jù)的時間:“平均延時+尋道時間”,只要能縮短其一,就能提升IOPS!
一般 硬 盤 的 尋 道 時 間 > 平 均 延 時 硬盤的尋道時間 > 平均延時 硬盤的尋道時間>平均延時,如何縮短平均尋道時間?
最極端的:不需要尋道,即將所有數(shù)據(jù)都放在一個磁道。比如始終把磁頭放在最外道磁道。尋道時間就基本為0,訪問時間就只剩平均延時。
IOPS就變成:
1s / 4ms = 250 IOPS
1
但只用一個磁道,能存的數(shù)據(jù)就很有限了!可能我們還不如把這些數(shù)據(jù)直接都放到內(nèi)存呢!
所以,實踐可只用 1 / 2 1/2 1/2或 1 / 4 1/4 1/4磁道,即最外面1/4或1/2的磁道。
如此,硬盤可使用的容量可能變成1/2或1/4。但尋道時間也變成1/4或1/2,因為懸臂需移動的“行程”也變成原來1/2或者1/4,IOPS大幅提升!
比如7200r硬盤,正常平均延時4.17ms,尋道時間9ms。原本IOPS:
1s / (4.17ms + 9ms) = 75.9 IOPS
1
若只用其中1/4磁道,則IOPS變成:
1s / (4.17ms + 9ms/4) = 155.8 IOPS
1
IOPS提升一倍,和塊15000r硬盤性能差不多。但這時硬盤可用空間也只有原1/4。所以,這樣通過軟件去格式化硬盤,只保留部分磁道讓系統(tǒng)可用的情況,可大大提升硬件性價比。
總結(jié)
機械硬盤的硬件主要由:盤面、磁頭和懸臂組成。
數(shù)據(jù)在盤面上的位置,可通過磁道、扇區(qū)和柱面來定位。
實際的一次對于硬盤的訪問,需要把盤面旋轉(zhuǎn)到某一個“幾何扇區(qū)”,對準懸臂的位置。然后,懸臂通過尋道,把磁頭放到我們實際要讀取的扇區(qū)上。
受制于機械硬盤的結(jié)構(gòu),對隨機數(shù)據(jù)的訪問速度,就要包含旋轉(zhuǎn)盤面的平均延時和移動懸臂的尋道時間。通過這倆時間,能計得機械硬盤IOPS。
7200轉(zhuǎn)機械硬盤的IOPS,只能做到100。早期沒有SSD,所以想出Partial Stroking這個浪費存儲空間,但能縮短尋道時間以提高硬盤IOPS的方案。
Linux
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。