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
- linux 系統IO 排程Linux
- 程式排程演算法Linux程式排程演算法演算法Linux
- 轉:linux io排程深入分析Linux
- MySQL優化--IO排程演算法優化MySql優化演算法
- linux之 修改磁碟排程演算法Linux演算法
- Linux核心排程分析(程式排程)Linux
- 排程器簡介,以及Linux的排程策略Linux
- MySQL資料庫環境如何調整磁碟IO排程演算法MySql資料庫演算法
- Linux C 的程式排程Linux
- linux程式排程Linux
- Linux程式設計:模擬程式排程演算法Linux程式設計演算法
- 作業系統(Linux)--按優先數排程演算法實現處理器排程作業系統Linux演算法
- Linux CFS中的程式排程Linux
- Linux程式排程策略Linux
- linux 任務排程Linux
- LINUX(十三)Linux程式排程Linux
- 程式排程的原理和演算法探析演算法
- 任務排程的並行演算法並行演算法
- LVS排程演算法演算法
- 2.2.5排程演算法:時間片輪轉、優先順序排程、多級反饋排程演算法
- linux搶佔式排程Linux
- Linux I/O排程器Linux
- Linux 程式排程淺析Linux
- Linux 組排程淺析Linux
- MySQL 8.0 | CATS排程演算法的效能提升MySql演算法
- Flink排程之排程器、排程策略、排程模式模式
- 磁軌排程演算法介紹演算法
- 電梯排程演算法簡述演算法
- 演算法系列:電梯排程演算法
- 作業系統排程演算法作業系統演算法
- 從框架作者角度聊:React排程演算法的迭代過程框架React演算法
- 如何更改Linux的I/O排程器Linux
- 【I/O scheduler】Linux的磁碟排程策略Linux
- Hadoop作業的三種排程演算法Hadoop演算法
- Linux 定時任務排程Linux
- 作業系統之排程演算法作業系統演算法
- 程式排程演算法之先到先服務演算法