大話存儲 2 - 磁盤原理與技術詳解


磁盤大致由盤片、讀寫頭、馬達、底座、電路板等幾大項組合而成。

磁頭運行時距離磁盤表面的高度由下圖可以隨意感受一下:

NewImage

1 磁盤上的數據組織

磁盤在邏輯上被划分為磁道、柱面以及扇區。

啟停區:每個盤片的每個面都有一個讀寫磁頭,磁頭期初停在盤片的最內圈,即線速度最小的地方。這是一個特殊區域,它不存放任何數據。

0磁道:在最外圈,離主軸最遠的地方是0磁道,硬盤數據的存放就是從最外圈開始的。有一個0磁道檢測器,由它來完成硬盤的初始定位。

0磁道存放着用於操作系統啟動所必需的程序代碼,因為PC啟動后BIOS程序在加載任何操作系統或其他程序,總是默認從磁盤的0磁道讀取程序代碼來運行。

 

扇區

扇區的結構如下圖所示

NewImage

 

扇區:將每個環形磁道等距離切割,形成等長度的圓弧,每個圓弧就是一個扇區。

每個扇區可以存放512B的數據和一些其他信息。

一個扇區有兩個主要部分:存儲數據地點的標識符和存儲數據的數據段。

扇區頭標:扇區頭標包括組成扇區三級地址的三個數字

  • 扇區所在的柱面(磁道)
  • 磁頭編號
  • 扇區在磁道上的位置,即扇區號

柱面、磁頭和扇區三者簡稱CHS,所以扇區的地址又稱為CHS地址。

現在CHS編址方式已經不再使用,而轉為LBA編址方式。

LBA地址:LBA編址方式不再划分柱面和磁頭號,這些數據由磁盤自身保留,而磁盤對外提供的地址全部為線性的地址,即LBA地址。

所謂線性,指的是把磁盤想象成只有一個磁道,這個磁道是無限長的直線,扇區為這條直線上的等長線段,從1開始順序編號,直到無限遠。這種方式屏蔽了柱面、磁頭這些復雜的東西。

某個LBA地址到底對應着哪個磁道上的哪個扇區,這種對應關系保存在磁盤控制電路的ROM芯片中,磁盤初始化的時候載入緩存匯總以便隨時查詢。

磁盤的IO單位

單位:磁盤讀寫都是以扇區為最小尋址單位的。也就是說不可能往某某扇區的前半部分寫入某某數據。

一次IO:對於磁盤來說,一次磁頭的連續讀或者寫叫做一次IO。

性能瓶頸:磁盤的讀寫是通過盤片的轉動實現的,相對於盤片的轉動而言,步進(換道速度)的速度就慢多了,所以制約磁盤性能的主要因素就是這個步進速度,也就是尋道速度。

目前磁盤的平均尋道速度最高可以達到5ms多,不同磁盤的尋道速度不同,普通IDE磁盤可能會超過10ms。

SCSI接口協議:專門用於計算機和其外設交互數據的一套接口系統。

2 磁盤相關技術

2.1 無序傳輸技術

目的:提高磁盤性能

無序傳輸:控制器發出一條指令要求讀取某些扇區中的內容,磁盤可以不從數據所在的初始扇區開始讀,而是采取就近原則。比如,磁盤恰好處於待讀取數據的尾部幾個扇區,磁盤按照能讀多少就讀多少的原則,在尾部時就先讀取尾部的數據,然后立即發給控制器,控制器立即通過DMA數據放到內存,等磁盤旋轉到數據塊頭部扇區時再讀取剩余的部分。這樣做避免了“旋轉延遲”。

通過指令排隊和無序傳輸可以最大化利用磁盤資源。

 

2.2 磁頭掃描方式

  1. FCFS:First Come First Serve,磁頭完全按照IO進入的先后順序執行尋道操作。
  2. SSTF:Shortest Seek Time First,控制器會優先讓磁頭跳到離當前磁頭位置最近的一個IO磁道去讀寫。
  3. SCAN:回旋掃描模式,類似於電梯模型,從一端到另一端,然后折返,如果當前隊列中有某個磁道的IO在等待,就停下處理,否則不再該磁道停留。優點是不會餓死任何IO。
  4. C-SCAN:單向掃描模式,磁頭總是從內圈向外圈掃描,達到外圈之后迅速返回內圈,返回途中不接受任何IO。
  5. LOOK:智能監察掃描模式,相對於SCAN模式的區別在於,磁頭不必達到內外圈終點后才折返,而只要完成最兩端的IO即可折返。
  6. C-LOOK:智能監察單向掃描模式。

 掃描模式的選擇:

 1 負載不高的情況下,SSTF模式可以獲得最佳的性能

 2 高負載條件下,SCAN或者C-SCAN,C-LOOK模式更為合適,可以防止造成某些較遠的IO餓死的問題。

 

2.3 磁盤緩存

緩存的作用:用於接收指令和數據,還被用來進行預讀。

磁盤緩存時刻處於打開狀態。

