所有调度都是抢占式的:如果具有较高静态优先级的进程准备运行,则当前正在运行的进程将被抢占并返回到其静态优先级的等待列表。
尽管设置优先级说
这会导致非常低的nice值(+19)在系统上存在任何其他更高优先级负载时真正为进程提供很少的CPU,并且使高nice值(-20)将大部分CPU提供给需要它的应用程序
那么,改变nice值将如何影响程序的执行呢?它是否类似于RT调度(具有较高nice值的程序将中断具有较低nice值的程序)?
互联网上的所有信息都是如何使用nice
,以及如何更改进程的优先级。没有链接解释不同优先级的进程到底如何工作。我什至找不到源代码。
答案1
特定进程接收的处理器时间比例由该进程与其他可运行进程之间的相对优度差异决定。
Linux完全公平的调度器(CFS)计算重量基于善良。重量大致相当于1024 / (1.25 ^ nice_value)
。随着nice值的减小,权重呈指数级增加。为进程分配的时间片与进程的权重除以所有可运行进程的总权重成正比。 CFS 的实现是在kernel/sched/fair.c
.
中心有一个目标延迟为调度持续时间。较小的目标延迟会产生更好的交互性,但随着目标延迟的减少,切换开销会增加,从而降低总体吞吐量。
例如,假设目标延迟为 20 毫秒,并且两个可运行进程的性能相同,则两个进程将分别运行 10 毫秒,然后被另一个进程抢占。如果有 10 个同等程度的进程,则每个进程运行 2 毫秒。
现在考虑两个进程,一个进程的niceness为0(默认值),另一个进程的niceness为5。相应权重之间的比例差大约为1/3,这意味着较高优先级的进程收到大约15毫秒的时间片而较低优先级进程接收 5 毫秒的时间片。
最后考虑两个进程,niceness 值分别为 5 和 10。虽然在这种情况下绝对好感更大,相对的尼斯值之间的差异与前面的示例相同,产生相同的时间片划分。