From patchwork Tue May 23 08:53:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juri Lelli X-Patchwork-Id: 100356 Delivered-To: patch@linaro.org Received: by 10.140.96.100 with SMTP id j91csp217386qge; Tue, 23 May 2017 01:54:56 -0700 (PDT) X-Received: by 10.99.113.11 with SMTP id m11mr30404083pgc.45.1495529696317; Tue, 23 May 2017 01:54:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1495529696; cv=none; d=google.com; s=arc-20160816; b=ZTSTrISNdZqiSqx7I5qhqWvFVBZZvpWXRwMGkqLRdunBtNv+W5yjk7/JnEPf0JgWnz czwNuW85980TjOFbG6uvX/YqMzLfX/knwNocleEQouAJFuoGNKsuvHFzy1mDTIJ8bbZY EX/L/j21VNWWsRO8xXMRKhE1zIV7JNkj9CCENs91olMZtvCBUmorAJC+pSiEBIhx5CKV cF2/Btk8P7UEWDh0ExGvUgiTzmafEXnVvLyET3UjZNAbTf3MScxKRlEL+pLLSH9amQsn JJJAN80abt+bWoOV80XeS6xN1itLClXCadq39cGO0xpjlNKtSdG+nVJXgJVN8q926S87 45/A== 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=WLWScpiv+Gy0rD9OuE61LuxICNoU0s/5hkqpDGP924E=; b=jhS0S/dHp8Z0rAJdy78XHidzMDFjY4sSVbH9CX5VGTtV1SlbvtU7FK/4J8C35p1BwP 00WHygOXjzrqLbabB3VvSarKPXbx50RApEUpxtyETdubQNIMvKGlWEJ162GhvQR69IIT G6XEbxZkZURaZuIIR5e5peTItd8pLfrLdqZNFZTeqpbe9CmAA9nBtwHmLKrSswlX+2QX o74BuUQimyXnno27TsIGvDkTKGHR6Pku/RI1Bx55ngELZ2+BySPUfYWIsJ6leXb0C/yl ZCBL24A6SIviWrK7Yr044x2HDaDqxFhUPLhA1STRtL/mhjA3dX8UfLoKU4uGNDNyK9OA 2yIw== 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 c19si20093703pgk.90.2017.05.23.01.54.55; Tue, 23 May 2017 01:54:56 -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 S936688AbdEWIyf (ORCPT + 25 others); Tue, 23 May 2017 04:54:35 -0400 Received: from foss.arm.com ([217.140.101.70]:48082 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S936670AbdEWIyb (ORCPT ); Tue, 23 May 2017 04:54:31 -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 458BC15A1; Tue, 23 May 2017 01:54:30 -0700 (PDT) Received: from cam-smtp0.cambridge.arm.com (e106622-lin.cambridge.arm.com [10.1.211.43]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id A06C93F53D; Tue, 23 May 2017 01:54:26 -0700 (PDT) From: Juri Lelli To: peterz@infradead.org, mingo@redhat.com, rjw@rjwysocki.net, viresh.kumar@linaro.org Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, tglx@linutronix.de, vincent.guittot@linaro.org, rostedt@goodmis.org, luca.abeni@santannapisa.it, claudio@evidence.eu.com, tommaso.cucinotta@santannapisa.it, bristot@redhat.com, mathieu.poirier@linaro.org, tkjos@android.com, joelaf@google.com, andresoportus@google.com, morten.rasmussen@arm.com, dietmar.eggemann@arm.com, patrick.bellasi@arm.com, juri.lelli@arm.com, Ingo Molnar , "Rafael J . Wysocki" Subject: [PATCH RFC 1/8] sched/cpufreq_schedutil: make use of DEADLINE utilization signal Date: Tue, 23 May 2017 09:53:44 +0100 Message-Id: <20170523085351.18586-2-juri.lelli@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170523085351.18586-1-juri.lelli@arm.com> References: <20170523085351.18586-1-juri.lelli@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SCHED_DEADLINE tracks active utilization signal with a per dl_rq variable named running_bw. Make use of that to drive cpu frequency selection: add up FAIR and DEADLINE contribution to get the required CPU capacity to handle both requirements (while RT still selects max frequency). Co-authored-by: Claudio Scordino Signed-off-by: Juri Lelli Cc: Peter Zijlstra Cc: Ingo Molnar Cc: Rafael J. Wysocki Cc: Viresh Kumar Cc: Luca Abeni --- include/linux/sched/cpufreq.h | 2 -- kernel/sched/cpufreq_schedutil.c | 13 ++++++------- 2 files changed, 6 insertions(+), 9 deletions(-) -- 2.11.0 diff --git a/include/linux/sched/cpufreq.h b/include/linux/sched/cpufreq.h index d2be2ccbb372..39640bb3a8ee 100644 --- a/include/linux/sched/cpufreq.h +++ b/include/linux/sched/cpufreq.h @@ -11,8 +11,6 @@ #define SCHED_CPUFREQ_DL (1U << 1) #define SCHED_CPUFREQ_IOWAIT (1U << 2) -#define SCHED_CPUFREQ_RT_DL (SCHED_CPUFREQ_RT | SCHED_CPUFREQ_DL) - #ifdef CONFIG_CPU_FREQ struct update_util_data { void (*func)(struct update_util_data *data, u64 time, unsigned int flags); diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index 622eed1b7658..7f1913e265d1 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -160,12 +160,11 @@ static unsigned int get_next_freq(struct sugov_policy *sg_policy, static void sugov_get_util(unsigned long *util, unsigned long *max) { struct rq *rq = this_rq(); - unsigned long cfs_max; + unsigned long dl_util = (rq->dl.running_bw * SCHED_CAPACITY_SCALE) >> 20; - cfs_max = arch_scale_cpu_capacity(NULL, smp_processor_id()); + *max = arch_scale_cpu_capacity(NULL, smp_processor_id()); - *util = min(rq->cfs.avg.util_avg, cfs_max); - *max = cfs_max; + *util = min(rq->cfs.avg.util_avg + dl_util, *max); } static void sugov_set_iowait_boost(struct sugov_cpu *sg_cpu, u64 time, @@ -229,7 +228,7 @@ static void sugov_update_single(struct update_util_data *hook, u64 time, busy = sugov_cpu_is_busy(sg_cpu); - if (flags & SCHED_CPUFREQ_RT_DL) { + if (flags & SCHED_CPUFREQ_RT) { next_f = policy->cpuinfo.max_freq; } else { sugov_get_util(&util, &max); @@ -269,7 +268,7 @@ static unsigned int sugov_next_freq_shared(struct sugov_cpu *sg_cpu, u64 time) j_sg_cpu->iowait_boost = 0; continue; } - if (j_sg_cpu->flags & SCHED_CPUFREQ_RT_DL) + if (j_sg_cpu->flags & SCHED_CPUFREQ_RT) return policy->cpuinfo.max_freq; j_util = j_sg_cpu->util; @@ -305,7 +304,7 @@ static void sugov_update_shared(struct update_util_data *hook, u64 time, sg_cpu->last_update = time; if (sugov_should_update_freq(sg_policy, time)) { - if (flags & SCHED_CPUFREQ_RT_DL) + if (flags & SCHED_CPUFREQ_RT) next_f = sg_policy->policy->cpuinfo.max_freq; else next_f = sugov_next_freq_shared(sg_cpu, time); From patchwork Tue May 23 08:53:46 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juri Lelli X-Patchwork-Id: 100362 Delivered-To: patch@linaro.org Received: by 10.140.96.100 with SMTP id j91csp218316qge; Tue, 23 May 2017 01:58:21 -0700 (PDT) X-Received: by 10.99.152.9 with SMTP id q9mr30301539pgd.131.1495529901692; Tue, 23 May 2017 01:58:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1495529901; cv=none; d=google.com; s=arc-20160816; b=sy+0HzfYuLEWKFp1AoJnMMP/7kZpq8qjOjbEsEUfkkgVMjbor4zkbGmQis1BV+i88W hFokWRIXFJbp+U8068JzAUg22zwj0JLBWQb0m4kVBLPnCO7Hgv6y6smCXVTuW2PHz9Xc Pwlw/cyDDpUcw0KrUlgifJEAIzrO5h7ofQ0gNIJgs2JmfPYKU+wZFjmGXcgKqA9t3sK1 HDOS6JxGVAONmJoF2n5NBwytqUOFjT8JfNKGscGTe+HfDxYArWTG0Z+UDNvptXsd058G DPgvcdJK7qCiW8l9ptaRUwodYIZghcoQMyAXYHCGSVfWHSRK+KXkxWomQ4VZ07007fMa NN3w== 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=RiB4ffOrDdLba8Cm0oxKd3YqT7PD3X4IBJDTTHSW6AU=; b=YKgxZ1NdJR//08OHHIFWbDCP7RulmOdzWlUw2iGJj7c4jlJ85FrsWdHpZ9hYCcxS2J QbP7KvNLT0/CQyEyf7nHBplwBS6FLL3DXEz2CwOGKCp8KKMD0mQK8r58lNyPme3vCA/R e+BVnwqTkvSattLZXj74l8w/rK3desIiF5+ozbTjs8LKL2WDNRpsU3NGYXBm3cDZ/73O c0w/ByfRahhb8l6dr2GUBi9top4cYUogMztqaNFmBnBDh+2u+kgssTCCrkb4T4Bu6Rgr 1/zwybOibTA5LcgLSu6n0FpRAeVi/33VHmnOU5atG7JQFhq00WrzmNBbvFMA0fDHg7jN ItOQ== 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 g14si2730549pln.69.2017.05.23.01.58.21; Tue, 23 May 2017 01:58:21 -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 S967103AbdEWI6J (ORCPT + 25 others); Tue, 23 May 2017 04:58:09 -0400 Received: from foss.arm.com ([217.140.101.70]:48138 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S936690AbdEWIyi (ORCPT ); Tue, 23 May 2017 04:54:38 -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 10E6D15BF; Tue, 23 May 2017 01:54:38 -0700 (PDT) Received: from cam-smtp0.cambridge.arm.com (e106622-lin.cambridge.arm.com [10.1.211.43]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 6BF143F53D; Tue, 23 May 2017 01:54:34 -0700 (PDT) From: Juri Lelli To: peterz@infradead.org, mingo@redhat.com, rjw@rjwysocki.net, viresh.kumar@linaro.org Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, tglx@linutronix.de, vincent.guittot@linaro.org, rostedt@goodmis.org, luca.abeni@santannapisa.it, claudio@evidence.eu.com, tommaso.cucinotta@santannapisa.it, bristot@redhat.com, mathieu.poirier@linaro.org, tkjos@android.com, joelaf@google.com, andresoportus@google.com, morten.rasmussen@arm.com, dietmar.eggemann@arm.com, patrick.bellasi@arm.com, juri.lelli@arm.com, Ingo Molnar , "Rafael J . Wysocki" Subject: [PATCH RFC 3/8] sched/cpufreq_schedutil: make worker kthread be SCHED_DEADLINE Date: Tue, 23 May 2017 09:53:46 +0100 Message-Id: <20170523085351.18586-4-juri.lelli@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170523085351.18586-1-juri.lelli@arm.com> References: <20170523085351.18586-1-juri.lelli@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Worker kthread needs to be able to change frequency for all other threads. Make it special, just under STOP class. Signed-off-by: Juri Lelli Cc: Peter Zijlstra Cc: Ingo Molnar Cc: Rafael J. Wysocki Cc: Viresh Kumar Cc: Luca Abeni Cc: Claudio Scordino --- include/linux/sched.h | 1 + include/uapi/linux/sched.h | 1 + kernel/sched/core.c | 19 +++++++++++++++++-- kernel/sched/cpufreq_schedutil.c | 15 ++++++++++++--- kernel/sched/deadline.c | 6 ++++++ kernel/sched/sched.h | 8 +++++++- 6 files changed, 44 insertions(+), 6 deletions(-) -- 2.11.0 diff --git a/include/linux/sched.h b/include/linux/sched.h index 8127f8bbef56..fd30bec5e199 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1360,6 +1360,7 @@ extern int idle_cpu(int cpu); extern int sched_setscheduler(struct task_struct *, int, const struct sched_param *); extern int sched_setscheduler_nocheck(struct task_struct *, int, const struct sched_param *); extern int sched_setattr(struct task_struct *, const struct sched_attr *); +extern int sched_setattr_nocheck(struct task_struct *, const struct sched_attr *); extern struct task_struct *idle_task(int cpu); /** diff --git a/include/uapi/linux/sched.h b/include/uapi/linux/sched.h index e2a6c7b3510b..72723859ef74 100644 --- a/include/uapi/linux/sched.h +++ b/include/uapi/linux/sched.h @@ -48,5 +48,6 @@ */ #define SCHED_FLAG_RESET_ON_FORK 0x01 #define SCHED_FLAG_RECLAIM 0x02 +#define SCHED_FLAG_SPECIAL 0x04 #endif /* _UAPI_LINUX_SCHED_H */ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 7fc2011c3ce7..ba57e2ef9aef 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2495,6 +2495,9 @@ static int dl_overflow(struct task_struct *p, int policy, u64 new_bw = dl_policy(policy) ? to_ratio(period, runtime) : 0; int cpus, err = -1; + if (attr->sched_flags & SCHED_FLAG_SPECIAL) + return 0; + /* !deadline task may carry old deadline bandwidth */ if (new_bw == p->dl.dl_bw && task_has_dl_policy(p)) return 0; @@ -4119,6 +4122,10 @@ __getparam_dl(struct task_struct *p, struct sched_attr *attr) static bool __checkparam_dl(const struct sched_attr *attr) { + /* special dl tasks don't actually use any parameter */ + if (attr->sched_flags & SCHED_FLAG_SPECIAL) + return true; + /* deadline != 0 */ if (attr->sched_deadline == 0) return false; @@ -4205,7 +4212,9 @@ static int __sched_setscheduler(struct task_struct *p, } if (attr->sched_flags & - ~(SCHED_FLAG_RESET_ON_FORK | SCHED_FLAG_RECLAIM)) + ~(SCHED_FLAG_RESET_ON_FORK | + SCHED_FLAG_RECLAIM | + SCHED_FLAG_SPECIAL)) return -EINVAL; /* @@ -4327,7 +4336,8 @@ static int __sched_setscheduler(struct task_struct *p, } #endif #ifdef CONFIG_SMP - if (dl_bandwidth_enabled() && dl_policy(policy)) { + if (dl_bandwidth_enabled() && dl_policy(policy) && + !(attr->sched_flags & SCHED_FLAG_SPECIAL)) { cpumask_t *span = rq->rd->span; /* @@ -4457,6 +4467,11 @@ int sched_setattr(struct task_struct *p, const struct sched_attr *attr) } EXPORT_SYMBOL_GPL(sched_setattr); +int sched_setattr_nocheck(struct task_struct *p, const struct sched_attr *attr) +{ + return __sched_setscheduler(p, attr, false, true); +} + /** * sched_setscheduler_nocheck - change the scheduling policy and/or RT priority of a thread from kernelspace. * @p: the task in question. diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index 7f1913e265d1..1508109c7f19 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -421,7 +421,16 @@ static void sugov_policy_free(struct sugov_policy *sg_policy) static int sugov_kthread_create(struct sugov_policy *sg_policy) { struct task_struct *thread; - struct sched_param param = { .sched_priority = MAX_USER_RT_PRIO / 2 }; + struct sched_attr attr = { + .size = sizeof(struct sched_attr), + .sched_policy = SCHED_DEADLINE, + .sched_flags = SCHED_FLAG_SPECIAL, + .sched_nice = 0, + .sched_priority = 0, + .sched_runtime = 0, + .sched_deadline = 0, + .sched_period = 0, + }; struct cpufreq_policy *policy = sg_policy->policy; int ret; @@ -439,10 +448,10 @@ static int sugov_kthread_create(struct sugov_policy *sg_policy) return PTR_ERR(thread); } - ret = sched_setscheduler_nocheck(thread, SCHED_FIFO, ¶m); + ret = sched_setattr_nocheck(thread, &attr); if (ret) { kthread_stop(thread); - pr_warn("%s: failed to set SCHED_FIFO\n", __func__); + pr_warn("%s: failed to set SCHED_DEADLINE\n", __func__); return ret; } diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index fed54b078240..5ee4fd9b1c7f 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -187,6 +187,9 @@ static void task_non_contending(struct task_struct *p) if (dl_se->dl_runtime == 0) return; + if (unlikely(dl_entity_is_special(dl_se))) + return; + WARN_ON(hrtimer_active(&dl_se->inactive_timer)); WARN_ON(dl_se->dl_non_contending); @@ -1036,6 +1039,9 @@ static void update_curr_dl(struct rq *rq) sched_rt_avg_update(rq, delta_exec); + if (unlikely(dl_entity_is_special(dl_se))) + return; + if (unlikely(dl_se->flags & SCHED_FLAG_RECLAIM)) delta_exec = grub_reclaim(delta_exec, rq, &curr->dl); dl_se->runtime -= delta_exec; diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index f1e400c6403c..e48cc8762e04 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -155,13 +155,19 @@ static inline int task_has_dl_policy(struct task_struct *p) return dl_policy(p->policy); } +static inline int dl_entity_is_special(struct sched_dl_entity *dl_se) +{ + return dl_se->flags & SCHED_FLAG_SPECIAL; +} + /* * Tells if entity @a should preempt entity @b. */ static inline bool dl_entity_preempt(struct sched_dl_entity *a, struct sched_dl_entity *b) { - return dl_time_before(a->deadline, b->deadline); + return dl_entity_is_special(a) || + dl_time_before(a->deadline, b->deadline); } /* From patchwork Tue May 23 08:53:47 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juri Lelli X-Patchwork-Id: 100359 Delivered-To: patch@linaro.org Received: by 10.140.96.100 with SMTP id j91csp217436qge; Tue, 23 May 2017 01:55:08 -0700 (PDT) X-Received: by 10.84.241.77 with SMTP id u13mr34117294plm.28.1495529708211; Tue, 23 May 2017 01:55:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1495529708; cv=none; d=google.com; s=arc-20160816; b=kgTu7bc/uT8dOPowmrHxQmAmHWCY2HP9tcpVFjFUojpxCnPRzbN8Bdin8b/QjF9LfL HFBzjexqgCk55bDX48rdJWL6cZYA2RAGeyttFRUWgxfPZmm1OUt6s/04f6DadsYl2L21 GKTTgpJN84RCTZjyQPhK57K5nsQLA749V+/FByxSGymDTgMVGc7FhC+vEJosv7vS4b7o NwCCwKjpAcOyakXFD2RP1nPma8An6K/TOq2w9+LujT66GWW1hx5HwLxlmUqjlg22gNlA z4uvUVYDWHEuq/uJ0yib4PNxE9iKvjKP4+uNtHxGo4cvZJh9ZcgQIgimRvXOXqR36rtK xH9w== 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=2H/1Ue2sjwX99zwCvA18E5Q8FF7K/KAaCU+mH4JilZo=; b=e3QLBis7I8MNE7y9BBGg7z/X+C9FQ92botgby5UITeT3oD7ahPNTFh7wsT8b96KYka HiiWbgPmcacJLN1yv0ektKoSl5b59j1BLAOizMhB1/85gm/otpQph2J/I+vEM2I960mC rjVTF7+UGVJwtvieUsY/4z+pl70xQgMnaPuzG9Lcsk5rLNPy13JUdEwNV3LwktHjAZx8 arJsJxVCvJHdKD76Lw59dBLpBXuMq3z58crqRqlOr4SVgIPDhikqv/S9X4CBRA7ZfjmW cBRpJsepzAeGfiEoT95JcCv6qVBcyy4rcBRIp2eXNhZ2b3RfkpOz11BsVGjuRAELZ6Lg uRWQ== 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 84si18207087pfx.319.2017.05.23.01.55.07; Tue, 23 May 2017 01:55:08 -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 S936725AbdEWIy6 (ORCPT + 25 others); Tue, 23 May 2017 04:54:58 -0400 Received: from foss.arm.com ([217.140.101.70]:48170 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S967029AbdEWIyw (ORCPT ); Tue, 23 May 2017 04:54:52 -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 EF535164F; Tue, 23 May 2017 01:54:41 -0700 (PDT) Received: from cam-smtp0.cambridge.arm.com (e106622-lin.cambridge.arm.com [10.1.211.43]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 5479E3F53D; Tue, 23 May 2017 01:54:38 -0700 (PDT) From: Juri Lelli To: peterz@infradead.org, mingo@redhat.com, rjw@rjwysocki.net, viresh.kumar@linaro.org Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, tglx@linutronix.de, vincent.guittot@linaro.org, rostedt@goodmis.org, luca.abeni@santannapisa.it, claudio@evidence.eu.com, tommaso.cucinotta@santannapisa.it, bristot@redhat.com, mathieu.poirier@linaro.org, tkjos@android.com, joelaf@google.com, andresoportus@google.com, morten.rasmussen@arm.com, dietmar.eggemann@arm.com, patrick.bellasi@arm.com, juri.lelli@arm.com, Ingo Molnar , "Rafael J . Wysocki" Subject: [PATCH RFC 4/8] sched/cpufreq_schedutil: split utilization signals Date: Tue, 23 May 2017 09:53:47 +0100 Message-Id: <20170523085351.18586-5-juri.lelli@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170523085351.18586-1-juri.lelli@arm.com> References: <20170523085351.18586-1-juri.lelli@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org To be able to treat utilization signals of different scheduling classes in different ways (e.g., CFS signal might be stale while DEADLINE signal is never stale by design) we need to split sugov_cpu::util signal in two: util_cfs and util_dl. This patch does that by also changing sugov_get_util() parameter list. After this change aggregation of the different signals has to be performed by sugov_get_util() users (so that they can decide what to do with the different signals). Suggested-by: Rafael J. Wysocki Signed-off-by: Juri Lelli Cc: Peter Zijlstra Cc: Ingo Molnar Cc: Rafael J. Wysocki Cc: Viresh Kumar Cc: Luca Abeni Cc: Claudio Scordino --- kernel/sched/cpufreq_schedutil.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) -- 2.11.0 diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index 1508109c7f19..f930cec4c3d4 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -58,7 +58,8 @@ struct sugov_cpu { u64 last_update; /* The fields below are only needed when sharing a policy. */ - unsigned long util; + unsigned long util_cfs; + unsigned long util_dl; unsigned long max; unsigned int flags; @@ -157,14 +158,13 @@ static unsigned int get_next_freq(struct sugov_policy *sg_policy, return cpufreq_driver_resolve_freq(policy, freq); } -static void sugov_get_util(unsigned long *util, unsigned long *max) +static void sugov_get_util(struct sugov_cpu *sg_cpu) { struct rq *rq = this_rq(); - unsigned long dl_util = (rq->dl.running_bw * SCHED_CAPACITY_SCALE) >> 20; - *max = arch_scale_cpu_capacity(NULL, smp_processor_id()); - - *util = min(rq->cfs.avg.util_avg + dl_util, *max); + sg_cpu->max = arch_scale_cpu_capacity(NULL, smp_processor_id()); + sg_cpu->util_cfs = rq->cfs.avg.util_avg; + sg_cpu->util_dl = (rq->dl.running_bw * SCHED_CAPACITY_SCALE) >> 20; } static void sugov_set_iowait_boost(struct sugov_cpu *sg_cpu, u64 time, @@ -231,7 +231,9 @@ static void sugov_update_single(struct update_util_data *hook, u64 time, if (flags & SCHED_CPUFREQ_RT) { next_f = policy->cpuinfo.max_freq; } else { - sugov_get_util(&util, &max); + sugov_get_util(sg_cpu); + max = sg_cpu->max; + util = min(sg_cpu->util_cfs + sg_cpu->util_dl, max); sugov_iowait_boost(sg_cpu, &util, &max); next_f = get_next_freq(sg_policy, util, max); /* @@ -271,8 +273,8 @@ static unsigned int sugov_next_freq_shared(struct sugov_cpu *sg_cpu, u64 time) if (j_sg_cpu->flags & SCHED_CPUFREQ_RT) return policy->cpuinfo.max_freq; - j_util = j_sg_cpu->util; j_max = j_sg_cpu->max; + j_util = min(j_sg_cpu->util_cfs + j_sg_cpu->util_dl, j_max); if (j_util * max > j_max * util) { util = j_util; max = j_max; @@ -289,15 +291,12 @@ static void sugov_update_shared(struct update_util_data *hook, u64 time, { struct sugov_cpu *sg_cpu = container_of(hook, struct sugov_cpu, update_util); struct sugov_policy *sg_policy = sg_cpu->sg_policy; - unsigned long util, max; unsigned int next_f; - sugov_get_util(&util, &max); raw_spin_lock(&sg_policy->update_lock); - sg_cpu->util = util; - sg_cpu->max = max; + sugov_get_util(sg_cpu); sg_cpu->flags = flags; sugov_set_iowait_boost(sg_cpu, time, flags); From patchwork Tue May 23 08:53:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juri Lelli X-Patchwork-Id: 100358 Delivered-To: patch@linaro.org Received: by 10.140.96.100 with SMTP id j91csp217404qge; Tue, 23 May 2017 01:55:00 -0700 (PDT) X-Received: by 10.99.167.78 with SMTP id w14mr3844999pgo.228.1495529700218; Tue, 23 May 2017 01:55:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1495529700; cv=none; d=google.com; s=arc-20160816; b=Sw3cy1mgXAyVK1wbOEqur58xnN+yGzkmSMpBczOwcy+yyDQUGGsAUSRsq9mp84ns3n P75syV+Stb/xkRtKA0n7ufxaOSrjXWeFS98I+kt744JKVA8ePsVYknKngLbSULfQLU2W ygL9PViabiwmtrG2i684ZnjH3U93SGhoYN1cjWHVLOdPGgDA/t2THOwljvMnjiCoQdGc mY9pp1i9guRmscoDlTjnq3yfCPgZApECyqBg5CQjVLbpKOZoqEPWJLLguCEj+O4OdiMD 7fVQX2sc1bze89ZSBftSDb1EoyedV8478gMfSaqgjCfuJicneTIoG77+HgtCsau3WI2M xXhA== 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=/ZdBMt7jjUlBcyc9f9COB7Ylf8ehMBDCVoHEvBE1Fwk=; b=g7CbBRkImFcLjrMYgOUp9MnBsDszKsHERt5jMU+EMNags4ji1EauGuLs9XSUUGiDnf KRW3t16O4a3xgs8vzjXNBl3qGbakfnhdz8YcBaobryPaV5i7d6yrv5ApYcvhndv+R8Dz ku09LE+M5Ash95W1LW3Bo9kCUzpLPhf3qgmtlQbfeu60A34/q4C3lTM1aZtlLnlxW56V tV0dPpCq0Xe8DweAwQGk0SunJX+tpqcnyi0OM7FRnjTBowrn4Vs9z8a5VRYDqIJTSwNS kay/jg8Fd1ONwqsj+6giEM6BJbUMlScGD6W7GxLrUKx+K/9sAjWvaEMwAecNX1qsAtDx ZAUQ== 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 7si20168741pfs.253.2017.05.23.01.54.59; Tue, 23 May 2017 01:55:00 -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 S936707AbdEWIyz (ORCPT + 25 others); Tue, 23 May 2017 04:54:55 -0400 Received: from foss.arm.com ([217.140.101.70]:48206 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S967058AbdEWIyu (ORCPT ); Tue, 23 May 2017 04:54:50 -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 E5B6E1684; Tue, 23 May 2017 01:54:49 -0700 (PDT) Received: from cam-smtp0.cambridge.arm.com (e106622-lin.cambridge.arm.com [10.1.211.43]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 252AD3F53D; Tue, 23 May 2017 01:54:46 -0700 (PDT) From: Juri Lelli To: peterz@infradead.org, mingo@redhat.com, rjw@rjwysocki.net, viresh.kumar@linaro.org Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, tglx@linutronix.de, vincent.guittot@linaro.org, rostedt@goodmis.org, luca.abeni@santannapisa.it, claudio@evidence.eu.com, tommaso.cucinotta@santannapisa.it, bristot@redhat.com, mathieu.poirier@linaro.org, tkjos@android.com, joelaf@google.com, andresoportus@google.com, morten.rasmussen@arm.com, dietmar.eggemann@arm.com, patrick.bellasi@arm.com, juri.lelli@arm.com, Ingo Molnar Subject: [PATCH RFC 6/8] sched/sched.h: remove sd arch_scale_freq_capacity parameter Date: Tue, 23 May 2017 09:53:49 +0100 Message-Id: <20170523085351.18586-7-juri.lelli@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170523085351.18586-1-juri.lelli@arm.com> References: <20170523085351.18586-1-juri.lelli@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org sd parameter is never used in arch_scale_freq_capacity (and it's hard to see where information coming from scheduling domains might help doing frequency invariance scaling). Remove it; also in anticipation of moving arch_scale_freq_capacity outside CONFIG_SMP. Signed-off-by: Juri Lelli Cc: Peter Zijlstra Cc: Ingo Molnar --- kernel/sched/fair.c | 2 +- kernel/sched/sched.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) -- 2.11.0 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 219fe58e3023..b0f31064bbbd 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -2812,7 +2812,7 @@ accumulate_sum(u64 delta, int cpu, struct sched_avg *sa, u32 contrib = (u32)delta; /* p == 0 -> delta < 1024 */ u64 periods; - scale_freq = arch_scale_freq_capacity(NULL, cpu); + scale_freq = arch_scale_freq_capacity(cpu); scale_cpu = arch_scale_cpu_capacity(NULL, cpu); delta += sa->period_contrib; diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index e48cc8762e04..063fd8c47e75 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1641,7 +1641,7 @@ extern void sched_avg_update(struct rq *rq); #ifndef arch_scale_freq_capacity static __always_inline -unsigned long arch_scale_freq_capacity(struct sched_domain *sd, int cpu) +unsigned long arch_scale_freq_capacity(int cpu) { return SCHED_CAPACITY_SCALE; } @@ -1660,7 +1660,7 @@ unsigned long arch_scale_cpu_capacity(struct sched_domain *sd, int cpu) static inline void sched_rt_avg_update(struct rq *rq, u64 rt_delta) { - rq->rt_avg += rt_delta * arch_scale_freq_capacity(NULL, cpu_of(rq)); + rq->rt_avg += rt_delta * arch_scale_freq_capacity(cpu_of(rq)); sched_avg_update(rq); } #else From patchwork Tue May 23 08:53:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juri Lelli X-Patchwork-Id: 100361 Delivered-To: patch@linaro.org Received: by 10.140.96.100 with SMTP id j91csp217793qge; Tue, 23 May 2017 01:56:23 -0700 (PDT) X-Received: by 10.99.250.69 with SMTP id g5mr30719299pgk.11.1495529783798; Tue, 23 May 2017 01:56:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1495529783; cv=none; d=google.com; s=arc-20160816; b=U7xQsBaCNPtRPItEWlgBNLaU2QbkN4+1wYnxjxVtoePiXJpZa6MkRllk/sDoNZeo1h hhqISEwCFWZDOAa/tDJTMdzDqc7M7Vcm6pKlNzt9vKq+SZz0LClERmcWSwKjcu24ETHw aBkgXmpGCEJLhgvNSq4f7UZq1f0TX4pdm7jmlDrMrLoqlai5iiXp6Jk497fEIatlUG3V Oe68f9m0r517lGeHsDQBR26B7++VNGXsCNtavMCwzQLbD6MNsqMJ6NyniUnC3VSh494v iczVlpK3RW2SWkE/npvoaVl2VGiJ8QZyDSy7CaVPNq7D1z3neshYxf5GNTl5K3qRdUJm NECQ== 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=hZy+2513ohGSaHfhQxnsVM88dcNtzdeOy0hLyP60rq4=; b=quh2se8zili87Ptsu5kfXw8Em7QudePB0UU5RMbQrHr3Gr6vGTTc/jFHc4PlNt+9ol ntJlGlbsD3eqg3Xn4ldTI51NBwUGZVjtWJ/aANlelHQ4kXRSiyVE3JYLatNz1Qyb6Wi1 mawbVnlsXEoxXXNblchR6Z6ZFTDGdlzZEgD3BSpVoxcV1gnNR25vdVv2wxqXiOQ2Uym3 Xq5jPkdY5EwiZFuIHmgViwyn2xgy4rZyD88HRu7A9w3DrCI7I7WBE8Vn4Rkh/eDxHgLy ThgRM0zvrYL79L69PEQv4y6dYJQZoY6gFyx+kHVzfqbv6DKtDIsuRH558NDneqGyHnTf DKJQ== 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 r184si20343188pgr.157.2017.05.23.01.56.23; Tue, 23 May 2017 01:56:23 -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 S936791AbdEWI4T (ORCPT + 25 others); Tue, 23 May 2017 04:56:19 -0400 Received: from foss.arm.com ([217.140.101.70]:48234 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932873AbdEWIyy (ORCPT ); Tue, 23 May 2017 04:54:54 -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 F2F27344; Tue, 23 May 2017 01:54:53 -0700 (PDT) Received: from cam-smtp0.cambridge.arm.com (e106622-lin.cambridge.arm.com [10.1.211.43]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 33FC13F53D; Tue, 23 May 2017 01:54:50 -0700 (PDT) From: Juri Lelli To: peterz@infradead.org, mingo@redhat.com, rjw@rjwysocki.net, viresh.kumar@linaro.org Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, tglx@linutronix.de, vincent.guittot@linaro.org, rostedt@goodmis.org, luca.abeni@santannapisa.it, claudio@evidence.eu.com, tommaso.cucinotta@santannapisa.it, bristot@redhat.com, mathieu.poirier@linaro.org, tkjos@android.com, joelaf@google.com, andresoportus@google.com, morten.rasmussen@arm.com, dietmar.eggemann@arm.com, patrick.bellasi@arm.com, juri.lelli@arm.com, Ingo Molnar Subject: [PATCH RFC 7/8] sched/sched.h: move arch_scale_{freq, cpu}_capacity outside CONFIG_SMP Date: Tue, 23 May 2017 09:53:50 +0100 Message-Id: <20170523085351.18586-8-juri.lelli@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170523085351.18586-1-juri.lelli@arm.com> References: <20170523085351.18586-1-juri.lelli@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, frequency and cpu capacity scaling is only performed on CONFIG_SMP system (as CFS PELT signals are only present for such systems as well). However, other scheduling class want to do freq/cpu scaling as well, and for !CONFIG_SMP configurations too. arch_scale_freq_capacity is useful to implement frequency scaling even on !CONFIG_SMP platforms, so we simply move it outside CONFIG_SMP ifdeffery. Even if arch_scale_cpu_capacity is not useful on !CONFIG_SMP platforms, we make a default implementation available for such configurations anyway to simplify scheduler code doing CPU scale invariance. Signed-off-by: Juri Lelli Cc: Peter Zijlstra Cc: Ingo Molnar --- include/linux/sched/topology.h | 12 ++++++------ kernel/sched/sched.h | 13 ++++++++++--- 2 files changed, 16 insertions(+), 9 deletions(-) -- 2.11.0 diff --git a/include/linux/sched/topology.h b/include/linux/sched/topology.h index 7d065abc7a47..953cf4f889ec 100644 --- a/include/linux/sched/topology.h +++ b/include/linux/sched/topology.h @@ -6,6 +6,12 @@ #include /* + * Increase resolution of cpu_capacity calculations + */ +#define SCHED_CAPACITY_SHIFT SCHED_FIXEDPOINT_SHIFT +#define SCHED_CAPACITY_SCALE (1L << SCHED_CAPACITY_SHIFT) + +/* * sched-domains (multiprocessor balancing) declarations: */ #ifdef CONFIG_SMP @@ -26,12 +32,6 @@ #define SD_OVERLAP 0x2000 /* sched_domains of this level overlap */ #define SD_NUMA 0x4000 /* cross-node balancing */ -/* - * Increase resolution of cpu_capacity calculations - */ -#define SCHED_CAPACITY_SHIFT SCHED_FIXEDPOINT_SHIFT -#define SCHED_CAPACITY_SCALE (1L << SCHED_CAPACITY_SHIFT) - #ifdef CONFIG_SCHED_SMT static inline int cpu_smt_flags(void) { diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 063fd8c47e75..cc474c62cd18 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1636,9 +1636,6 @@ static inline int hrtick_enabled(struct rq *rq) #endif /* CONFIG_SCHED_HRTICK */ -#ifdef CONFIG_SMP -extern void sched_avg_update(struct rq *rq); - #ifndef arch_scale_freq_capacity static __always_inline unsigned long arch_scale_freq_capacity(int cpu) @@ -1647,6 +1644,9 @@ unsigned long arch_scale_freq_capacity(int cpu) } #endif +#ifdef CONFIG_SMP +extern void sched_avg_update(struct rq *rq); + #ifndef arch_scale_cpu_capacity static __always_inline unsigned long arch_scale_cpu_capacity(struct sched_domain *sd, int cpu) @@ -1664,6 +1664,13 @@ static inline void sched_rt_avg_update(struct rq *rq, u64 rt_delta) sched_avg_update(rq); } #else +#ifndef arch_scale_cpu_capacity +static __always_inline +unsigned long arch_scale_cpu_capacity(void __always_unused *sd, int cpu) +{ + return SCHED_CAPACITY_SCALE; +} +#endif static inline void sched_rt_avg_update(struct rq *rq, u64 rt_delta) { } static inline void sched_avg_update(struct rq *rq) { } #endif