如何啟用和使用 BFQ 調度程序?
我剛剛使用 ukuu(Ubuntu 核心更新實用程序https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility)在 Ubuntu 17.04 上安裝了 Linux 核心版本 4.12。
問題是,當我檢查可用的 I/O 調度程序時,我似乎找不到 BFQ 或 Kyber I/O 調度程序:
cat /sys/class/block/sda/queue/scheduler > noop deadline [cfq]
那麼如何使用這個 Linux 版本中的新調度程序之一呢?
我不在 Ubuntu 中,但我在 Fedora 中所做的可能會對您有所幫助。
BFQ 是一個 blk-mq (Multi-Queue Block IO Queuing Mechanism) 調度程序,所以你需要在啟動時啟用 blk-mq,編輯你的 /etc/default/grub 文件並添加
scsi_mod.use_blk_mq=1
到你的GRUB_CMDLINE_LINUX
,這是我的 grub 文件,如一個例子:GRUB_TIMEOUT=3 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=false GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="quiet vt.global_cursor_default=0 scsi_mod.use_blk_mq=1" GRUB_DISABLE_RECOVERY="true"
之後,您必須更新您的 grub。在 Fedora 上我們必須使用
sudo grub2-mkconfig -o /path/to/grub.cfg
,這取決於引導方法。在 Ubuntu 上,您可以簡單地執行:sudo update-grub
重新啟動,如果你得到這個:
cat /sys/block/sda/queue/scheduler [mq-deadline] none
可能您的核心是使用BFQ 作為模組編譯的,Kyber 也可能是這種情況。
sudo modprobe bfq sudo cat /sys/block/sda/queue/scheduler [mq-deadline] bfq none
您可以在引導時通過添加
/etc/modules-load.d/bfq.conf
包含bfq
.需要注意的是,啟用 blk_mq 會導致無法使用非 blk_mq 調度程序,因此您將失去 noop cfq 和非 mq 截止日期
顯然 blk_mq 調度系統不支持 grub 中的電梯標誌,可以使用 udev 規則代替,並提供更細粒度的控制。
/etc/udev/rules.d/60-scheduler.rules
如果不存在則創建並添加:ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"
如此處所指出的,如果需要,您可以使用屬性在 udev 規則中區分旋轉 (HDD) 和非旋轉 (SSD) 設備
ATTR{queue/rotational}
。請注意,BFQ 開發人員 Paolo Valente 在 LinuxCon Europe 中指出,在低延遲保證方面,BFQ 可能是比調度程序更好的選擇,這也是將其用於 SSD 的好建議noop
。deadline
Paolo 的比較:https ://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be
保存它,然後重新載入並觸發
udev rules
:sudo udevadm control --reload sudo udevadm trigger