Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751385AbdGQTX3 (ORCPT ); Mon, 17 Jul 2017 15:23:29 -0400 Received: from merlin.infradead.org ([205.233.59.134]:38902 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751314AbdGQTX2 (ORCPT ); Mon, 17 Jul 2017 15:23:28 -0400 Date: Mon, 17 Jul 2017 21:23:09 +0200 From: Peter Zijlstra To: Andi Kleen Cc: "Li, Aubrey" , Frederic Weisbecker , Christoph Lameter , Aubrey Li , tglx@linutronix.de, len.brown@intel.com, rjw@rjwysocki.net, tim.c.chen@linux.intel.com, arjan@linux.intel.com, paulmck@linux.vnet.ibm.com, yang.zhang.wz@gmail.com, x86@kernel.org, linux-kernel@vger.kernel.org, daniel.lezcano@linaro.org Subject: Re: [RFC PATCH v1 00/11] Create fast idle path for short idle periods Message-ID: <20170717192309.ubn5muvc3u7htuaw@hirez.programming.kicks-ass.net> References: <20170713083649.febfflfl5hafkko5@hirez.programming.kicks-ass.net> <16e12e23-6b28-f174-7c4b-4d719225cd3b@linux.intel.com> <20170713145311.z4zxlyd2dospeoqg@hirez.programming.kicks-ass.net> <4a577bd6-20b1-abb6-2153-f9870f0a721e@linux.intel.com> <20170713182820.sn3fjitnd3mca27p@hirez.programming.kicks-ass.net> <31170ac6-9db1-f0b8-4841-f1661c8ed6e1@linux.intel.com> <20170714153818.pjauqxebxyhs6ljp@hirez.programming.kicks-ass.net> <20170714155356.GH3441@tassilo.jf.intel.com> <20170714160648.tg2u6eo2id6gmnjz@hirez.programming.kicks-ass.net> <20170714162619.GJ3441@tassilo.jf.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170714162619.GJ3441@tassilo.jf.intel.com> User-Agent: NeoMutt/20170609 (1.8.3) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1634 Lines: 40 On Fri, Jul 14, 2017 at 09:26:19AM -0700, Andi Kleen wrote: > > And as said; Daniel has been working on a better predictor -- now he's > > probably not used it on the network workload you're looking at, so that > > might be something to consider. > > Deriving a better idle predictor is a bit orthogonal to fast idle. No. If you want a different C state selected we need to fix the current C state selector. We're not going to tinker. And the predictor is probably the most fundamental part of the whole C state selection logic. Now I think the problem is that the current predictor goes for an average idle duration. This means that we, on average, get it wrong 50% of the time. For performance that's bad. If you want to improve the worst case, we need to consider a cumulative distribution function, and staying with the Gaussian assumption already present, that would mean using: 1 x - mu CDF(x) = - [ 1 + erf(-------------) ] 2 sigma sqrt(2) Where, per the normal convention mu is the average and sigma^2 the variance. See also: https://en.wikipedia.org/wiki/Normal_distribution We then solve CDF(x) = n% to find the x for which we get it wrong n% of the time (IIRC something like: 'mu - 2sigma' ends up being 5% or so). This conceptually gets us better exit latency for the cases where we got it wrong before, and practically pushes down the estimate which gets us C1 longer. Of course, this all assumes a Gaussian distribution to begin with, if we get bimodal (or worse) distributions we can still get it wrong. To fix that, we'd need to do something better than what we currently have.