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

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

我知道我可以使用像ionice这样的东西将优先级更改为空闲,但是在Virtualbox生成许多进程的情况下变得很困难。

我是否可以向系统提供某种类型的提示,因此在启动某些特定应用程序时,它们的启动优先级最低?

注意:此解决方案仅适用于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它可以将其解释为我们刚刚创建的文件并创建一个“循环”。

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

根据对这个超级用户问题的回答(“是”) 儿童过程是否inheritance了父母的优先权? 如何检查正在运行的进程的IO优先级? ,它应该足以使父进程ionice ,如下所示:

 ionice -c 3 VirtualBox 

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

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

可以使用数字或类名。

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

您可以使用’renice’命令来确定进程的优先级:

 renice -  

它也可能是你的驱动器旋转太多,所以当你想启动像Virtualbox这样的应用程序时,它必须先启动才能开始解决(这可能需要一段时间)。