“禁用”緩存:並非真的關閉緩存,而是磁盤收到寫入指令和數據后,必須先將其寫入盤片,然后才向控制器返回成功信號,這樣就相當於禁用了緩存,但是實際上,指令和數據首先到達的一定是緩存。

強制盤片訪問:FUA指令,Force Unit Access,對於寫操作,磁盤必須將受到的數據寫入盤片才返回成功信號,也就是進行write through。對於讀操作,磁盤受到指令后,直接去盤片上讀數據,不搜索緩存。

 

2.4 影響磁盤性能的因素

影響磁盤性能的因素包括以下幾種:

  1. 轉速:影響磁盤連續IO時吞吐性能的首要因素。
  2. 尋到速度:影響磁盤隨機IO性能的首要因素。
  3. 單碟容量:間接因素。
  4. 接口速度:最不重要的因素。目前的接口速度在理論上都已經滿足了磁盤所能達到的最高外部傳輸帶寬。

 

3 SCSI磁盤接口

凡是作為一個通信協議,就可以按照OSI模型來將其划分層次。

划分了層次之后,我們可以把這個協議進行分解,提取每個層次的功能和各個層次之間的接口,從而可以將這個協議融合到其他協議之中,來適應各種不同的環境。

SCSI的全稱是Small Computer System Interface,即小型計算機系統接口,具備多種類型的外設通信能力。 

需要:一塊相當於CPU的SCSI的控制器,對SCSI設備進行控制,減少了對CPU的負擔。

4 磁盤控制器、磁盤驅動器和他們的驅動程序(控制電路)

磁盤控制器

  • 參與底層的總線初始化,仲裁等過程,以及指令傳輸過程、指令傳輸狀態機、重傳、ACK確認等,將這些泰國底層的機制過濾掉,從而向驅動程序提供一種簡潔的幾口。
  • 驅動程序只要將要讀寫的設備號、起始地址等信息,也就是指令描述塊傳遞給控制器即可,控制器接收指令並做相應動作,將執行后的結果信號返回給驅動程序。

磁盤驅動器控制電路

磁盤驅動器控制電路位於磁盤驅動器上,專門負責直接驅動磁頭臂做運動來讀寫數據

磁盤控制器位於主板上,專門用來向磁盤驅動器控制電路發送指令,從而控制磁盤驅動器讀寫數據。

整個流程如下:

  1. SCSI或者ATA執行指令(即CDB),是由OS內核的磁盤控制器驅動程序生成的
  2. CPU將CDB通過主板導線發送給同樣處於主板上的磁盤控制器
  3. 磁盤控制器繼而通過線纜將指令發送給磁盤驅動器
  4. 磁盤驅動器解析收到的指令從而根據指令的要求來控制磁頭臂

下圖表示了磁盤空氣驅動程序、磁盤控制器和磁盤驅動器控制電路三者之間的關系

NewImage

操作系統初始化過程中,和磁盤相關的流程

操作系統還沒有啟動起來加載磁盤控制器驅動的時候,是怎么訪問磁盤的呢?

因為,CPU必須執行磁盤控制器驅動程序才能產生指令,進而才能讀寫磁盤數據。

所以,系統BIOS可以加載一個簡化版的磁盤控制器驅動程序。

操作系統初始化時,通過執行這個驅動程序,會向系統BIOS報告控制器所掌管的磁盤設備的情況。

最后BIOS通過執行驅動程序,使得CPU可以發送對應的讀指令,提取磁盤的0磁道的第一個扇區中的代碼載入內存執行,從而加載OS。

Queue Depth

再介紹一個影響磁盤性能的概念,叫做Queue Depth

在上面的介紹中,我們會默認理解,磁盤控制器向存儲設備發起的指令,是一條一條順序發送的。

而實際上,這些指令是一批一批地發送的,存儲目標設備批量執行IO。

在IO比較少的時候,處理一條指令和同時處理多條指令將會耗費幾乎相同的時間。

Queue Depth決定了批量指令處理的最大條數。

隨着Queue Depth的增加,IO延遲也會隨機增加。

 

5 小結

這一章,主要介紹了磁盤原理,影響磁盤性能的一些因素。

通過對這些基本原理和概念的理解,不僅了解了磁盤是如何工作的,在遇到底層應用程序的性能問題時,也提供了另外一種思路來定位問題,即對IO讀寫性能的分析,來定位性能問題。

再啰嗦幾句,雖然目前存儲這個工作方向很有意思,也很有挑戰,但是存儲這個方向,更多偏向的是穩定,沒有很多fancy的功能開發,所以個人覺得對新人來說,並不是很好的鍛煉方向。

最近也愈發對工作分配不滿意,更多做的是支持、調查問題之類的沒有挑戰又費時的工作,可能會考慮換個方向試試吧。

 

參考資料

《大話存儲2-存儲系統架構與底層原理極限剖析》 

4 磁盤控制器、磁盤驅動器和他們的驅動程序(控制電路)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM