Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux IO 調度器深度解析:cfq、deadline、noop 原理與調優

編輯:Linux 教學

Linux IO 子系統七層架構

從 read()/write() 系統調用視角,IO 棧分七層:

  1. VFS 層:虛擬文件系統,屏蔽具體文件系統差異,提供統一接口
  2. 文件系統層:ext4、xfs、btrfs 等具體實現
  3. 頁緩存層:基於頁的緩存管理
  4. 通用塊層:塊設備抽象層,統一 Block IO 請求格式
  5. IO 調度層:本文核心,實現電梯算法,優化磁盤尋道
  6. 塊設備驅動層:驅動程序接口
  7. 塊設備層:物理設備(HDD/SSD/NVMe)

Linux IO 架構圖

查看修改調度器

核心問題:機械硬盤尋道優化

機械硬盤順序讀寫吞吐高,隨機尋道延遲大。IO 調度器的目標:將隨機 IO 轉化為順序 IO,減少磁頭移動,提升整體吞吐與響應平衡。經典「電梯算法」思想:磁頭單向移動時,順便處理路過磁道的請求。

三大調度器對比

調度器全稱核心策略適用場景
noopNo Operation無排序,單純 FIFO 隊列,僅做基礎合並SSD、NVMe、虛擬化環境(由上層/硬體調度)
deadlineDeadline I/O Scheduler四隊列:讀/寫按扇區排序 + 超時隊列按時間排序,防餓死數據庫、高 IOPS 負載、需低延遲保證場景
cfqCompletely Fair Queuing按進程公平分配時間片,支持優先級、cgroup 隔離桌面、通用服務器、多租戶公平共享

注意:noop 實質無調度;cfq 為內核長期默認;deadline 針對延遲敏感優化;舊有 anticipatory (as) 已移除。

cfq:完全公平隊列調度 深度剖析

設計哲學:進程級公平

公平對象是進程。衡量 IO 佔用用兩指標:帶寬(MB/s)與 IOPS(次/秒)。順序 IO 低 IOPS 高帶寬,隨機 IO 高 IOPS 低帶寬。cfq 認為分配相等的磁盤服務時間最公平,不管你佔用帶寬還是 IOPS。

核心數據結構

  • cfq_data:調度器全局上下文
  • cfq_group:對應 cgroup,維護 7 棵 service_tree(紅黑樹),按 vdisktime(虛擬磁盤時間)排序,時間少者優先調度
  • service_tree 分類:SYNC(同步順序)、SYNC_NOIDLE(同步隨機)、ASYNC(異步寫)× RT/BE/IDLE 三優先級
  • cfq_queue:每進程一個請求隊列,按服務時間紅黑樹排序

service_tree 結構

異步隊列結構

調度流程

  1. 選擇 vdisktime 最小的 cgroup(紅黑樹)
  2. 按優先級選 service_tree:RT > BE > IDLE
  3. 在 service_tree 中選服務時間最短的 cfq_queue
  4. 處理隊列請求:按扇區序紅黑樹取請求,超時轉 deadline 機制防餓死

SSD 檢測到時禁用 idling(空轉等待),所有請求走 SYNC_NOIDLE。

關鍵參數調優(/sys/block/sdX/queue/iosched/)

cfq 參數列表

  • slice_idle:idling 時間(預設 8ms),SSD 設 0
  • quantum:單次調度最大請求數(預設 8)
  • group_idle:cgroup 級 idling
  • low_latency:啟用低延遲模式(預設 1)

deadline:最終期限調度

四隊列設計

  • Read/Write 排序隊列:按扇區號升序,合並順序 IO,提高吞吐
  • Read/Write 超時隊列:按請求創建時間排序,超時(預設讀 500ms、寫 5s)請求移入,優先調度,防餓死

適用場景

數據庫(MySQL/PostgreSQL)、高併發寫入、對讀延遲敏感業務。echo deadline > /sys/block/sda/queue/scheduler 即時切換。

選型建議

場景推薦調度器理由
機械硬盤桌面/通用服務器cfq進程公平,體驗均衡
數據庫主庫、高 IOPS 業務deadline低延遲、防餓死、順序合並
SSD/NVMe、虛擬機客體noop / none (multi-queue)硬體/上層已優化,內核無需干預
高併發讀多寫少deadline讀請求優先級高

現代內核(5.0+)引入 blk-mq 多隊列框架,調度器架構大變,bfq (Budget Fair Queueing) 成為新默認選項,但上述原理仍具參考價值。

Copyright © Windows教程網 All Rights Reserved