Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 12084a13 authored by Joonwoo Park's avatar Joonwoo Park
Browse files

sched: select backup CPU with least cumulative window demand



Choose backup CPU with the least cumulative window demand among the same
CPU's demand and C-state.  Doing such keeps CPU's frequency lower.

Change-Id: I9c1e3290146ed40d98b6d73eef60b6760eb97f1c
Signed-off-by: default avatarJoonwoo Park <joonwoop@codeaurora.org>
parent f2d455ad
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -791,6 +791,11 @@ DEFINE_EVENT(sched_task_util, sched_task_util_energy_aware,
	TP_PROTO(struct task_struct *p, int task_cpu, unsigned long task_util, int nominated_cpu, int target_cpu, int ediff),
	TP_ARGS(p, task_cpu, task_util, nominated_cpu, target_cpu, ediff)
);

DEFINE_EVENT(sched_task_util, sched_task_util_imbalance,
	TP_PROTO(struct task_struct *p, int task_cpu, unsigned long task_util, int nominated_cpu, int target_cpu, int ediff),
	TP_ARGS(p, task_cpu, task_util, nominated_cpu, target_cpu, ediff)
);
#endif

/*
+11 −5
Original line number Diff line number Diff line
@@ -6600,6 +6600,7 @@ static int energy_aware_wake_cpu(struct task_struct *p, int target, int sync)
	int cpu = smp_processor_id();
	int min_util_cpu = -1;
	int min_util_cpu_idle_idx = INT_MAX;
	long min_util_cpu_util_cum = LONG_MAX;
	unsigned int min_util = UINT_MAX;
	int cpu_idle_idx;
	int min_idle_idx_cpu;
@@ -6709,16 +6710,21 @@ static int energy_aware_wake_cpu(struct task_struct *p, int target, int sync)
				min_util_cpu = i;
				min_util = new_util;
				min_util_cpu_idle_idx = cpu_idle_idx;
				min_util_cpu_util_cum = new_util_cum;
			} else if (sysctl_sched_cstate_aware &&
				   min_util == new_util &&
				   cpu_idle_idx < min_util_cpu_idle_idx) {
				   min_util == new_util) {
				if (cpu_idle_idx < min_util_cpu_idle_idx ||
				    (cpu_idle_idx == min_util_cpu_idle_idx &&
				     min_util_cpu_util_cum > new_util_cum)) {
					min_util_cpu = i;
					min_util_cpu_idle_idx = cpu_idle_idx;
					min_util_cpu_util_cum = new_util_cum;
				}
			}
		}

		if (target_cpu == -1) {
			if (min_util_cpu != -1)
			if (likely(min_util_cpu != -1))
				target_cpu = min_util_cpu;
			else
				target_cpu = task_cpu(p);