sched/fair: use actual cpu capacity to calculate boosted util

Currently when calculating boosted util for a cpu, it uses a fixed
value of 1024 for calculation. So when top-app tasks moved to LC,
which has much lower capacity than BC, the freq calculated will be
high even the cpu util is low. This results in higher power
consumption, especially on arch which has more little cores than
big cores. By replacing the fixed value of 1024 with actual cpu
capacity will reduce the freq calculated on LC.

Bug: 152925197
Test: boosted util reduced on little cores
Signed-off-by: Rick Yiu <rickyiu@google.com>
Signed-off-by: Alexander Winkowski <dereference23@outlook.com>
Change-Id: I80cdd08a2c7fa5e674c43bfc132584d85c14622b
fourteen
Rick Yiu 5 years ago committed by Jenna
parent 5f23c8fec1
commit a4bf74d008
  1. 14
      kernel/sched/fair.c

@ -6687,7 +6687,7 @@ static int wake_affine(struct sched_domain *sd, struct task_struct *p,
struct reciprocal_value schedtune_spc_rdiv;
static long
schedtune_margin(unsigned long signal, long boost)
schedtune_margin(unsigned long signal, long boost, long capacity)
{
long long margin = 0;
@ -6696,12 +6696,14 @@ schedtune_margin(unsigned long signal, long boost)
*
* The Boost (B) value is used to compute a Margin (M) which is
* proportional to the complement of the original Signal (S):
* M = B * (SCHED_CAPACITY_SCALE - S)
* M = B * (capacity - S)
* The obtained M could be used by the caller to "boost" S.
*/
if (boost >= 0) {
margin = SCHED_CAPACITY_SCALE - signal;
margin *= boost;
if (capacity > signal) {
margin = capacity - signal;
margin *= boost;
}
} else
margin = -signal * boost;
@ -6720,7 +6722,7 @@ schedtune_cpu_margin(unsigned long util, int cpu)
if (boost == 0)
return 0;
return schedtune_margin(util, boost);
return schedtune_margin(util, boost, capacity_orig_of(cpu));
}
static inline long
@ -6734,7 +6736,7 @@ schedtune_task_margin(struct task_struct *task)
return 0;
util = task_util_est(task);
margin = schedtune_margin(util, boost);
margin = schedtune_margin(util, boost, SCHED_CAPACITY_SCALE);
return margin;
}

Loading…
Cancel
Save