From patchwork Thu Jul 13 05:40:54 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 107544 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp1780094qge; Wed, 12 Jul 2017 22:41:53 -0700 (PDT) X-Received: by 10.98.57.156 with SMTP id u28mr60487149pfj.111.1499924513332; Wed, 12 Jul 2017 22:41:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1499924513; cv=none; d=google.com; s=arc-20160816; b=vngQ1tm1Glhaon503gaeR1pKK5UIiPGc9pZm5VQdExgL3nONzsrc+q95J6+jFsXIuR S4HJq6Dj1emZX73M+rGM6tzn+ykke6iVJ45z4u8Tf8IeYSJ93E3wEQzP3B/OjitD1XYp szIPd4a9e2MdK8+X9vn1l0Jiuu0+x08nB1euRXVkgU/nd2pcYPAFTDXN5nT6gNizWlsq 1IcCtlmJo01upVm8dscH/Ai4fzlMk4sJjpdsdCTaGfKqd28JvpX+GWH7i4+ppfeMLGDw ecNdZRNtQWeKvKEMzCvx65OBOfoyfAttZuzfYeaGPHVdlpDDL8Fhk8ZCVWtJTBcZcllQ +9RA== 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=RBE2w4SHuIwiVdwvp+OGCzZcpUHrq5r6lq+Dgu0h5YY=; b=lK09zhxeYjmqHm95qY/IIpepDI5aIsbmaSM0CxaUzXdh80hd6mrBSACRhFp3qK7Z2F 14F01PBwCKTHUTlX2B1ot/nqmLZZJIaVN/DQRdD/0KGnQQZYhkXw1N5I9zaFxh0ZDieg dAY2qPJ/T4PZ4jldprozPo6FjGbuW8xLMUvSYJjf/mQrqJP0V5KKu/LSYAUc1csXjqoW R/pbh6rAA7UmnNOlPxbO0+/K9v5GzkmXYaEiTjH8EqmEfMZ5lrA5x+SCkM3yfXOYn8nh UDP7uls55OsFjv2qzzx6N7H7EbR073hltckUDkZSFitUQ0CvBMYh7acap7lkZyZoqLKv cLwA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.b=kHV7CYDY; 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 q6si3490263pgq.8.2017.07.12.22.41.53; Wed, 12 Jul 2017 22:41:53 -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=kHV7CYDY; 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 S1750977AbdGMFlp (ORCPT + 14 others); Thu, 13 Jul 2017 01:41:45 -0400 Received: from mail-pg0-f53.google.com ([74.125.83.53]:33171 "EHLO mail-pg0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750789AbdGMFlo (ORCPT ); Thu, 13 Jul 2017 01:41:44 -0400 Received: by mail-pg0-f53.google.com with SMTP id k14so24200771pgr.0 for ; Wed, 12 Jul 2017 22:41:39 -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=RBE2w4SHuIwiVdwvp+OGCzZcpUHrq5r6lq+Dgu0h5YY=; b=kHV7CYDYb7g27k1plp6K6BHB6z6HRHPzzjF4xzcSQhYxtpdLauN1P18tieR4/5IGGi XltXnAhzIphrgAuLywF8V5FalsS+JxvoKu5M4cl5xaBxBvMG4K51oMZZYXnqRHsl8pTL UzUumZqB3KkA44TEBt3KsietJWp7bsPODuFXo= 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=RBE2w4SHuIwiVdwvp+OGCzZcpUHrq5r6lq+Dgu0h5YY=; b=iFdBrdwC00IyUSHJwcwPsv4LD5u6Y9/zO58oqriHbNVY8GyJjxU8EWe11LTJx+ZxAl RcRUoQ9do3gw6SqV5PKeCHCJbHGoHZQEHFkSVpbpfYBNurPkGQzsd/l/sRS0zgZEY5H/ UEjn66hM+9dfE1JLgSbXNpGZn6lAZfNHxQ6UZh1lH5z00/Jyf3AeaHg2LRbrkAaAL9J3 AhxidQgSZfgAZv73qNllv90KP4sVfYO/relg0GA6SDeQnbrUTX0tO3jLzasKWx3UIg80 4c1L7zHcabAHszsc3dw8dRbceRzYF15MKposXs0aVcsWtQWL5TipPyOhzTlxC3c5gM9U 5ZaA== X-Gm-Message-State: AIVw111szNJVjs+5K7wTo8UlnMmjwaBXSTnpT7ODLRylUbcV0nw9JiZe yzULTw6/0E4SCOFF X-Received: by 10.84.174.3 with SMTP id q3mr8155025plb.289.1499924498716; Wed, 12 Jul 2017 22:41:38 -0700 (PDT) Received: from localhost ([122.171.81.230]) by smtp.gmail.com with ESMTPSA id v70sm9340499pfi.110.2017.07.12.22.41.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Jul 2017 22:41:38 -0700 (PDT) From: Viresh Kumar To: Rafael Wysocki , Jonathan Corbet , Viresh Kumar Cc: linux-pm@vger.kernel.org, Vincent Guittot , linux@dominikbrodowski.net, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC V2 3/6] cpufreq: governor: Drop min_sampling_rate Date: Thu, 13 Jul 2017 11:10:54 +0530 Message-Id: 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 463cf7e73db8..2eb3bf62393e 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 7b7839c45fba..8463f5def0f5 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 3d8c52b3b5df..00e4c40a3249 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];