Hi, The scheduler is currently not doing much to help performance on systems with asymmetric compute capacities (read ARM big.LITTLE). This series improves the situation with a few tweaks mainly to the task wake-up path that considers compute capacity at wake-up and not just whether a cpu is idle for these systems. This gives us consistent, and potentially higher, throughput in partially utilized scenarious. SMP behaviour and performance should be unaffected.
Test 0: for i in `seq 1 10`; \ do sysbench --test=cpu --max-time=3 --num-threads=1 run; \ done \ | awk '{if ($4=="events:") {print $5; sum +=$5; runs +=1}} \ END {print "Average events: " sum/runs}' Target: ARM TC2 (2xA15+3xA7) (Higher is better) tip: Average events: 150.2 patch: Average events: 217.9 Test 1: perf stat --null --repeat 10 -- \ perf bench sched messaging -g 50 -l 5000 Target: Intel IVB-EP (2*10*2) tip: 4.831538935 seconds time elapsed ( +- 1.58% ) patch: 4.839951382 seconds time elapsed ( +- 1.01% ) Target: ARM TC2 A7-only (3xA7) (-l 1000) tip: 61.406552538 seconds time elapsed ( +- 0.12% ) patch: 61.589263159 seconds time elapsed ( +- 0.22% ) Active migration of tasks away from small capacity cpus isn't addressed in this set although it is necessary for consistent throughput in other scenarios on asymmetric cpu capacity systems. Patch 1-4: Generic fixes and clean-ups. Patch 5-13: Improve capacity awareness. Patch 14-16: Arch features for arm to enable asymmetric capacity support. Dietmar Eggemann (1): sched: Store maximum per-cpu capacity in root domain Morten Rasmussen (15): sched: Fix power to capacity renaming in comment sched/fair: Consistent use of prev_cpu in wakeup path sched/fair: Disregard idle task wakee_flips in wake_wide sched/fair: Optimize find_idlest_cpu() when there is no choice sched: Introduce SD_ASYM_CPUCAPACITY sched_domain topology flag sched: Disable WAKE_AFFINE for asymmetric configurations sched: Make SD_BALANCE_WAKE a topology flag sched/fair: Let asymmetric cpu configurations balance at wake-up sched/fair: Compute task/cpu utilization at wake-up more correctly sched/fair: Consider spare capacity in find_idlest_group() sched: Add per-cpu max capacity to sched_group_capacity sched/fair: Avoid pulling tasks from non-overloaded higher capacity groups arm: Set SD_ASYM_CPUCAPACITY for big.LITTLE platforms arm: Set SD_BALANCE_WAKE flag for asymmetric capacity systems arm: Update arch_scale_cpu_capacity() to reflect change to define arch/arm/include/asm/topology.h | 5 + arch/arm/kernel/topology.c | 25 ++++- include/linux/sched.h | 3 +- kernel/sched/core.c | 25 ++++- kernel/sched/fair.c | 217 ++++++++++++++++++++++++++++++++++++---- kernel/sched/sched.h | 5 +- 6 files changed, 250 insertions(+), 30 deletions(-) -- 1.9.1