From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752347AbbIOGqL (ORCPT ); Tue, 15 Sep 2015 02:46:11 -0400 Received: from mga14.intel.com ([192.55.52.115]:34295 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751327AbbIOGqJ (ORCPT ); Tue, 15 Sep 2015 02:46:09 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,533,1437462000"; d="scan'208";a="804612421" Date: Tue, 15 Sep 2015 06:56:42 +0800 From: Yuyang Du To: bsegall@google.com Cc: Morten Rasmussen , Peter Zijlstra , Dietmar Eggemann , Vincent Guittot , Steve Muckle , "mingo@redhat.com" , "daniel.lezcano@linaro.org" , "mturquette@baylibre.com" , "rjw@rjwysocki.net" , Juri Lelli , "sgurrappadi@nvidia.com" , "pang.xunlei@zte.com.cn" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH 5/6] sched/fair: Get rid of scaling utilization by capacity_orig Message-ID: <20150914225642.GB11102@intel.com> References: <55EDDD5A.70904@arm.com> <55EED99E.2040100@arm.com> <20150909201519.GB21833@intel.com> <20150910100727.GU3644@twins.programming.kicks-ass.net> <20150911002825.GA3014@intel.com> <20150911103059.GH27098@e105550-lin.cambridge.arm.com> <20150914125648.GJ27098@e105550-lin.cambridge.arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: 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 Mon, Sep 14, 2015 at 10:34:00AM -0700, bsegall@google.com wrote: > >> SCHED_LOAD_RESOLUTION and the non-SLR part of SCHED_LOAD_SHIFT are not > >> required to be the same value and should not be conflated. > >> > >> In particular, since cgroups are on the same timeline as tasks and their > >> shares are not scaled by SCHED_LOAD_SHIFT in any way (but are scaled so > >> that SCHED_LOAD_RESOLUTION is invisible), changing that part of > >> SCHED_LOAD_SHIFT would cause issues, since things can assume that nice-0 > >> = 1024. However changing SCHED_LOAD_RESOLUTION would be fine, as that is > >> an internal value to the kernel. > >> > >> In addition, changing the non-SLR part of SCHED_LOAD_SHIFT would require > >> recomputing all of prio_to_weight/wmult for the new NICE_0_LOAD. > > > > I think I follow, but doesn't that mean that the current code is broken > > too? NICE_0_LOAD changes if you change SCHED_LOAD_RESOLUTION: > > > > #define SCHED_LOAD_SHIFT (10 + SCHED_LOAD_RESOLUTION) > > #define SCHED_LOAD_SCALE (1L << SCHED_LOAD_SHIFT) > > > > #define NICE_0_LOAD SCHED_LOAD_SCALE > > #define NICE_0_SHIFT SCHED_LOAD_SHIFT > > > > To me it sounds like we need to define it the other way around: > > > > #define NICE_0_SHIFT 10 > > #define NICE_0_LOAD (1L << NICE_0_SHIFT) > > > > and then add any additional resolution bits from there to ensure that > > NICE_0_LOAD and the prio_to_weight/wmult tables are unchanged. > > No, NICE_0_LOAD is supposed to be scale_load(prio_to_weight[nice_0]), > ie including SLR. It has never been clear to me what > SCHED_LOAD_SCALE/SCHED_LOAD_SHIFT were for as opposed to NICE_0_LOAD, > and the new utilization uses of it are entirely unlinked to 1024 == NICE_0 Presume your SLR means SCHED_LOAD_RESOLUTION: 1) The introduction of (not redefinition of) SCHED_RESOLUTION_SHIFT does not change anything after macro expansion. 2) The constants in prio_to_weight[] and prio_to_wmult[] are tied to a resolution of 10bits NICE_0, i.e., 1024, I guest it is the user visible part you mentioned, so is the cgroup share. To me, it is all ok. With the SCHED_RESOLUTION_SHIFT, the basic resolution unit, it is just for us to state clearly, the NICE_0's weight has a fixed resolution of SCHED_RESOLUTION_SHIFT, or even add this: #if prio_to_weight[20] != 1 << SCHED_RESOLUTION_SHIFT error "NICE_0 weight not calibrated" #endif /* I can learn, Peter */ I guess you are saying we are conflating NICE_0 with NICE_0_LOAD. But to me, they are just integer metrics, needing a resolution respectively. That is it.