天天看點

linux I/O排程層總結

現代計算機體系中,機械磁盤是主要儲存設備。機械磁盤的通路是瓶頸,主要因為尋道時間長。是以作業系統會根據尋道進行一定優化,在linux系統彙總,i/o排程層就做這個處理的。

因為i/o時間主要花費在尋道上,是以盡量減少尋道時間。通過合并i/o請求和i/o排程算法。

合并i/o請求:merge操作,如果多個i/o在同一個sector中,或者是相鄰sector。把多個請求合并為同一個或一個相鄰的sectors的請求。減少尋道指令。

 i/o排程算法:通過算法減少機械臂轉動。

尋道操作類似于升降電梯,是以最初的算法就是被稱作電梯算法也叫掃描(scan)算法。下列實際應用的算法中deadline scheduler和anticipatory scheduler使用了電梯算法為基礎,根據某些任務情況作一定調整。

早期linux的i/o排程算法,包括merge和電梯尋道。

特點:類比電梯運作,也就是順向截車的原則。即機械臂一定向相同方向掃描完所有請求的磁道,再換個方向運作,反複循環。

優點:減少尋道時間。

缺點:沒有處理請求饑餓,如果某個磁道中一直有請求占用着,會影響某些請求及時響應。

為了解決linus電梯中請求饑餓的問題,産生了deadline scheduler算法。

特點:繼承linus電梯的辦法,增加了特殊情況的處理。即增加了讀請求隊列和寫請求隊列的帶逾時fifo隊列,當讀和寫請求的隊列中的請求逾時,會優先處理這些請求,減緩請求饑餓的情況,讀請求優先級高于寫請求。

優點:緩解請求饑餓情況。

缺點:犧牲一些全局吞吐量。

在deadline scheduler基礎上優化了順序請求的情況。

特點:繼承deadline scheduler算法,在處理完一個i/o請求之後會等待6ms(預設),如果此時有目前扇區相鄰的請求,則直接處理這個請求。等待時間結束後才會去處理原本的下一個請求。

優點:當系統大量存在順序請求時,節約大量的尋道時間。

缺點:每次i/o完成後,都需要6ms的延時。

完全公平隊列算法,目前linux系統預設排程算法

特點:按照優先級分組,優先處理高優先級。主要算法為時間片輪片。類似分時作業系統的程序排程。

優點:高優先級的響應及時,也不會産生通路餓死情況。

無操作排程算法,就是什麼都不操作,除了merge操作。

特點:低cpu使用率。因為沒啥算法。适合于無尋道的儲存設備,比如ssd,flash等。

優點:适合随機通路。

<code>1</code>

<code>dmesg|</code><code>grep</code> <code>-i scheduler  </code><code>#檢視系統支援的排程算法</code>

<code>2</code>

<code>cat</code> <code>/sys/block/</code><code>&lt;dev&gt;</code><code>/queue/scheduler</code>     <code>#檢視磁盤的目前排程算法</code>

<code>3</code>

<code>echo</code> <code>排程算法名稱 &gt; </code><code>/sys/block/</code><code>&lt;dev&gt;</code><code>/queue/scheduler</code>

固态硬碟發展讓noop成為未來趨勢。

機械硬碟時期,電梯算法有着最好的尋道,但任務總歸有一定優先級的,是以單純的電梯算法并不适用。

目前預設的cfq算法采用了時間片輪訓,類似于程序排程。相比之下,程序排程的算法比i/o排程算法要複雜些,但看得出目前主流都是使用了時間片輪詢。

繼續閱讀