如何验证“nice”是否有效?

如何验证“nice”是否有效?

看看在具有共享资源的系统上运行的不同作业,似乎好的值被忽略了。许多将 Nice 设置为 19 的作业都以 100% 的 CPU 负载运行,而其他许多将 Nice 设置为 0 的作业则以低至 10% 的 CPU 负载运行。
所有这些进程都要求很高,并且在空闲系统上运行会最大化分配给它的每个 cpu(例如南美德)。

我读这里

“……虽然[一个不错的]值是可调整的,但它可以被 Linux 实现中的内核调度程序忽略。”

这是真的?内核是否有可能忽略了nice值?看起来这就是正在发生的事情,但我怎么能确定呢?在不确定的情况下,我不想让系统管理员将此成为一个问题。我已阅读相关帖子讨论工作怎么样?nice对 Linux 没有太大帮助但这些并没有讨论不使用 CPU 负载的情况。

难道一旦某个任务获得了资源,它会保留这些资源一段时间,然后再将它们重新分配给更高优先级的任务吗?低优先级任务已运行数天,而较高优先级任务则重复启动大量简短但要求较高的计算,这些计算运行时间不到 10 分钟。是否有可能在短任务之间,系统将资源提供给低优先级任务,然后由低优先级任务保留这些资源?

我相信我正在经历的系统是在堆栈智商包装了 CentOS 6.5 安装(尽管我很容易在某些细节上犯错误)。

答案1

Nice 值不会告诉您有关进程产生的实际 CPU 负载的任何信息。

良好性正是您所想的那样:流程在特定工作负载下的行为方式。

更准确地说:

  • 如果一个具有高nice值(==较低调度概率)的进程被调度,它将保留cpu,直到具有较低nice值和/或较高优先级的进程请求cpu并可能创建100%的负载。

  • 如果一个具有较低nice值(==较高调度概率)的进程放弃了CPU,它可能没有在峰值时使用它。

这就是为什么你会看到低 niced 进程比高 niced 进程使用更少的 cpu:更好的进程会更容易放弃,但它目前显然有更多的工作要做......

答案2

系统中的许多进程只是坐着等待事情发生。这是大多数服务器处理器或守护程序所做的事情(例如 ssh、邮件、X)。

如果您正在使用文字处理程序,它只会等待您单击某处或键入某些内容。大多数时候,该进程没有被调度,并且使用的 CPU 时间非常少。您可以将此过程的nice-value 设置为零,并且不会产生任何明显的影响。

但是,如果您要使用程序来渲染 3D 高分辨率图像或处理动画或视频,则 Nice 值将会产生影响。

具有共享资源的进程面临另一个问题:共享资源。当另一个进程正在使用资源时,他们通常必须等待该资源。

硬盘就是一个例子。如果一个进程启动了硬盘操作(例如读或写文件),那么它会被系统挂起,直到操作完成。即使是零的好感值也无济于事。当进程挂起时,它不会使用任何 CPU 时间。

的效果nice可能非常微妙;-)

答案3

就 Linux 的调度程序而言,10 分钟是非常长的时间。时间片大约是 10 毫秒。

当您查看 CPU 使用率百分比时,请记住,这top会将多线程进程的每个线程使用率相加。因此,如果每个线程获得 10% 活动时间的 10 线程进程将显示为使用 100% 的 CPU。

Linux 的调度程序不会使nice 19任务挨饿(因为如果进程可以永远取消调度,则死锁错误很难避免),因此甚至nice 19不会阻止任务获得一些 CPU 时间。如果它有很多线程,它仍然可能使用大量的 CPU 资源。

如果某些进程在 I/O 上阻塞,尤其是虚拟内存分页,则它们的 CPU 使用率将大幅下降。运行类似dstat查看 CPU 使用情况细分、磁盘、网络、分页和上下文切换等内容。很像vmstat,但颜色更漂亮。

NI通过查看顶部的列,确保您的流程确实按照您想象的方式进行。 (同一进程中的不同线程不太可能具有不同的良好级别,但我认为有可能。)

如果您一直在使用renice,请记住它不是递归的。调整父进程不会影响现有的子进程,只会影响未来的子进程。

相关内容