From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754283AbcEWK60 (ORCPT ); Mon, 23 May 2016 06:58:26 -0400 Received: from foss.arm.com ([217.140.101.70]:50097 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752165AbcEWK6Z (ORCPT ); Mon, 23 May 2016 06:58:25 -0400 From: Morten Rasmussen To: peterz@infradead.org, mingo@redhat.com Cc: dietmar.eggemann@arm.com, yuyang.du@intel.com, vincent.guittot@linaro.org, mgalbraith@suse.de, linux-kernel@vger.kernel.org, Morten Rasmussen Subject: [PATCH 00/16] sched: Clean-ups and asymmetric cpu capacity support Date: Mon, 23 May 2016 11:58:42 +0100 Message-Id: <1464001138-25063-1-git-send-email-morten.rasmussen@arm.com> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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