I/O調度器

算法 Linux Flash 數據庫 linux內核 2019-05-01

Linux 2.6以後的內核包含4個I/O調度器, 它們分別是Noop I/O調度器、 Anticipatory I/O調度器、 Deadline I/O調度器與CFQ I/O調度器。 其中, Anticipatory I/O調度器算法已經在2010年從內核中去掉了。

Noop I/O調度器是一個簡化的調度程序, 該算法實現了一個簡單FIFO隊列, 它只進行最基本的合併, 比較適合基於Flash的存儲器。

Anticipatory I/O調度器算法推遲I/O請求, 以期能對它們進行排序, 獲得最高的效率。 在每次處理完讀請求之後,不是立即返回, 而是等待幾個微秒。 在這段時間內, 任何來自臨近區域的請求都被立即執行。 超時以後, 繼續原來的處理。

Deadline I/O調度器是針對Anticipatory I/O調度器的缺點進行改善而得來的, 它試圖把每次請求的延遲降至最低,該算法重排了請求的順序來提高性能。 它使用輪詢的調度器, 簡潔小巧, 提供了最小的讀取延遲和尚佳的吞吐量, 特別適合於讀取較多的環境(比如數據庫) 。

CFQ I/O調度器為系統內的所有任務分配均勻的I/O帶寬, 提供一個公平的工作環境, 在多媒體應用中, 能保證音、 視頻及時從磁盤中讀取數據。

內核4.0-rc1block目錄中的noop-iosched.c、 deadline-iosched.c和cfq-iosched.c文件分別實現了IOSCHED_NOOP、IOSCHED_DEADLINE和IOSCHED_CFQ調度算法。 as-iosched.c這個文件目前已經不再存在。 當前情況下, 默認的調度器是CFQ。

可以通過給內核添加啟動參數, 選擇所使用的I/O調度算法, 如:

kernel elevator=deadline

也可以通過類似如下的命令, 改變一個設備的調度器:

echo SCHEDULER > /sys/block/DEVICE/queue/scheduler

相關推薦

推薦中...