如何自动设置磁盘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这样的应用程序时,它必须先启动才能开始解决(这可能需要一段时间)。