Hi Juri,
On 09/03/15 14:06, Juri Lelli wrote:
There is one thread for each cluster (cpufreq policy domain). Bound them to run only on the related_cpus of that domain, as to avoid spurious wakeups on unrelated cpus.
Signed-off-by: Juri Lelli juri.lelli@arm.com
kernel/sched/energy_model.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/sched/energy_model.c b/kernel/sched/energy_model.c index 64bd50e..df18dac 100644 --- a/kernel/sched/energy_model.c +++ b/kernel/sched/energy_model.c @@ -71,7 +71,7 @@ static int energy_model_thread(void *data)
param.sched_priority = 0; sched_setscheduler(current, SCHED_FIFO, ¶m);
- sched_setaffinity(0, policy->related_cpus);
Why not using set_cpus_allowed_ptr(current, ...) here? All the checks in sched_setscheduler() seem unnecessary if you want to change current.
diff --git a/kernel/sched/energy_model.c b/kernel/sched/energy_model.c index 78902d9f75e0..35477d1d6fff 100644 --- a/kernel/sched/energy_model.c +++ b/kernel/sched/energy_model.c @@ -72,7 +72,7 @@ static int energy_model_thread(void *data) param.sched_priority = 0; sched_setscheduler(current, SCHED_FIFO, ¶m);
- sched_setaffinity(0, policy->related_cpus); + set_cpus_allowed_ptr(current, policy->related_cpus);
do { down_write(&policy->rwsem);
root@linaro-nano:~# ./ea_on.sh GENTLE_FAIR_SLEEPERS START_DEBIT NO_NEXT_BUDDY LAST_BUDDY CACHE_HOT_BUDDY WAKEUP_PREEMPTION ARCH_CAPACITY NO_HRTICK NO_DOUBLE_TICK LB_BIAS NONTASK_CAPACITY TTWU_QUEUE NO_FORCE_SD_OVERLAP RT_RUNTIME_SHARE NO_LB_MIN ENERGY_AWARE
TC2:
root@linaro-nano:~# ps -ef | grep -v grep | grep energy root 1054 2 0 17:40 ? 00:00:00 [kenergy_model_t] root 1055 2 0 17:40 ? 00:00:00 [kenergy_model_t]
root@linaro-nano:~# taskset -p 1054 pid 1054's current affinity mask: 3 root@linaro-nano:~# taskset -p 1055 pid 1055's current affinity mask: 1c
-- Dietmar
do { down_write(&policy->rwsem);