Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp2837160imm; Thu, 24 May 2018 17:14:29 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqVNiWtOnMOQIwe9Vc/phrLYNaEoBM0I/P6M3gKujQdAYLjVxW980TkEI+LWfJBd+6wawtI X-Received: by 2002:a17:902:6b04:: with SMTP id o4-v6mr166433plk.101.1527207269130; Thu, 24 May 2018 17:14:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527207269; cv=none; d=google.com; s=arc-20160816; b=iCFNtIRf6l5ka+m3v6MiEpn56eOyiM5UNC/razUOLhSx7F10kJ4l07X2pNwO3Jnm1R hDew9TklTxoyqwERRMDQ4rtOVaBj9chiaXSb3EVF7GVG8ZbwGT9yiAnjo45ozO2dPZqg Qk2pvI86Liw0NqV8jxeiSmrl5EJ0Orbw6syqVN6UJNyhrRb3Vw2NBXkbR4vZgiFOtaQJ dcGo3fEL3Vb+SGIPj9ioTdyY8A41Ke/abAMF6/lJK2h4GNoYUYa7egix5yjYWAlTslaj 4KaBwDnqm5CfDLVaHj0SBPyc/mP2iWrGsA6Pcjw8H2tLrUr2HtYjoDHlj6hlvtLahKuU VEQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=pZsejHDa7CBgMfPrsSZGPFHweIECCVOuqHy9Kzr2UJk=; b=E3fjLGJ2gpQdMsEOgH4L/G+zZwRgHJrxJcK2+BaqFO6aM0DON+/tE2wrTWgwz5N6VG lgmV5rhNyaJf9mbIw9etFKVQPIwgtkSg22JiH4bG4DB4lEAvhZXTkig0BIe4WA3mufRa V2GtlHG9Igd0Bn0WxnDgNGnWrc8kaHCTpe4SkXmprgujFGg/UU3LEHlUHgsfCrD3q57L TNCwdyDilkzCg7KxZd5X/xpakOYcPrG1q2hlewLUP3p3d4ZMgB5WkCmpqCwAqeR52Ym8 hefdHFB9wnRB5pwO0GZm1onNINt6S5RnQG98j417FdXHYjZ7/f7ZeRapnRlBUp/jyngT Pj/w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i62-v6si22673636pfg.218.2018.05.24.17.14.14; Thu, 24 May 2018 17:14:29 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S970409AbeEXOKo (ORCPT + 99 others); Thu, 24 May 2018 10:10:44 -0400 Received: from foss.arm.com ([217.140.101.70]:45460 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S970385AbeEXOKh (ORCPT ); Thu, 24 May 2018 10:10:37 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 493FF15AD; Thu, 24 May 2018 07:10:37 -0700 (PDT) Received: from e110439-lin.cambridge.arm.com (e110439-lin.cambridge.arm.com [10.1.210.68]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id F2A873F24A; Thu, 24 May 2018 07:10:34 -0700 (PDT) From: Patrick Bellasi To: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Cc: Ingo Molnar , Peter Zijlstra , "Rafael J . Wysocki" , Viresh Kumar , Vincent Guittot , Dietmar Eggemann , Morten Rasmussen , Juri Lelli , Joel Fernandes , Steve Muckle Subject: [PATCH v3 1/2] sched/cpufreq: always consider blocked FAIR utilization Date: Thu, 24 May 2018 15:10:22 +0100 Message-Id: <20180524141023.13765-2-patrick.bellasi@arm.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180524141023.13765-1-patrick.bellasi@arm.com> References: <20180524141023.13765-1-patrick.bellasi@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since the refactoring introduced by: commit 8f111bc357aa ("cpufreq/schedutil: Rewrite CPUFREQ_RT support") we aggregate FAIR utilization only if this class has runnable tasks. This was mainly due to avoid the risk to stay on an high frequency just because of the blocked utilization of a CPU not being properly decayed while the CPU was idle. However, since: commit 31e77c93e432 ("sched/fair: Update blocked load when newly idle") the FAIR blocked utilization is properly decayed also for IDLE CPUs. This allows us to use the FAIR blocked utilization as a safe mechanism to gracefully reduce the frequency only if no FAIR tasks show up on a CPU for a reasonable period of time. Moreover, we also reduce the frequency drops of CPUs running periodic tasks which, depending on the task periodicity and the time required for a frequency switch, was increasing the chances to introduce some undesirable performance variations. Reported-by: Vincent Guittot Signed-off-by: Patrick Bellasi Acked-by: Viresh Kumar Acked-by: Vincent Guittot Tested-by: Vincent Guittot Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Rafael J. Wysocki Cc: Vincent Guittot Cc: Viresh Kumar Cc: Joel Fernandes Cc: linux-kernel@vger.kernel.org Cc: linux-pm@vger.kernel.org --- Changes in v3: - add "Tested-by" and "Acked-by" Vincent tags Changes in v2: - add "Acked-by" Viresh tag --- kernel/sched/cpufreq_schedutil.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index e13df951aca7..28592b62b1d5 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -183,22 +183,21 @@ static void sugov_get_util(struct sugov_cpu *sg_cpu) static unsigned long sugov_aggregate_util(struct sugov_cpu *sg_cpu) { struct rq *rq = cpu_rq(sg_cpu->cpu); - unsigned long util; - if (rq->rt.rt_nr_running) { - util = sg_cpu->max; - } else { - util = sg_cpu->util_dl; - if (rq->cfs.h_nr_running) - util += sg_cpu->util_cfs; - } + if (rq->rt.rt_nr_running) + return sg_cpu->max; /* + * Utilization required by DEADLINE must always be granted while, for + * FAIR, we use blocked utilization of IDLE CPUs as a mechanism to + * gracefully reduce the frequency when no tasks show up for longer + * periods of time. + * * Ideally we would like to set util_dl as min/guaranteed freq and * util_cfs + util_dl as requested freq. However, cpufreq is not yet * ready for such an interface. So, we only do the latter for now. */ - return min(util, sg_cpu->max); + return min(sg_cpu->max, (sg_cpu->util_dl + sg_cpu->util_cfs)); } static void sugov_set_iowait_boost(struct sugov_cpu *sg_cpu, u64 time, unsigned int flags) -- 2.15.1