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