Ubuntu 有ionice
,但据我所知,它完全没有任何作用。
我怀疑这是因为Ubuntu 用截止日期替换了 cfq 并且截止日期不支持优先级。
有没有办法在 Ubuntu 上优先考虑 I/O?
编辑:上下文是我有一个数据库还原,它很容易消耗我所有的 I/O 并使我的系统在完成之前无法使用。我希望它可以继续用于其他任务。
Ubuntu 有ionice
,但据我所知,它完全没有任何作用。
我怀疑这是因为Ubuntu 用截止日期替换了 cfq 并且截止日期不支持优先级。
有没有办法在 Ubuntu 上优先考虑 I/O?
编辑:上下文是我有一个数据库还原,它很容易消耗我所有的 I/O 并使我的系统在完成之前无法使用。我希望它可以继续用于其他任务。
您必须将调度程序从 更改
deadline
为cfq
。您可以通过每个块设备和非永久设备执行此操作
或者对于整个系统,永久 via
grub
,将elevator=cfq
参数添加到 grub 命令行选项。这是一篇很好的文章,解释了如何做到这一点。
这种变化的缺点是在其他地方更好地涵盖。
TL;DR 是
这个答案可能对缺少 cfq 调度程序的 Ubuntu 20.04 有所帮助: https ://askubuntu.com/a/1350605
从那个答案:
Ubuntu 20.04 使用内核 5.4(带有 HWE:5.8),仅
mq-deadline
编译了调度程序。您可以通过查看来检查它
/sys/block/sda/queue/scheduler
。活动调度程序周围有方括号。如果内核中编译了其他调度程序,它们也会显示出来。例子:
调度器目前
mq-deadline
不支持使用的机制ionice
,见:https ://unix.stackexchange.com/a/160081/27458解决方案:切换到BFQ调度器
bfq
调度程序不需要在内核中编译,之后可以使用内核模块加载。切换到 BFQ 调度器:
查看:
重新启动并再次检查可能是个好主意。
BFQ 在“虚拟”内核上不可用
如果您使用的是“虚拟”内核,您可能没有
bfq
可用的内核模块,因为它不包含该linux-modules-extra-5.xxx
软件包。您可以通过切换到“generic-HWE”内核来解决这个问题:
重新启动后,您应该在 kernel 上
5.8.0-xxx-generic
。你可以检查这个:现在您可以应用上述解决方案。
替代解决方案:Systemd 范围
如果不想切换 IO 调度器,可以使用 IO 权重较低的 Systemd 范围。
创建一个
/usr/local/bin/mh_ionice
包含内容的文件:使其可执行:
现在你可以运行: