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

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

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

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

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

答案1

注意:此解决方案仅适用于 cfq 调度程序,如前所述这里。您应该通过发出以下命令来检查使用的是哪一个

cat /sys/block/sda/queue/scheduler

改变如果有必要的话。

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

echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/

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

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

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

ionice -c 3 VirtualBox

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

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

可以使用数字或类名。

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

答案2

您可以使用“renice”命令来对进程进行优先排序:

renice -<priority> <application's pid>

也可能是您的驱动器旋转得太慢,因此当您想要启动 Virtualbox 之类的应用程序时,它必须先旋转起来,然后您才能开始工作(这可能需要一段时间)。

相关内容