磁盤
不管機械磁盤,仍是固態磁盤,相同磁盤的隨機 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 棧
![](http://static.javashuo.com/static/loading.gif)
- 文件系統層,包括虛擬文件系統和其餘各類文件系統的具體實現。它爲上層的應用程序,提供標準的文件訪問接口;對下會經過通用塊層,來存儲和管理磁盤數據。
- 通用塊層,包括塊設備 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性能優化實戰》性能