如何验证“nice”是否正常工作?

Ste*_*ell 5 linux scheduling nice linux-kernel

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

我读到这里

“...虽然 [a nice] 值是可调整的,它可以被 Linux 实现中的内核调度程序忽略。”

这是真的?内核是否可能忽略了 nice 值?看起来这就是正在发生的事情,但我怎么能确定呢?我不想在没有更确定的情况下使这成为系统管理员的问题。我已经阅读了讨论如何工作好?nice在 Linux 上没有真正帮助,但这些并没有讨论不使用 CPU 负载。

是不是一旦一个任务获得了资源,它会在将它们重新分配给更高优先级的任务之前保留它们一段时间?低优先级的任务已经运行了好几天,而高优先级的任务则反复启动大量短时但要求高的计算,运行时间不到 10 分钟。是否可能是在短任务之间,系统将资源分配给低优先级任务,然后该任务会保留它们?

我相信我遇到的系统是在StackIQ包装的 CentOS 6.5 安装上(尽管我很容易在某些细节上出错)。

ger*_* d. 5

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

Nice-ness 正是您所想的:流程在某些工作负载下的行为方式。

更准确地说:

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

  • 如果具有较低 nice-value(==较高调度概率)的进程放弃 CPU,则它可能不会在高峰期使用它。

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


Pet*_*des 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,请记住它不是递归的。调整父进程不会影响现有的子进程,只会影响未来的子进程。