Linux IO排程層分析 2

2021-04-25 16:40:53 字數 1138 閱讀 5195

deadline

演算法維護

5個佇列,除了請求佇列以外,演算法還使用了四個佇列。其中兩個排序佇列分別包含讀請求和寫請求,這個佇列是按照起始扇區數來排序的。另外兩個最後期限佇列包含相同的讀和寫請求,只不過它們是根據其「最後期限」排序的。這兩個佇列的目的是為了避免請求餓死。因為電梯策略優先處理與上乙個處理請求最近的請求,因而就會對摸個請求忽略很長一段時間,這時就會發生這個情況。請求的最後期限本質上就是超時定時器,當請求被傳給電梯演算法是開始計時。預設情況下,

deadline

演算法讀請求的超時時間為

500ms

,而寫請求的超時時間為

5s。也就是說,

deadline

演算法讀請求優先於寫請求,因為讀請求通常阻塞發出請求的程序。而最後期限保證了排程程式照顧等待很長一段時間的那個請求,即使它位於排序佇列的末尾。

deadline

演算法核心資料結構如下:

struct deadline_data ;

sort_list

:按照request

中的sector

號大小,把每個

request

組織在以

sort_list

為根的紅黑樹中。這樣方便快速查詢。總共有讀寫兩棵樹。

fifo_list

:按照超時先後順尋,把

request

鏈入filo_list

,同樣也是分為讀寫兩個佇列。

因此,任何乙個

request

,在未提交給裝置的請求佇列之前,都會同時存在於以上兩個結構中。

next_rq:

指向sort_list

中的下乙個請求。

batching

:排程演算法可能連續提交多個請求,

batching

用於記錄當前連續提交的

request

數目。當

batching < fifo_batch

,都可以繼續進行連續提交。

starved:

提交讀request

而造成寫飢餓的次數。如果

starved

超過writes_starved

,則需要提交寫

request

,從而避免寫飢餓。

Linux IO排程層分析 1

linux io 排程程式是塊裝置 i o子系統的主要元件,它介於通用塊層和塊裝置驅動程式之間,所圖 2 1所示。當 linux 核心元件要讀寫一些資料時,並不是請求一發出,核心便立即執行該請求,而是將其推遲執行。延遲的設定是塊裝置效能的關鍵機制!當傳輸乙個新資料塊時,核心檢查能否通過擴充套件前乙個...

Linux I O排程策略

i o scheduler的作用就是為請求佇列裡面的io請求做乙個優化,以此達到提高系統吞吐量 縮短響應時間的目的。更改i o scheduler有兩種方式 1.sys block device name queue scheduler ioscheduler sys block device na...

修改Linux IO排程器

linux系統預設提供了三種io排程方式 原來系統中預設的排程方式是deadline,下面介紹如何更改預設排程機制。通過host cat sys block sdb queue scheduler sdb是我的系統安裝磁碟 noop deadline cfqhost 可以看到預設的排程方式是dead...