Unverified Commit bc160a82 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!7909 Scheduler load balance fixes

Merge Pull Request from: @ci-robot 
 
PR sync from: Zhang Qiao <zhangqiao22@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/7EXIDKPT7FMKKXCEJBTSD62AK7FYQSHY/ 
Zhang Qiao (2):
  sched/numa: Fix numa imbalance in load_balance()
  config: Disable COBFIG_ARCH_CUSTOM_NUMA_DISTANCE for arm64


-- 
2.18.0.huawei.25
 
https://gitee.com/openeuler/kernel/issues/I8PG0C
https://gitee.com/openeuler/kernel/issues/I9RMHW 
 
Link:https://gitee.com/openeuler/kernel/pulls/7909

 

Reviewed-by: default avatarZucheng Zheng <zhengzucheng@huawei.com>
Reviewed-by: default avatarZhang Jianhua <chris.zjh@huawei.com>
Signed-off-by: default avatarZhang Peng <zhangpeng362@huawei.com>
parents 11aebb31 c788da37
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -468,7 +468,7 @@ CONFIG_HOTPLUG_CPU=y
CONFIG_NUMA=y
CONFIG_NODES_SHIFT=8
CONFIG_NUMA_AWARE_SPINLOCKS=y
CONFIG_ARCH_CUSTOM_NUMA_DISTANCE=y
# CONFIG_ARCH_CUSTOM_NUMA_DISTANCE is not set
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
+8 −6
Original line number Diff line number Diff line
@@ -1474,7 +1474,6 @@ static inline bool is_core_idle(int cpu)
}

#ifdef CONFIG_NUMA
#define NUMA_IMBALANCE_MIN 2

static inline long
adjust_numa_imbalance(int imbalance, int dst_running, int imb_numa_nr)
@@ -1493,7 +1492,7 @@ adjust_numa_imbalance(int imbalance, int dst_running, int imb_numa_nr)
	 * Allow a small imbalance based on a simple pair of communicating
	 * tasks that remain local when the destination is lightly loaded.
	 */
	if (imbalance <= NUMA_IMBALANCE_MIN)
	if (imbalance <= imb_numa_nr)
		return 0;

	return imbalance;
@@ -12077,6 +12076,8 @@ find_idlest_group(struct sched_domain *sd, struct task_struct *p, int this_cpu)
#ifdef CONFIG_NUMA
		if (sd->flags & SD_NUMA) {
			int imb_numa_nr = sd->imb_numa_nr;
			int local_busy_cpus = local_sgs.group_weight - local_sgs.idle_cpus;
			int idlest_busy_cpus = idlest_sgs.group_weight - idlest_sgs.idle_cpus;
#ifdef CONFIG_NUMA_BALANCING
			int idlest_cpu;
			/*
@@ -12106,7 +12107,7 @@ find_idlest_group(struct sched_domain *sd, struct task_struct *p, int this_cpu)
				imb_numa_nr = min(cpumask_weight(cpus), sd->imb_numa_nr);
			}

			imbalance = abs(local_sgs.idle_cpus - idlest_sgs.idle_cpus);
			imbalance = abs(idlest_busy_cpus - local_busy_cpus);
			if (!adjust_numa_imbalance(imbalance,
						   local_sgs.sum_nr_running + 1,
						   imb_numa_nr)) {
@@ -12382,18 +12383,19 @@ static inline void calculate_imbalance(struct lb_env *env, struct sd_lb_stats *s

			/*
			 * If there is no overload, we just want to even the number of
			 * idle cpus.
			 * busy cpus.
			 */
			env->migration_type = migrate_task;
			env->imbalance = max_t(long, 0,
					       (local->idle_cpus - busiest->idle_cpus));
						((busiest->group_weight - busiest->idle_cpus)
						- (local->group_weight - local->idle_cpus)));
		}

#ifdef CONFIG_NUMA
		/* Consider allowing a small imbalance between NUMA groups */
		if (env->sd->flags & SD_NUMA) {
			env->imbalance = adjust_numa_imbalance(env->imbalance,
							       local->sum_nr_running + 1,
							       busiest->sum_nr_running,
							       env->sd->imb_numa_nr);
		}
#endif