看看在具有共享资源的系统上运行的不同作业,似乎好的值被忽略了。许多将 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
,请记住它不是递归的。调整父进程不会影响现有的子进程,只会影响未来的子进程。