首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在完全公平的调度下,时间是否取决于进程优先级?

在完全公平的调度下,时间是否取决于进程优先级?
EN

Unix & Linux用户
提问于 2014-09-21 19:14:27
回答 1查看 4.5K关注 0票数 10

我正在努力理解完全公平的日程安排(CFS)。根据Robert在Linux内核开发,第三版(斜体他的,大胆的地雷):

CFS不为每个进程分配时间间隔,而是根据可运行进程的总数计算一个进程应该运行多长时间。CFS没有使用尼斯值来计算时间间隔,而是使用尼斯值来加权进程要接收的处理器的比例:高值(低优先级)进程相对于默认的尼斯值接收分数权重,而低值(高优先级)进程获得更大的权重。然后,每个进程运行一个与其重量成比例的“时间间隔”,除以所有可运行线程的总重量。为了计算实际的时间间隔,CFS为其近似于完美多任务处理中的“无限小”调度时间设置了一个目标。这个目标称为目标延迟.假设目标延迟为20毫秒,我们有两个优先级相同的可运行任务。不管这些任务的优先级如何,每个任务都会运行10毫秒,然后先发制人。如果我们有四个优先级相同的任务,每个任务将运行5毫秒。如果有20个任务,每个任务运行1毫秒.现在,让我们再次考虑两个可运行的进程的情况,除了不同的好值--比如,一个默认的尼斯值(零),一个的好值为5。这些很好的值具有不同的权重,因此我们的两个进程得到了处理器时间的不同比例。在这种情况下,重量计算出约1/3的点球对尼斯-5进程。如果我们的目标延迟再次是20毫秒,我们的两个进程将分别收到15毫秒和5毫秒的处理器时间。

第一个粗体句子表示,无论优先级如何,任务都有相同的时间间隔,而第二个句子则表示时间取决于良好的值。哪个是正确的,还是我错过了什么?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-12-31 03:38:05

这两个句子只是解释了两个CFS如何工作的例子-前者是当2个任务具有相同的好值时,而后者是当两个任务有不同的好值时。通常,为每个任务计算的时间片段归结为以下公式:

代码语言:javascript
复制
timeslice = (weight/total_weight)*target_latency

weight是当前任务的权重,它依赖于分配给任务的很好的值。

total_weight是运行队列中所有任务的权重之和。

target_latency是CFS尝试一次调度运行队列中所有任务的时间间隔。

回到原来的公式,当两个任务具有相同的好值时,它们也将具有相同的weight值。通过将weight视为常数,我们的新公式是:

代码语言:javascript
复制
timeslice = (target_latency/total_weight)

正如您所看到的,运行队列中每个任务的时间切片不再依赖于其weight值,因此每个任务将接收相同的时间切片。这是书中提到的第一个案例。

第二个例子提到了nice值的不同,因此weight值会有所不同。每个任务都会相应地收到它的时间片段。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/156708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档