我不在Ubuntu中,但是我在Fedora中所做的可能会为您提供帮助。
BFQ是blk-mq(多队列块IO队列机制)调度程序,因此您需要在启动时启用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和non 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可能比noop
or deadline
调度程序更好,这也是将其用于SSD的一个很好的建议。
保罗的比较:https : //www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be
保存它,然后重新加载并触发udev rules
:
sudo udevadm control --reload
sudo udevadm trigger