调度子系统7_负载均衡(四)

本文深入探讨了Linux内核中的调度子系统,重点在于负载均衡部分。内容涵盖负载均衡的目标、策略以及如何在多核系统中有效地分配任务以优化系统性能。通过对调度算法的理解,读者将能更好地掌握Linux系统的资源管理和性能优化。
摘要由CSDN通过智能技术生成
//	寻找sched domain中最忙的group
//	函数参数:
//		sd:待查找的sched domain
//		this_cpu:当前正在对其执行负载均衡的cpu
//		imbalance:为达到平衡需要移动的权重
//		idle:this_cpu当前的状态
//		sd_idle: sd空闲状态
//		cpus:可作为源cpu的集合
//		balance:指示this_cpu是否适合负载均衡
//	返回值:
//		如果存在不均衡,返回最忙的group
//		否则,如果用户建议power-savings balance,返回最不忙的group,
//			通过将其中cpus的进程移动到本group,使其idle
//	函数任务:
//		1.计算sd的负载信息
//		2.根据统计信息,决定是否进行负载均衡
//			2.1 this_cpu不适合在sd中进行均衡,则返回
//			2.2 没有最忙的group,或者最忙group可运行进程数为0,则返回
//			2.3 this_cpu所在group的负载大于最忙group的负载,则返回
//			2.4 计算sched domain的平均负载
//				公式:(SCHED_LOAD_SCALE * sds.total_load) / sds.total_pwr
//				2.4.1 如果this_group的负载大于等于平均负载,则返回
//			2.5 this_cpu所在group的负载阈值超过了最忙group的负载阈值,则返回
//				this_cpu所在group的负载阈值计算公式:sd->imbalance_pct * sds.this_load
//			2.6 运行到此处,说明存在失衡,计算失衡的负载量(即需要移动的负载数)
//			2.7 返回最忙的group
//		3.如果sd负载没有失衡,计算是否可以通过负载均衡来省电
//			3.1 返回最不忙的group
1.1 static struct sched_group *find_busiest_group(struct sched_domain *sd, int this_cpu,
		   unsigned long *imbalance, enum cpu_idle_type idle,
		   int *sd_idle, const struct cpumask *cpus, int *balance)
{

	struct sd_lb_stats sds;
	memset(&sds, 0, sizeof(sds));
	//计算sd的负载
	update_sd_lb_stats(sd, this_cpu, idle, sd_idle, cpus,
					balance, &sds);
	//this_cpu不适合在sd中进行均衡,则返回
	if (!(*balance))
		goto ret;
	//没有最忙的group,或者最忙group可运行进程数为0,则返回
	if (!sds.busiest || sds.busiest_nr_running == 0)
		goto out_balanced;

	//this_cpu所在group的负载大于最忙group的负载,则返回
	if (sds.this_load >= sds.max_load)
		goto out_balanced;

	//sd的平均权重
	sds.avg_load = (SCHED_LOAD_SCALE * sds.total_load) / sds.total_pwr;
	//this_cpu所在group负载大于sd的平均负载,则返回
	if (sds.this_load >= sds.avg_load)
		goto out_balanced;
	//imbalance_pct,进行负载均衡的阈值
	if (100 * sds.max_load <= sd->imbalance_pct * sds.this_load)
		goto out_balanc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值