如何自动设置磁盘IO优先级?

Sal*_*lem 8 disk process-priority

如果我使用一些 IO 密集型应用程序(如 Virtualbox、Steam 数据验证甚至dd),我的系统几乎没有响应。尽管都以正常优先级启动,但它们使桌面非常缓慢并延迟了其他应用程序的启动。

我知道我可以使用诸如ionice将优先级更改为空闲之类的方法,但是在产生许多进程的 Virtualbox 的情况下,这变得很困难。

我可以给系统一些类型的提示,以便在启动某些特定应用程序时它们以最低 IO 优先级启动吗?

sm4*_*rk0 7

注意:此方法只与CFQ调度工作,为解释在这里。您应该通过发布来检查使用的是哪个

cat /sys/block/sda/queue/scheduler
Run Code Online (Sandbox Code Playgroud)

并在必要时更改它。

如果我理解正确,您希望ionice每次启动命令时都应用一些设置。你可以这样做:

echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/
Run Code Online (Sandbox Code Playgroud)

第一个命令创建一个VirtualBox以单引号文本作为内容的文件。这应该有程序的完整路径,因为如果只指定VirtualBox它可以将其解释为我们刚刚创建的文件并创建一个“循环”。

第二个命令使其可执行,第三个命令将这个新文件移动到“系统”bin 文件夹前面的文件夹中/usr/bin,因此我们的新文件将被执行而不是原始文件。“$@”部分包含调用命令的所有参数,因此它们被转发到真正的 VirtualBox 命令。

根据对这个超级用户问题的回答(“是”),子进程是否继承了父进程的 ionice 优先级?如何检查正在运行的进程的 IO 优先级?ionice对父进程来说应该就够了,像这样:

ionice -c 3 VirtualBox
Run Code Online (Sandbox Code Playgroud)

ionice 手册页,可以使用以下 I/O 调度类值:

  • 0 表示无
  • 1 实时
  • 2 尽力而为
  • 3 用于空闲(在上面的示例中使用)

可以使用数字或类名。

此外,-n level选项适用于实时和尽力而为的类,0-7 作为有效数据(优先级)。