// 计算group在给定domain中的imbalance
// 调用路径:find_busiest_group->calculate_imbalance
// 函数参数:
// sds:sched domain的统计信息
// this_cpu:当前正在运行load balance的cpu
// imbalance:保存imbalance值
// 函数任务:
// 1.计算最忙group内进程的平均负载
// 1.1 公式:最忙group当前的负载量/最忙group当前运行的进程数
// 2.如果最忙group失衡
// 2.1 最忙group内进程的平均负载 = min(最忙group的当前负载,sched doman的平均负载)
// 3.如果最忙group的负载小于domain平均负载,则说明已经平衡,返回
// 4.如果最忙group没有失衡
// 4.1 计算最忙group超过group容量的进程个数
// 5.计算load balance进行pull的load
// 5.1 pull的load量为 min(最忙group超过domain平均负载的量,最忙group的超过容量的负载量)
// 6.计算this_cpu所在group与最忙cpu所在group之间的imbalance量
// 6.1 imbalance量为 min(load balance进行pull的load,当前cpu所在group超过domain平均负载的量)
// 7.如果imbalance不足最忙group中进程的平均负载
// 7.1 进行微调整
static inline void calculate_imbalance(struct sd_lb_stats *sds, int this_cpu,
unsigned long *imbalance)
{
unsigned long max_pull, load_above_capacity = ~0UL;
//计算最忙group内进程当前
调度子系统8_负载均衡(五)
最新推荐文章于 2022-07-12 16:52:52 发布
本文详细解析了Linux内核调度子系统中负载均衡的计算过程,包括calculate_imbalance函数,用于计算域(scheduler domain)内的失衡情况。通过对最忙组的负载分析,确定是否需要进行负载均衡,计算拉取负载量并进行微调整,以保持系统资源的均衡分配。
摘要由CSDN通过智能技术生成