您无法在 Kubuntu 19.04 中选择 CFQ 调度程序,因为它已从 5.0 内核中删除。就我而言,我需要 CFQ,因为当我以 Windows 10 作为客户机运行虚拟机时,它为我的旋转硬盘提供了最佳性能,因此,其他调度程序会使系统无法使用。默认情况下,Kubuntu 19.04 在安装中仅提供 2 个电梯 mq-deadline,而在我看来,没有电梯提供比 CFQ 差得多的性能。
sudo cat/sys/block/sda/queue/scheduler mq-deadline none
我只需要尝试另外 2 个默认情况下不会出现在安装中的调度程序,这些调度程序是 BFQ 和 Kyber。
接下来我将介绍如何启用 BFQ 和 Kyber 模块
1)首先使用以下命令验证模块是否存在于系统中:
sudo modprobe bfq sudo modprobe kyber-iosched
如果没有错误,你可以使用命令验证模块是否已加载
sudo cat/sys/block/sda/queue/scheduler
必须返回
mq-deadline [bfq] kyber none
2)使这些模块随系统启动而加载:
sudo -i echo kyber-iosched > /etc/modules-load.d/kyber-oisched.conf echo bfq > /etc/modules-load.d/bfq.conf
3)下一步是告诉系统使用哪个调度程序,如果不存在则创建一个文件:
/etc/udev/rules.d/60-scheduler.rules
使用以下几行
# set cfq scheduler
ACTION=="add|change",KERNEL=="sd[a-z]",ATTR{queue/rotational}=="1",ATTR{queue/scheduler}="bfq"
ACTION=="add|change",KERNEL=="sr[0-9]",ATTR{queue/rotational}=="1",ATTR{queue/scheduler}="bfq"
如果您想尝试 kyber 而不是 BFQ,请将“bfq”行的最后一个单词替换为“kyber”
4)让系统识别变化
sudo udevadm 控制--重新加载;sudo udevadm 触发器
并通过以下方式验证更改
sudo cat/sys/block/sda/queue/scheduler
mq-deadline kyber [bfq] none
完成的。
资料来源:
https://community.chakralinux.org/t/how-to-enable-the-bfq-io-scheduler-on-kernel-4-12/6418
https://unix.stackexchange.com/questions/375600/how-to-enable-and-use-the-bfq-scheduler#376136
答案1
根据您的内核版本,CFQ 可能已消失。它已从内核 5.0 中删除。这是相关提交组。
答案2
Ubuntu 19.04 使用 5.0 内核,因此 CFQ 和 Deadline 不再可用。
对于大多数工作负载,即使是在 HDD 上,使用 mq-deadline 调度程序与使用任何旧调度程序一样高效。只有对于只有顺序磁盘读写且没有任何其他干扰的工作负载,旧调度程序才会更快。
答案3
在旧式笔记本电脑上,使用普通的老式旋转硬盘,当其他任务在后台访问磁盘时,BFQ 对于拥有响应系统至关重要。以前,Ubuntu 通用内核使用 cfq:
$ zgrep IOSCHED /boot/config-*-generic
...
/boot/config-4.13.0-36-generic:CONFIG_DEFAULT_IOSCHED="cfq"
升级后,原版 Ubuntu 内核已删除 CFQ(见上文),我发现了以下默认设置:
$ cat /sys/block/sda/queue/scheduler
[mq-deadline] none
由于后台磁盘活动导致的极端滞后,这是不可接受的。我认为在具有 SDD/NVMe 大容量存储的现代硬件上,这个问题要小得多。
正如 OP 所说,切换到 bfq 可以解决滞后问题。
马可·甘贝罗尼