【内核调度、负载均衡】【calculate_imbalance】

本文探讨了Linux内核中calculate_imbalance函数的用途,该函数在网络上的资源较少。主要涉及因素包括任务负载不匹配、平均负载、组容量、调度容量比例、nice级别0的负载及运行任务数。同时提到了fix_small_imbalance函数,但未深入解释其计算细节,建议后续研究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

calculate_imbalance函数对于该版本的kernel在网上没有找到相同的code,所以这里只是通过他的注释来确认。

calculate_imbalance

/**
 * calculate_imbalance - Calculate the amount of imbalance present(当下的) within the
 *			 groups of a given sched_domain during load balance.
 * @env: load balance environment
 * @sds: statistics of the sched_domain whose imbalance is to be calculated.
 */
static inline void calculate_imbalance(struct lb_env *env, struct sd_lb_stats *sds)
{
	unsigned long max_pull, load_above_capacity = ~0UL;
	struct sg_lb_stats *local, *busiest;

	local = &sds->local_stat;
	busiest = &sds->busiest_stat;

	if (busiest->group_type == group_imbalanced) {
		/*
		 * In the group_imb case we cannot rely on group-wide averages
		 * to ensure cpu-load equilibrium(平衡), look at wider averages. XXX
		 */
		 /*
		 在group_imb的情况下,我们不能依靠整个组的平均值来确保cpu-load均衡,
		 而要查看更宽的平均值
		 */
		busiest->load_per_task =
			min(busiest->load_per_task, sds->avg_load);
	}

	/*
	 * Avg load of busiest sg can be less and avg load of local sg can
	 * be greater than avg load across all sgs of sd because avg load
	 * factors in sg capacity and sgs with smaller group_type are
	 * skipped when updating the busiest sg:
	 */
	 /*
	 最繁忙的sg的平均负载可以较小,本地sg的平均负载可以大于sd的所有sg的平均负载,
	 这是因为更新最繁忙的sg时会跳过sg容量和具有较小group_type的sg的平均负载因子:
	 */
	if (busiest->group_type != group_misfit_task &&
	    (busiest->avg_load <= sds->avg_load ||
	     local->avg_load >= sds->avg_load)) {
		env->imbalance = 0;//已经平衡
		return fix_small_i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值