From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753009AbbCXPmM (ORCPT ); Tue, 24 Mar 2015 11:42:12 -0400 Received: from foss.arm.com ([217.140.101.70]:48650 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752340AbbCXPmJ (ORCPT ); Tue, 24 Mar 2015 11:42:09 -0400 Date: Tue, 24 Mar 2015 15:42:42 +0000 From: Morten Rasmussen To: Peter Zijlstra Cc: "mingo@redhat.com" , "vincent.guittot@linaro.org" , Dietmar Eggemann , "yuyang.du@intel.com" , "preeti@linux.vnet.ibm.com" , "mturquette@linaro.org" , "nico@linaro.org" , "rjw@rjwysocki.net" , Juri Lelli , "linux-kernel@vger.kernel.org" Subject: Re: [RFCv3 PATCH 33/48] sched: Energy-aware wake-up task placement Message-ID: <20150324154242.GG18994@e105550-lin.cambridge.arm.com> References: <1423074685-6336-1-git-send-email-morten.rasmussen@arm.com> <1423074685-6336-34-git-send-email-morten.rasmussen@arm.com> <20150324130058.GN23123@twins.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150324130058.GN23123@twins.programming.kicks-ass.net> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 24, 2015 at 01:00:58PM +0000, Peter Zijlstra wrote: > On Wed, Feb 04, 2015 at 06:31:10PM +0000, Morten Rasmussen wrote: > > @@ -5138,6 +5224,10 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f > > prev_cpu = cpu; > > > > if (sd_flag & SD_BALANCE_WAKE) { > > + if (energy_aware()) { > > + new_cpu = energy_aware_wake_cpu(p); > > + goto unlock; > > + } > > new_cpu = select_idle_sibling(p, prev_cpu); > > goto unlock; > > } > > So that is fundamentally wrong I think. We only care about power aware > scheduling when U < 1, after that we should do the normal thing. This > setup does not allow for that. Right, I agree that we should preferably do the normal thing for U ~= 1. We can restructure the wake-up path to follow that pattern, but we need to know U beforehand to choose the right path. U isn't just get_cpu_usage(prev_cpu) but some broader view of the of the cpu utilizations. For example, prev_cpu might be full, but everyone else is idle so we still want to try to do an energy aware wake-up on some other cpu. U could be the minium utilization of all cpus in prev_cpu's sd_llc, which is somewhat similar to what energy_aware_wake_cpu() does. I guess energy_aware_wake_cpu() could be refactored to call select_idle_sibling() if it find U ~= 1?