Linux 磁盤IO

磁盤

不管機械磁盤,仍是固態磁盤,相同磁盤的隨機 I/O 都要比連續 I/O 慢不少。ios

  • 對機械磁盤來講,,因爲隨機 I/O 須要更多的磁頭尋道和盤片旋轉,它的性能天然要比連續 I/O 慢。
  • 而對固態磁盤來講,雖然它的隨機性能比機械硬盤好不少,但一樣存在「先擦除再寫入」的限制。隨機讀寫會致使大量的垃圾回收,因此相對應的,隨機 I/O 的性能比起連續 I/O 來,也仍是差了不少。
  • 此外,連續 I/O 還能夠經過預讀的方式,來減小 I/O 請求的次數,這也是其性能優異的一個緣由。不少性能優化的方案,也都會從這個角度出發,來優化 I/O 性能。

機械磁盤和固態磁盤還分別有一個最小的讀寫單位。性能優化

  • 機械磁盤的最小讀寫單位是扇區,通常大小爲 512 字節。
  • 而固態磁盤的最小讀寫單位是頁,一般大小是 4KB、8KB 等。
  • 常見的邏輯塊的大小是 4KB,也就是說,連續 8 個扇區,或者單獨的一個頁,均可以組成一個邏輯塊。

性能指標

  • 使用率,是指磁盤處理 I/O 的時間百分比。太高的使用率(好比超過 80%),一般意味着磁盤 I/O 存在性能瓶頸。
  • 飽和度,是指磁盤處理 I/O 的繁忙程度。太高的飽和度,意味着磁盤存在嚴重的性能瓶頸。當飽和度爲 100% 時,磁盤沒法接受新的 I/O 請求。
  • IOPS(Input/Output Per Second),是指每秒的 I/O 請求數。
  • 吞吐量,是指每秒的 I/O 請求大小。
  • 響應時間,是指 I/O 請求從發出到收到響應的間隔時間。

通用塊層

通用塊層,實際上是處在文件系統和磁盤驅動中間的一個塊設備抽象層。它主要有兩個功能 。框架

  • 第一個功能跟虛擬文件系統的功能相似。向上,爲文件系統和應用程序,提供訪問塊設備的標準接口;向下,把各類異構的磁盤設備抽象爲統一的塊設備,並提供統一框架來管理這些設備的驅動程序。
  • 第二個功能,通用塊層還會給文件系統和應用程序發來的 I/O 請求排隊,並經過從新排序、請求合併等方式,提升磁盤讀寫的效率。

I/O 棧

  • 文件系統層,包括虛擬文件系統和其餘各類文件系統的具體實現。它爲上層的應用程序,提供標準的文件訪問接口;對下會經過通用塊層,來存儲和管理磁盤數據。
  • 通用塊層,包括塊設備 I/O 隊列和 I/O 調度器。它會對文件系統的 I/O 請求進行排隊,再經過從新排序和請求合併,而後纔要發送給下一級的設備層。
  • 設備層,包括存儲設備和相應的驅動程序,負責最終物理設備的 I/O 操做。

經常使用指令

iostat 是最經常使用的磁盤 I/O 性能觀測工具,它提供了每一個磁盤的使用率、IOPS、吞吐量等各類常見的性能指標,固然,這些指標實際上來自 /proc/diskstats。工具

[root@k8s ~]# iostat -x
Linux 3.10.0-1062.4.1.el7.x86_64 (instance-010oj085) 	04/14/2020 	_x86_64_	(2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          61.25    0.04    4.63    0.31    0.02   33.76

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.01    19.52    0.15   28.93     6.36   479.70    33.42     0.15    5.23    6.05    5.23   0.48   1.39

學習筆記
整理自極客時間:《Linux性能優化實戰》性能

相關文章
相關標籤/搜索