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


8

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

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

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


您尝试过我的解决方案吗?它能胜任吗?
sm4rk0

Answers:


7

注意:此方法只与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命令。

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

ionice -c 3 VirtualBox

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

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

可以使用数字或类别名称。

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


1
虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
Lucio

@Lucio,谢谢您的提示,但是“ ionice对于父进程来说这应该足够了”是必不可少的吗?
sm4rk0

1
是的,你说的没错。但是,如果可以的话,请花一些时间,然后根据您自己的经验添加有关此过程的更多信息,以创建一个更好的答案 :)
Lucio 2013年

@Lucio,我希望它现在足够好。感谢您的坚持(:
sm4rk0

1
仅供参考:ionice只能使用cfq调度程序!有关详细信息:unix.stackexchange.com/questions/136226/...
andras.tim

-1

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

renice -<priority> <application's pid>

也可能是您的驱动器旋转速度太慢,所以当您要启动Virtualbox之类的应用程序时,它必须先旋转然后才能开始解决(这可能需要一段时间)。


感谢您的提示,但我一直在寻找一种自动实现该功能的方法。例如:启动Virtualbox时,请以可能的最低IO优先级运行它
Salem

常规nice和renice不会分别将IO划分优先级。
Jay _silly_evarlast_ Wren

这很好,不是ionice。一个用于CPU,另一个用于IO。
Dagelf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.