From patchwork Thu Jun 29 10:59:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 106628 Delivered-To: patch@linaro.org Received: by 10.182.135.102 with SMTP id pr6csp4553996obb; Thu, 29 Jun 2017 03:59:51 -0700 (PDT) X-Received: by 10.84.224.74 with SMTP id a10mr17164054plt.210.1498733991119; Thu, 29 Jun 2017 03:59:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1498733991; cv=none; d=google.com; s=arc-20160816; b=WQhS7c3hSpn6Gi69cTllhSJWJdsYMUyZCx3ftxHZmQ++yjJAo9PbUILfRTv+oXA4Ya mwaJWZDJvRIKoUtJsY8j5hmE2ls3djgw2u0nHnhTwa/lVHv48ZrdYMeDfBLL+fQLtcQe nVWAxoGJ27DWVa2yvIbTTKsKSbrQo5kEeUZ0ZoRGDQqWkCab+bg93L0LVCkECsK+YK4B vcUukY6J86ZGwRgf4YRtvGP9g6P3yPQmdCLJVRVHoE/ACSEQIU3m/qZb9rlbp0UBNwXs Yit5Gm39GvKC9KRDNA0jEw4tkRv51QRnMgR29UCaNy+Osc2mdXkLjdnROj7X/7OoOXZ1 ya9w== 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:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=qPVvYc84LptGQAGHA/9Dq8YtE/gBu9DViWNgekh6T5s=; b=v7HdBjJ4zf9NOzOYHo5/W11CKxx5uf8eyMU9ylKAmMmM6kDFFQCW9G3hSu6GyqKFoy YL/JikJTVDnmC97J1n+1GUsH3av9hGEOdWzJ3zaJct+RreVnHaMq2dQP2mpBoi6zlLX8 z9NpOPRfGIbFMb1/EyK8SgXW4KaQbhxFQ4DOG+Q8nYeVQfBiRPfieFQ8Nscly/xh1nvK FZ1mSCGcnztWUqtZXvbG3cXHLZYDUHq9YzA3RXQzBFVlamMcaTcOG7e61STZdLLlY9E7 WXNnK7rfeHjdUHsA6QCF82owfBobWXqi/uJHBRAWER5+T6pZw/ttIcI4XM5erc8Mi1EE jcew== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.b=KcZDiKn+; spf=pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-pm-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n1si3772598pld.585.2017.06.29.03.59.50; Thu, 29 Jun 2017 03:59:51 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.b=KcZDiKn+; spf=pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-pm-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752727AbdF2K7l (ORCPT + 14 others); Thu, 29 Jun 2017 06:59:41 -0400 Received: from mail-pg0-f53.google.com ([74.125.83.53]:36169 "EHLO mail-pg0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752658AbdF2K7Z (ORCPT ); Thu, 29 Jun 2017 06:59:25 -0400 Received: by mail-pg0-f53.google.com with SMTP id u62so46263107pgb.3 for ; Thu, 29 Jun 2017 03:59:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=qPVvYc84LptGQAGHA/9Dq8YtE/gBu9DViWNgekh6T5s=; b=KcZDiKn+tWfuhH1uxAOJ+4P8wWROURfPUmBzwTMM+o3qn3UgQ6ErBqufkK06AECdTS /V/5xZOvZ8r1+k3uVWzQaQ5vyqtm/JAdaSPglLAQwAwucfRIHEHGLnE0FbQZmIWCjnlU DhjBn3lY1urbeVaAfw4ecgWQmcg3GEtZXMuZ8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=qPVvYc84LptGQAGHA/9Dq8YtE/gBu9DViWNgekh6T5s=; b=a/6G9asd/SeXTRwL6uDTR+8ya8nX46p/Tl0JP2+IYx1UEmvchGGksYgSX32hSZuxT5 oihEJXWLzy5vqArtAneiTgRDrCJUE1CJP7Sf+nF6NgoMV7ga6yqq1Z3tv+cm7AGGnWI4 X2d3EaWkMzHQbnL4C/QU5f740bqsU+BkkhaH6aHsys23ydLVuUt+o8rS1KoXRBcdn3fA nTq6W0JLcOq+3M+EZuEcd/b9W8Vxrngax87egCFELIYMBSIAdGOIXOWcD3cUtvAGSg2E rLUOQ/ZLoRcG/vDj33v285A2zSk7w+ACB7nLn1xgD2nNS52Erc1YM8Nv5weuMladjVLK t3Fw== X-Gm-Message-State: AKS2vOzIZXOF9Vp9vSUlVHyppMOv9GW0Nfz2NaN9MO7qkJ591+HgUOuv adK6+v2H/Cd91ZK/ X-Received: by 10.101.76.140 with SMTP id m12mr14784147pgt.159.1498733963302; Thu, 29 Jun 2017 03:59:23 -0700 (PDT) Received: from localhost ([122.171.238.149]) by smtp.gmail.com with ESMTPSA id 66sm10862637pfm.82.2017.06.29.03.59.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 29 Jun 2017 03:59:22 -0700 (PDT) From: Viresh Kumar To: Rafael Wysocki , Viresh Kumar Cc: linux-pm@vger.kernel.org, Vincent Guittot , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/6] cpufreq: governor: Drop min_sampling_rate Date: Thu, 29 Jun 2017 16:29:06 +0530 Message-Id: <713af1a417a9a77f0c41976b25874687ac235e8e.1498733506.git.viresh.kumar@linaro.org> X-Mailer: git-send-email 2.13.0.71.gd7076ec9c9cb In-Reply-To: References: In-Reply-To: References: Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org The cpufreq core and governors aren't supposed to set a limit on how fast we want to try changing the frequency. This is currently done for the legacy governors with help of min_sampling_rate. At worst, we may end up setting the sampling rate to a value lower than the rate at which frequency can be changed and then one of the CPUs in the policy will be only changing frequency for ever. But that is something for the user to decide and there is no need to have special handling for such cases in the core. Leave it for the user to figure out. Signed-off-by: Viresh Kumar --- Documentation/admin-guide/pm/cpufreq.rst | 8 -------- drivers/cpufreq/cpufreq_conservative.c | 6 ------ drivers/cpufreq/cpufreq_governor.c | 10 ++-------- drivers/cpufreq/cpufreq_governor.h | 1 - drivers/cpufreq/cpufreq_ondemand.c | 12 ------------ include/linux/cpufreq.h | 2 -- 6 files changed, 2 insertions(+), 37 deletions(-) -- 2.13.0.71.gd7076ec9c9cb diff --git a/Documentation/admin-guide/pm/cpufreq.rst b/Documentation/admin-guide/pm/cpufreq.rst index 09aa2e949787..6adbe1ed58b9 100644 --- a/Documentation/admin-guide/pm/cpufreq.rst +++ b/Documentation/admin-guide/pm/cpufreq.rst @@ -471,14 +471,6 @@ it is allowed to use (the ``scaling_max_freq`` policy limit). # echo `$(($(cat cpuinfo_transition_latency) * 750 / 1000)) > ondemand/sampling_rate - -``min_sampling_rate`` - The minimum value of ``sampling_rate``. - - Equal to 10000 (10 ms) if :c:macro:`CONFIG_NO_HZ_COMMON` and - :c:data:`tick_nohz_active` are both set or to 20 times the value of - :c:data:`jiffies` in microseconds otherwise. - ``up_threshold`` If the estimated CPU load is above this value (in percent), the governor will set the frequency to the maximum value allowed for the policy. diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c index 88220ff3e1c2..f20f20a77d4d 100644 --- a/drivers/cpufreq/cpufreq_conservative.c +++ b/drivers/cpufreq/cpufreq_conservative.c @@ -246,7 +246,6 @@ gov_show_one_common(sampling_rate); gov_show_one_common(sampling_down_factor); gov_show_one_common(up_threshold); gov_show_one_common(ignore_nice_load); -gov_show_one_common(min_sampling_rate); gov_show_one(cs, down_threshold); gov_show_one(cs, freq_step); @@ -254,12 +253,10 @@ gov_attr_rw(sampling_rate); gov_attr_rw(sampling_down_factor); gov_attr_rw(up_threshold); gov_attr_rw(ignore_nice_load); -gov_attr_ro(min_sampling_rate); gov_attr_rw(down_threshold); gov_attr_rw(freq_step); static struct attribute *cs_attributes[] = { - &min_sampling_rate.attr, &sampling_rate.attr, &sampling_down_factor.attr, &up_threshold.attr, @@ -297,10 +294,7 @@ static int cs_init(struct dbs_data *dbs_data) dbs_data->up_threshold = DEF_FREQUENCY_UP_THRESHOLD; dbs_data->sampling_down_factor = DEF_SAMPLING_DOWN_FACTOR; dbs_data->ignore_nice_load = 0; - dbs_data->tuners = tuners; - dbs_data->min_sampling_rate = MIN_SAMPLING_RATE_RATIO * - jiffies_to_usecs(10); return 0; } diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c index 47e24b5384b3..858081f9c3d7 100644 --- a/drivers/cpufreq/cpufreq_governor.c +++ b/drivers/cpufreq/cpufreq_governor.c @@ -47,14 +47,11 @@ ssize_t store_sampling_rate(struct gov_attr_set *attr_set, const char *buf, { struct dbs_data *dbs_data = to_dbs_data(attr_set); struct policy_dbs_info *policy_dbs; - unsigned int rate; int ret; - ret = sscanf(buf, "%u", &rate); + ret = sscanf(buf, "%u", &dbs_data->sampling_rate); if (ret != 1) return -EINVAL; - dbs_data->sampling_rate = max(rate, dbs_data->min_sampling_rate); - /* * We are operating under dbs_data->mutex and so the list and its * entries can't be freed concurrently. @@ -437,10 +434,7 @@ int cpufreq_dbs_governor_init(struct cpufreq_policy *policy) latency = 1; /* Bring kernel and HW constraints together */ - dbs_data->min_sampling_rate = max(dbs_data->min_sampling_rate, - MIN_LATENCY_MULTIPLIER * latency); - dbs_data->sampling_rate = max(dbs_data->min_sampling_rate, - LATENCY_MULTIPLIER * latency); + dbs_data->sampling_rate = LATENCY_MULTIPLIER * latency; if (!have_governor_per_policy()) gov->gdbs_data = dbs_data; diff --git a/drivers/cpufreq/cpufreq_governor.h b/drivers/cpufreq/cpufreq_governor.h index 7cbb07512e4c..06d9f90ede93 100644 --- a/drivers/cpufreq/cpufreq_governor.h +++ b/drivers/cpufreq/cpufreq_governor.h @@ -41,7 +41,6 @@ enum {OD_NORMAL_SAMPLE, OD_SUB_SAMPLE}; struct dbs_data { struct gov_attr_set attr_set; void *tuners; - unsigned int min_sampling_rate; unsigned int ignore_nice_load; unsigned int sampling_rate; unsigned int sampling_down_factor; diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c index 3937acf7e026..6b423eebfd5d 100644 --- a/drivers/cpufreq/cpufreq_ondemand.c +++ b/drivers/cpufreq/cpufreq_ondemand.c @@ -319,7 +319,6 @@ gov_show_one_common(sampling_rate); gov_show_one_common(up_threshold); gov_show_one_common(sampling_down_factor); gov_show_one_common(ignore_nice_load); -gov_show_one_common(min_sampling_rate); gov_show_one_common(io_is_busy); gov_show_one(od, powersave_bias); @@ -329,10 +328,8 @@ gov_attr_rw(up_threshold); gov_attr_rw(sampling_down_factor); gov_attr_rw(ignore_nice_load); gov_attr_rw(powersave_bias); -gov_attr_ro(min_sampling_rate); static struct attribute *od_attributes[] = { - &min_sampling_rate.attr, &sampling_rate.attr, &up_threshold.attr, &sampling_down_factor.attr, @@ -373,17 +370,8 @@ static int od_init(struct dbs_data *dbs_data) if (idle_time != -1ULL) { /* Idle micro accounting is supported. Use finer thresholds */ dbs_data->up_threshold = MICRO_FREQUENCY_UP_THRESHOLD; - /* - * In nohz/micro accounting case we set the minimum frequency - * not depending on HZ, but fixed (very low). - */ - dbs_data->min_sampling_rate = MICRO_FREQUENCY_MIN_SAMPLE_RATE; } else { dbs_data->up_threshold = DEF_FREQUENCY_UP_THRESHOLD; - - /* For correct statistics, we need 10 ticks for each measure */ - dbs_data->min_sampling_rate = MIN_SAMPLING_RATE_RATIO * - jiffies_to_usecs(10); } dbs_data->sampling_down_factor = DEF_SAMPLING_DOWN_FACTOR; diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 54dfa1bdf138..083e7f3c23dd 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h @@ -488,9 +488,7 @@ static inline unsigned long cpufreq_scale(unsigned long old, u_int div, * ondemand governor will work on any processor with transition latency <= 10ms, * using appropriate sampling rate. */ -#define MIN_SAMPLING_RATE_RATIO (2) #define LATENCY_MULTIPLIER (1000) -#define MIN_LATENCY_MULTIPLIER (20) struct cpufreq_governor { char name[CPUFREQ_NAME_LEN];