Linux-Kernel

如何啟用和使用 BFQ 調度程序?

  • January 20, 2022

我剛剛使用 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 的好建議noopdeadline

Paolo 的比較:https ://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be

保存它,然後重新載入並觸發udev rules

sudo udevadm control --reload
sudo udevadm trigger

引用自:https://unix.stackexchange.com/questions/375600