sched: EAS: use busy energy cost when CPU is not in a C-state
When the CPU is idle but not in a C-state, i.e. not in WFI
regardless of its load the CPU's energy cost is proportional to its
frequency rather than static. However at present energy_diff() tends
to underestimate energy cost of CPU not in a C-state when a CPU's
load is low by assuming energy cost is static.
Use energy cost of CPU frequency rather than static idle cost when CPU
is not in a C-state.
Change-Id: I63060be34652f3a1e8f85eca235440e033e614ee
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 48522e8..9b6ffd3 100755
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5602,8 +5602,13 @@
idle_idx = group_idle_state(sg);
group_util = group_norm_util(eenv, sg);
sg_busy_energy = (group_util * sg->sge->cap_states[cap_idx].power);
- sg_idle_energy = ((SCHED_CAPACITY_SCALE-group_util)
- * sg->sge->idle_states[idle_idx].power);
+
+ if (idle_idx == 0)
+ sg_idle_energy = ((SCHED_CAPACITY_SCALE - group_util)
+ * sg->sge->cap_states[cap_idx].power);
+ else
+ sg_idle_energy = ((SCHED_CAPACITY_SCALE - group_util)
+ * sg->sge->idle_states[idle_idx].power);
total_energy += sg_busy_energy + sg_idle_energy;