Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp1805955ybc; Wed, 13 Nov 2019 04:43:10 -0800 (PST) X-Google-Smtp-Source: APXvYqy46zZl0V2chGE9yvOAYXVduD/BJ0QIJA39POcu/tVbfc2ADEmOiT5rHwnU6d5e3/Mk5GiU X-Received: by 2002:aa7:ca09:: with SMTP id y9mr3246092eds.101.1573648990356; Wed, 13 Nov 2019 04:43:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573648990; cv=none; d=google.com; s=arc-20160816; b=lhabmKqOmu6uqykpj8k4zduZgCQtjkpGtGh9f4eJ0qf2ddcFUCuQXgI7vylKHUWTod uEN1/bjNpzJxIxmcNkUvfdZJwYCIN1oNpw0TiYD50fZV6wKDJ1qt4bHxhW78nXgie0aP ZMKRCQI6HxccpabPVSgZHnGWW4dBo3xawkyRm1EYQEUjz2hhlL14jeLrDOoIoKXsjOGt aUobwBSpmBQm8dzmauqhDkv2bkIbmEhkcnMjVYIijQvQfjI6WrxRziu3AJ+pJ7cbkBT1 rqg/qUdtyjUsT1EsB+XlMx7QLkn6BU1uiWHMFvbXrQBM8rfogr/bkH6zMVY+RUZOvniG h/Ew== 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; bh=5ZtnwGXaEhaY+pOYuqUQAv2m6m8Ox3KaACgOl9uFQC0=; b=usvT1VWdXoIHeKCYbPk8gF8a344dlfB+LEzyXcwBpVGTaZ8XDbVzZe1uH5bLFyjO6h agg2NiX0Uk00GtR2xyEQMM9Sy6nRNwwxIhe6exNxlHnCkPT7uhPf6VDGvO/aTytHLhz7 N9rcnGoIvhxirp2h19Pzs2UwPf1MrLN1V5QD4oBhX5O8oY1nXOz7Z1ns3H+nyybqeWTz AGaE1PM3C7osRWYlFTL3Pdh3D4EcR1TNVYBW9TL9Yiiu/IDzfxGMynbFeGmnKLlxfj1M 75Z7/4lSfhHse86FWhtHYeJt4Dz5h2B+kFRl2MyewOcGM4Yui+2SD+5ZDSpuurXMfRWA FiuQ== 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 cc4si1157386edb.237.2019.11.13.04.42.46; Wed, 13 Nov 2019 04:43:10 -0800 (PST) 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 S1727376AbfKMMld (ORCPT + 99 others); Wed, 13 Nov 2019 07:41:33 -0500 Received: from mx2.suse.de ([195.135.220.15]:39312 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726548AbfKMMlV (ORCPT ); Wed, 13 Nov 2019 07:41:21 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id EDF00B558; Wed, 13 Nov 2019 12:41:19 +0000 (UTC) From: Giovanni Gherdovich To: Srinivas Pandruvada , Thomas Gleixner , Ingo Molnar , Peter Zijlstra , Borislav Petkov , Len Brown , "Rafael J . Wysocki" Cc: x86@kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Mel Gorman , Matt Fleming , Viresh Kumar , Juri Lelli , Paul Turner , Vincent Guittot , Quentin Perret , Dietmar Eggemann , Doug Smythies , Giovanni Gherdovich Subject: [PATCH v4 5/6] x86,sched: Add support for frequency invariance on ATOM Date: Wed, 13 Nov 2019 13:46:53 +0100 Message-Id: <20191113124654.18122-6-ggherdovich@suse.cz> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20191113124654.18122-1-ggherdovich@suse.cz> References: <20191113124654.18122-1-ggherdovich@suse.cz> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The scheduler needs the ratio freq_curr/freq_max for frequency-invariant accounting. On all ATOM CPUs prior to Goldmont, set freq_max to the 1-core turbo ratio. We intended to perform tests validating that this patch doesn't regress in terms of energy efficiency, given that this is the primary concern on Atom processors. Alas, we found out that turbostat doesn't support reading RAPL interfaces on our test machine (Airmont), and we don't have external equipment to measure power consumption; all we have is the performance results of the benchmarks we ran. Test machine: Platform : Dell Wyse 3040 Thin Client[1] CPU Model : Intel Atom x5-Z8350 (aka Cherry Trail, aka Airmont) Fam/Mod/Ste : 6:76:4 Topology : 1 socket, 4 cores / 4 threads Memory : 2G Storage : onboard flash, XFS filesystem [1] https://www.dell.com/en-us/work/shop/wyse-endpoints-and-software/wyse-3040-thin-client/spd/wyse-3040-thin-client Base frequency and available turbo levels (MHz): Min Operating Freq 266 |*** Low Freq Mode 800 |******** Base Freq 2400 |************************ 4 Cores 2800 |**************************** 3 Cores 2800 |**************************** 2 Cores 3200 |******************************** 1 Core 3200 |******************************** Tested kernels: Baseline : v5.4-rc1, intel_pstate passive, schedutil Comparison #1 : v5.4-rc1, intel_pstate active , powersave Comparison #2 : v5.4-rc1, this patch, intel_pstate passive, schedutil tbench, hackbench and kernbench performed the same under all three kernels; dbench ran faster with intel_pstate/powersave and the git unit tests were a lot faster with intel_pstate/powersave and invariant schedutil wrt the baseline. Not that any of this is terrbily interesting anyway, one doesn't buy an Atom system to go fast. Power consumption regressions aren't expected but we lack the equipment to make that measurement. Turbostat seems to think that reading RAPL on this machine isn't a good idea and we're trusting that decision. comparison ratio of performance with baseline; 1.00 means neutral, lower is better: I_PSTATE FREQ-INV ---------------------------------------- dbench 0.90 ~ kernbench 0.98 0.97 gitsource 0.63 0.43 Signed-off-by: Giovanni Gherdovich --- arch/x86/kernel/smpboot.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 4d192abf337d..8988177064be 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -1821,6 +1821,24 @@ static bool turbo_disabled(void) return (misc_en & MSR_IA32_MISC_ENABLE_TURBO_DISABLE); } +static bool slv_set_cpu_max_freq(u64 *ratio, u64 *turbo_ratio) +{ + int err; + + err = rdmsrl_safe(MSR_ATOM_CORE_RATIOS, ratio); + if (err) + return false; + + err = rdmsrl_safe(MSR_ATOM_CORE_TURBO_RATIOS, turbo_ratio); + if (err) + return false; + + *ratio = (*ratio >> 16) & 0x3F; /* max P state ratio */ + *turbo_ratio = *turbo_ratio & 0x3F; /* 1C turbo ratio */ + + return true; +} + #include #include @@ -1984,19 +2002,14 @@ static bool core_set_cpu_max_freq(u64 *ratio, u64 *turbo_ratio) static void intel_set_cpu_max_freq(void) { - /* - * TODO: add support for: - * - * - Atom Silvermont - * - * which all now get by default arch_max_freq = SCHED_CAPACITY_SCALE - */ - u64 ratio = 1, turbo_ratio = 1; if (turbo_disabled()) return; + if (slv_set_cpu_max_freq(&ratio, &turbo_ratio)) + goto set_value; + if (glm_set_cpu_max_freq(&ratio, &turbo_ratio)) goto set_value; -- 2.16.4