極客時間-linux性能優化 24 Linux磁盤IO是怎麼工作的?(上)

一、磁盤

機械磁盤

連續IO不需要磁道尋址,隨機IO需要不停的移動磁頭,來定位數據位置,所以讀寫速度會比較慢。

機械磁盤的最小讀寫單位是扇區,一般爲512字節

固態磁盤

不需要磁道尋址,所以不斷是連續IO還是隨機IO性能,都比機械磁盤要好。

固態磁盤的最小讀寫單位是頁,通常大小是4KB、8KB等

連續IO還可以通過預讀的方式,來減少IO請求的次數,也是其性能優異的一個原因。

 

SCSI和SATA設備會分配一個sd前綴的設備名。如果是多塊同類型的磁盤,就會按照a,b,c等的字母順序來編號。

二、磁盤的使用

1、獨立磁盤設備

磁盤還會根據需要劃分成不同的邏輯分區,每個分區再用數字編號。比如我們前面多次使用的/dev/sda,還可以分成兩個分區,/dev/sda1和/dev/sda2

 

2、多塊磁盤組合成一個邏輯磁盤,構成冗餘獨立磁盤陣列RAID

根據容量、性能、可靠性需求的不同,RAID一般可劃分爲多個級別:

RAID0:有最優的讀寫性能,但不提供數據冗餘的功能

其他級別的RAID:在提供數據冗餘的基礎上,對讀寫性能也有一定優化。

3、把磁盤組合成一個網絡存儲集羣,給服務器使用

 

在linux中磁盤實際上是作爲一個塊設備來管理的,也就是以塊爲單位來讀寫數據,並且支持隨機讀寫。

三、通用塊層

通用塊層,其實是出於文件系統和磁盤驅動之間的一個塊設備抽象層。它主要有兩個功能:

第一個功能跟虛擬文件系統的功能類似。向上,爲文件系統和應用程序,提供訪問塊設備的標準接口;向下,把各種異構的磁盤設備抽象爲統一的塊設備,並提供統一框架來管理這些設備的驅動程序。

第二個功能,通用塊層還會給文件系統和應用程序發來的IO請求排隊,並通過重新排序、請求合併等方式,提供磁盤讀寫的效率。IO請求排序的過程,就是我們熟悉的IO調度。Linux內核支持四種IO調度算法,分別是NONE、NOOP、CFQ、DeadLine

重點熟悉下CFQ,完全公平調度器,是現在很多發行版的默認IO調度器,它爲每個進程維護一個I/O調度隊列,並按照時間片來均勻分佈每個進程的IO請求。

四、IO棧 (暫時不瞭解,待日後完善)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章