kernel version: 3.18
在smp负载均衡过程中,为了计算方便,kernel中定义了struct sd_lb_stats结构体,该结构体描述调度域中的总负载、总能力系数和平均负载等信息。调度组也有一个类似的数据结构struct sg_lb_stats,用于描述该调度组里的相关信息,例如平均负载、总负载、总权重、进程平均权重等。
update_sg_lb_stats()方法用来更新当前调度组里的相关信息,首先看一下update_sg_lb_stats()方法的实现:
static inline void update_sg_lb_stats(struct lb_env *env,
struct sched_group *group, int load_idx,
int local_group, struct sg_lb_stats *sgs,
bool *overload)
{
unsigned long load;
int i;
memset(sgs, 0, sizeof(*sgs));
for_each_cpu_and(i, sched_group_cpus(group), env->cpus) {
struct rq *rq = cpu_rq(i);
trace_sched_cpu_load_lb(cpu_rq(i), idle_cpu(i),
sched_irqload