MC层级的group_capacity的更新
这里需要区分是MC层级还是DIE。他们的区别是sd->child是否为NULL。MC层级为NULL
具体可以看update_cpu_capacity这个函数
void update_group_capacity(struct sched_domain *sd, int cpu)
{
struct sched_domain *child = sd->child;
struct sched_group *group, *sdg = sd->groups;
unsigned long capacity, min_capacity, max_capacity;
unsigned long interval;
interval = msecs_to_jiffies(sd->balance_interval);
//负载均衡的最大值不能超过1UL和max_load_balance_interval 之间,
//也就是负载均衡的最大周期不能超过max_load_balance_interval
interval = clamp(interval, 1UL, max_load_balance_interval);
sdg->sgc->next_update = jiffies + interval;
if (!child) {
update_cpu_capacity(sd, cpu);
return;
}
......
}
rq->cpu_capacity |
本cpu的cfs的计算能力,rq->cpu_capacity = (rq->cpu_capacity_orig - rq->rt.avg.util_avg)*
(rq->cpu_capacity_orig - rq->avg_irq.util_avg)/
rq->cpu_capacity_orig |
|
sd->group->sgc->capacity |
sdg->sgc->capacity = rq->cpu_capacity |
|
Sd->group->sgc->max_capacity |
sdg->sgc->max_capacity = rq->cpu_capacity |
|