linux 2.6的IO排程演算法
IO子系統架構
呼叫流程大致如下:
使用者程式write()--> 檔案系統層(page cache/bio)--pdflush--> block層(IO排程器/IO請求佇列) --> 裝置驅動(SCSI) --> 磁碟
當程式執行write操作時,先寫入page cache,由檔案系統層負責將連續的塊組成bio,並將其傳送給block層;
bio是連線檔案系統層和block層的介面;
linux 2.6提供4種IO排程演算法:
NOOP--全稱No Operation
採用FIFO,在此基礎上還實現了相鄰IO請求合併;
該演算法假定IO請求到達之前已經由驅動裝置做了最佳化,因此無需在做額外工作;
最簡便的演算法實現,適用於SSD和fusion IO
CFQ--全稱completely fair queuing,2.6.18成為預設選項;
為每個程式維護一個佇列,按照IO請求的地址排序(而非FIFO),輪詢處理,每次處理4個請求;
可以節省大量的磁碟尋道時間,對於傳統的磁碟比較有益,但有可能會出現餓死的情況;
很適合OLTP DB應用;
Deadline scheduler--
在CFQ的基礎上,解決了飢餓等待的問題;
除了程式IO,引入了讀IO和寫IO(FIFO),其中讀IO最大等待時間500ms,寫IO為5s,其優先順序均高於CFQ,
FIFO(read) > FIFO(write) > CFQ
比較適用於隨機IO請求
anticipatory scheduler
本質與deadline一致,但在每次讀操作後需等待6ms,如果期間收到相鄰位置的讀請求則立即滿足,對以隨機IO請求為主的環境可能會造成比較大的延時;
其目的是為了照顧順序IO
檢視當前的IO排程演算法
dmesg | grep -i scheduler
每個磁碟可使用不同的演算法
cat /sys/block/sda/queue/scheduler
echo "cfq" > /sys/block/sda/queue/scheduler
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-757290/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux IO排程方法Linux
- MySQL優化--IO排程演算法優化MySql優化演算法
- linux之 修改磁碟排程演算法Linux演算法
- 如何選擇IO排程器
- 排程器簡介,以及Linux的排程策略Linux
- linux程式排程Linux
- cpu的排程演算法演算法
- MySQL資料庫環境如何調整磁碟IO排程演算法MySql資料庫演算法
- LVS排程演算法演算法
- linux搶佔式排程Linux
- Linux I/O排程器Linux
- 如何更改Linux的I/O排程器Linux
- 程式排程的原理和演算法探析演算法
- 任務排程的並行演算法並行演算法
- Linux 定時任務排程Linux
- 2.2.5排程演算法:時間片輪轉、優先順序排程、多級反饋排程演算法
- Flink排程之排程器、排程策略、排程模式模式
- MySQL 8.0 | CATS排程演算法的效能提升MySql演算法
- Linux程序排程器-CPU負載Linux負載
- LInux實驗 : 程式排程模擬Linux
- Linux Shell指令碼時間排程Linux指令碼
- 磁軌排程演算法介紹演算法
- 從框架作者角度聊:React排程演算法的迭代過程框架React演算法
- WhaleStudio 2.6重磅釋出!排程模組WhaleScheduler更新78項核心功能
- Linux排程器:程序優先順序Linux
- 程式排程演算法之先到先服務演算法
- 作業系統之排程演算法作業系統演算法
- 網路io排詢
- 從零開始入門 K8s | 排程器的排程流程和演算法介紹K8S演算法
- MySQL 8.0 —— CATS事務排程演算法的效能提升MySql演算法
- linux的IO模型Linux模型
- 【IO】Linux下的五種IO模型Linux模型
- Pod的排程是由排程器(kube-scheduler)
- Linux 中 Laravel 任務排程不執行LinuxLaravel
- Linux程式排程邏輯與原始碼分析Linux原始碼
- verilog的RR輪詢排程演算法的程式碼實現演算法
- linux中設定程式排程的優先順序別Linux
- Yarn的排程器Yarn
- 【作業系統】4.程序排程演算法作業系統演算法