我是否应该为用户进程设置较低的 nice 值以使其更快?

Nag*_*gri 5 linux process nice

我最近了解了一个过程的价值。如果我正在运行一个用户程序,我是否应该将 nice 值设置得尽可能低,这会使我的进程运行得更快吗?

Kus*_*nda 5

启动的程序的 nice-value 通常为零,即它不高于或低于系统上运行的大多数其他进程的 nice-values。nice-value 修改进程的调度优先级。

非特权用户只能指定降低他们自己进程的调度优先级(即使他们“更好”)的nice 值。

具有较高调度优先级的进程不一定比具有较低调度优先级的进程运行得更快,但随着内核的运行队列变长(当许多并发进程在繁忙的系统上争夺 CPU 时间时)和负载(这是运行队列长度的度量)增加,与队列中的其他进程相比,它有更大的机会被安排执行。它有可能更频繁地运行。

在其他空闲的系统上,以高 nice-value 运行进程与以低 nice-value 运行它没有什么不同。无论如何,它将获得 100% 或接近 100% 的 CPU。它不会跑得更快或更慢。

对于非特权用户,nicerenice实用程序是用于降低自己进程的调度优先级的实用程序,以便对其他人友好。

root 用户可能会增加正在运行的进程的调度优先级,或者使用提升的值启动进程。

在我的 (OpenBSD) 系统上,唯一以提高的调度优先级运行的进程是ntpd(计时守护进程)和sndiod(OpenBSD 上的音频/MIDI 服务器),即需要能够“实时”运行的进程或接近它,而不必等待其他进程完成它们的工作。


ctr*_*lor 4

简短回答

你不能(作为普通用户),因为这是一个坏主意。

长答案

大多数时候这没有什么区别(如果它是唯一正在运行的进程,或者如果正在运行的线程总数小于 CPU 核心数)。

当它确实产生影响时,过程将不会很好。它会占用你的处理器。计算机将开始变得无响应。

更长的答案:

唯一有意义的时候是对于实时进程来说,减少 Nicenese 是有意义的。这是针对需要在一定时间范围内完成工作的流程。这些过程需要写得漂亮(而不是nice)。那就是做那里的工作然后放弃处理器。您可能不想摆弄这个。无论如何,这可能是不需要的,因为表现良好的进程的动态优先级会增加。(请注意,还有实时优先级(请参阅实时调度程序),甚至更加极端。您可能永远不想触及这些优先级。特别是在生产系统上。这是一个正在做重要事情的系统。)

  • @JonasWielicki 添加了一条注释,表示实时优先级是实时调度程序的一部分。 (2认同)