歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> 《Linux內核設計與實現》學習筆記——I/O調度算法

《Linux內核設計與實現》學習筆記——I/O調度算法

日期:2017/3/1 11:44:36   编辑:Linux內核

I/O調度子系統用於調度來自多個進程對塊設備的I/O請求。

電梯調度

首先,如果隊列中已存在一個對相鄰磁盤扇區操作的請求,那麼新請求將和這個已經存在的請求合並為一個請求。

2.如果隊列中存在一個駐留時間過長的請求,那麼新請求將被插入到隊列尾部,以防止其他舊的請求發生饑餓。

3.如果隊列中以扇區方向為序存在合適的插入位置,那麼新的請求將被插入到該位置,保證隊列中的請求是以被訪問磁盤物理位置為序進行排序的。

4.如果隊列中不存在合適的請求插入位置,請求將被插入到隊列尾部。

最後期限IO調度

在最後期限I/O調度程序中,每個請求都有一個超時時間。默認情況下,讀請求的超時時間是500ms,寫請求的超時時間是5s。

最後期限IO調度請求類似與linux電梯,也以磁盤物理位置為次序維護請求隊列,這個隊列被稱為排序隊列。當一個新請求遞交給排序隊列時,最後期限IO調度程序類似於linux電梯,合並和插入請求,

最後期限I/O調度程序同時也會以請求類型為依據將它們插入到額外隊列中。讀請求按次序被插入到特定的讀FIFO隊列中,寫請求被插入到特定的寫FIFO隊列中。

預測IO調度程序

基礎就是最後期限IO調度程序。最主要的改進是它增加了預測啟發能力。

它的不同之處在於讀操作提交後並不直接返回處理其他請求,而是會有意空閒片刻。這空閒的幾秒鐘,對應用程序來說是個提交其他讀請求的好機會—–任何對相鄰磁盤位置操作的請求都會立刻得到處理。(基於實際發生情況統計效果好)

完全公正的排隊I/O調度程序

完全公正的排隊I/O調度程序(Complete Fair Queuing,簡稱CFQ)是為了專有工作負荷設計的。CFQI/O調度程序把進入的I/O請求放入特定的隊列中,這種隊列是根據引起I/O請求的進程組織的。在每個隊列中,剛進入的請求與相鄰的請求合並在一起,並進行插入分類,隊列由此按扇區方式能分類。CFQI/O調度程序的差異在於每一個提交I /O請求的進程都有自己的隊列。

CFQI/O調度程序以時間片輪轉調度隊列,從每個隊列中選取請求數(默認是4),然後進行下一輪調度。

I/O調度程序實現在drivers/block/cfq-iosched.c中。

Copyright © Linux教程網 All Rights Reserved