如何提高 Linux 机器中任务的优先级?
我目前所做的事情:经过一些研究,我发现我们可以使用 NICE 命令来增加任务的优先级,如果我们想增加现有任务的优先级,那么我们也可以使用 RENICE 命令
但我的问题是:
在一些教程中提到,NICE 值从 0 到 99 变化,但在一些教程中指出 NICE 值从 -20 到 19 变化。哪一个是正确的?
如何增加 GUI 任务的 NICE 值?如果我们使用终端进行复制,那么我可以使用 NICE 命令增加其优先级,但是如何增加使用 GUI 完成的任务的优先级(例如:通过 GUI 将文件从 USB 复制到系统)
是否可以设置任务的生命周期优先级?我想为“在系统中复制文件(使用 GUI)”永久设置最高优先级
有谁能帮我为一项任务(通过 GUI 完成的任务)设置最高优先级?
答案1
我认为你应该问Unix 和 Linux但无论如何,那些说 NICE 价值观的人对于 Linux 中的 CPU从 0 到 99 不等仅适用于实时操作系统。在普通(大多数用户使用的)*NIX CPU 内核中,nice 值介于 -20 到 20 之间,-20 表示优先级较高。这适用于大多数情况。
此外,文件复制实际上不需要那么多 CPU(取决于文件系统),而是需要 I/O 优先级。从内核 2.6.26 开始,ionice 值由 CPU nice 值使用以下公式确定:
io_priority = (cpu_nice + 20) / 5
此外,所有流程(除非修改了源代码)都以“最大努力”使用上述公式的优先级类别。但是,无论如何,您可能不需要将其设置为默认值。
设置 I/O 优先级来启动进程的一种方法是:
ionice -c2 -n6 SOME_COMMAND
想要设置/获取自己的 I/O 调度类和优先级的进程应该使用 ioprio_set 和 ioprio_get 函数。
也是一个很好的警告来自 Linux Poison:
仔细阅读实时的描述。实时 IO 良好进程将完全耗尽系统资源,直到它们使用完磁盘。您可以轻松地让系统长时间无响应。
此外,IO niceness 仅在您使用 CFQ io 调度程序时才有效。如果您的 menu.lst 中有 elevator= (as, deadline,noop) 行,IO niceness 将不起作用。
资料来源:
答案2
您正在寻找:自动良好守护进程
自动 nice 守护进程会以一定的时间间隔激活自身,并根据作业的优先级和 CPU 使用率对其进行重新排序。root 拥有的作业将保持不变。作业的优先级永远不会提高。
可以调整重新排序间隔以及默认的 nice 级别和激活间隔。优先级数据库存储用户/组/作业三元组及其三个 CPU 使用时间范围的重新排序值。负数 nice 级别被解释为要发送给进程的信号,由 CPU 使用率触发;这样,可以自动杀死失控的 Netscapes。可以配置搜索优先级数据库的策略。AND 还提供了具有主机特定部分的网络范围配置文件,以及优先级数据库中命令的通配符/正则表达式支持。主页:http://and.sourceforge.net/
您可以轻松地在您的 Ubuntu 上安装它:
# aptitude install and
并修改配置文件:
# vi /etc/and.priorities
你说:
是否可以设置任务的生命周期优先级?我想为“在系统中复制文件(使用 GUI)”永久设置最高优先级
这取决于你喜欢哪种 GUI。获取文件管理器的名称并将其添加到配置“/etc/and.priorities”。
不幸的是,Auto Nice Daemon 可以在 -20 : 19 范围内更改优先级。
这与“man nice”给出的一样:
友善度值的范围从 -20(对流程最有利)到 19(对流程最不利)。
要获得 -99 和 rt(实时),您应该阅读接下来的两篇文章:
# man chrt
# man ionice