解决方案:改用BFQ调度器

解决方案:改用BFQ调度器

Ubuntu 有ionice,但据我所知,它什么也没做。

我怀疑这是因为Ubuntu 用 deadline 取代 cfq截止日期不支持优先级

还有什么方法可以在 Ubuntu 上实现优先 I/O 吗?

编辑:背景是,我有一个数据库还原,它很容易消耗我的所有 I/O,并使我的系统无法使用,直到它完成为止。我希望它仍然可用于其他任务。

答案1

这个答案可能对缺少 cfq 调度程序的 Ubuntu 20.04 有帮助: https://askubuntu.com/a/1350605

从那个答案来看:

Ubuntu 20.04 使用内核 5.4(带有 HWE:5.8),其中仅mq-deadline编译了调度程序。

您可以通过查看来检查/sys/block/sda/queue/scheduler。活动调度程序周围有方括号。如果内核中编译了其他调度程序,它们也会显示出来。

例子:

# cat /sys/block/sda/queue/scheduler
[mq-deadline] none

# uname -r
5.4.0-26-generic

调度程序目前mq-deadline不支持使用的机制,请参阅:ionicehttps://unix.stackexchange.com/a/160081/27458

解决方案:改用BFQ调度器

调度bfq程序不需要在内核中编译,而是可以使用内核模块随后加载。

切换到BFQ调度器:

# modprobe  "bfq"
# echo "bfq" > /sys/block/sda/queue/scheduler
# echo "bfq" > /etc/modules-load.d/bfq.conf
# echo 'ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"' > /etc/udev/rules.d/60-scheduler.rules

查看:

# cat /sys/block/sda/queue/scheduler
mq-deadline [bfq] none

重新启动并再次检查可能也是个好主意。

BFQ 在“虚拟”内核上不可用

如果您使用的是“虚拟”内核,您可能无法使用 bfq内核模块,因为它不包含该linux-modules-extra-5.xxx软件包。

您可以通过切换到“generic-HWE”内核来解决这个问题:

# sudo apt-get install linux-generic-hwe-20.04  linux-tools-generic-hwe-20.04
# reboot

重启后你应该进入 kernel 5.8.0-xxx-generic。你可以检查一下:

# uname -r
5.8.0-59-generic

现在您可以应用上述解决方案。

替代解决方案:Systemd 范围

如果您不想切换 IO 调度程序,则可以使用具有较低 IO 权重的 Systemd 范围。

创建一个文件/usr/local/bin/mh_ionice,内容如下:

#!/bin/bash
if (( EUID == 0 )); then USERMODE=''; else USERMODE='--user'; fi
systemd-run \
  --collect \
  --quiet \
  --scope \
  $USERMODE \
  --nice=19 \
  --property="IOAccounting=yes" \
  --property="IOWeight=1" \
  "$@"

使其可执行:

chmod 755 /usr/local/bin/mh_ionice

现在你可以运行:

mh_ionice  [heavy_command] [arg] [arg] [arg]

答案2

您必须将您的调度程序从 更改deadlinecfq

您可以通过每个块设备和非永久性的方式执行此操作

sudo echo cfq > /sys/block/<blockdevice>/queue

或者对于整个系统,通过向 grub 命令行选项grub添加参数来永久保留。elevator=cfq

这是一篇很棒的文章解释你如何能做到这一点。

这种改变的缺点是什么其他地方有更好的介绍。

TL;DR 是

从测试结果来看,每个调度器都各有优势。CFQ 调度器适用于需要平衡 I/O 访问且不需要进程优先级的系统。Deadline 调度器在读取密集型工作上表现更佳。Noop 适用于云端或虚拟机管理程序上的系统。BFQ 在交互式用例场景中表现更佳。Noop 是最简单的调度器,被认为具有针对 SSD 块设备进行优化的新实现的潜力。

相关内容