Linux调度CFS源码分析(三) 调度实体和调度组

本文详细解释了Linux内核中的任务组如何在处理器上使用公平调度实体和实时调度实体进行资源分配,涉及权重计算方法,特别是公平调度实体的权重基于任务组负载比例,以及enqueue_entity和dequeue_entity操作对权重的影响。
摘要由CSDN通过智能技术生成

调度实体和调度组

任务组在每个处理器上有公平调度实体、公平运行队列、实时调度实体和实时运行队列,根任务组比较特殊:没有公平调度实体和实时调度实体。

任务组的下级

实时调度实体加入任务组的实时运行队列,任务组的实时调度实体加入上级任务组的实时运行队列。

为什么任务组在每个处理器上有一个公平调度实体和一个公平运行队列呢?因为任务组包含多个进程,每个进程可能在不同的处理器上运行。同理,任务组在每个处理器上也有一个实时调度实体和一个实时运行队列。

在每个处理器上,计算任务组的公平调度实体的权重的方法如下(参考源文件“kernel/sched/fair.c”中的函数update_cfs_shares)。

  1. 公平调度实体的权重=任务组的权重×负载比例
  2. 公平调度实体的负载比例=公平运行队列的权重/(任务组的平均负载−公平运行队列的平均负载+公平运行队列的权重)
  3. 公平运行队列的权重=公平运行队列中所有调度实体的权重总和
  4. 任务组的平均负载=所有公平运行队列的平均负载的总和

为什么负载比例不是公平运行队列的平均负载除以任务组的平均负载?公平运行队列的权重是实时负载,而公平运行队列的平均负载是上一次计算的负载值,更新被延迟了,我们使用实时负载计算权重。

当向队列中enqueue_entity或者dequeue_entity,或者当tick到达时定时更新entity_tick更新当前task的权重值。也就是当前实体的权重从整个group里面按照实际运行的实时负载的占比进行分配。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值