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