From patchwork Tue Feb 23 01:22:45 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Muckle X-Patchwork-Id: 8385841 Return-Path: X-Original-To: patchwork-linux-pm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id A7095C0553 for ; Tue, 23 Feb 2016 01:24:21 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id C39B6204D8 for ; Tue, 23 Feb 2016 01:24:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C65F72047C for ; Tue, 23 Feb 2016 01:24:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756822AbcBWBYR (ORCPT ); Mon, 22 Feb 2016 20:24:17 -0500 Received: from mail-pa0-f42.google.com ([209.85.220.42]:36163 "EHLO mail-pa0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932283AbcBWBXA (ORCPT ); Mon, 22 Feb 2016 20:23:00 -0500 Received: by mail-pa0-f42.google.com with SMTP id yy13so100321789pab.3 for ; Mon, 22 Feb 2016 17:23:00 -0800 (PST) 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; bh=ni/VM2xC3QmmJI4/7fJh4BVdQeu7gON1EhNPUJ6GSW0=; b=fk4L9dzmE5BuuiUwUPjQOGVIOVCmfF4qeyy5c+1zXdZRDH01OWMaDAPyMkQ57iAVHD NluZ5QLDw4KmLMauNdBUAxBqh8/irXu2vFbYc3qCJNgcxwkP1ZXWc6wFTHfEdyO8IJiz Fbt+Uejx3fta2+tAEk6U/wRUorYpCIeJr0kpc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ni/VM2xC3QmmJI4/7fJh4BVdQeu7gON1EhNPUJ6GSW0=; b=kZ+lrLZ4zKQlYP4AiFw5a/CUUoninF2bVHUi7jA9VhpKwNN/znrxp+aGukat0lAgFf RrfK+R726aXWuH7ycSObSkGMbM2bo9XUcVkv7Cw6ejLW5IVMyzMBJlXarBViCv3t/NrH FzmMPifnF7SW+XfdCj3HA8dd4bIu6YcQM10nzNfbh7gOc+XbKJSyIvKSVNFK3ze/YuLQ z+y1Kc67OkWMaFOgMZ7K405/vhrXI4a2BOUHF5juR+wT+a8nr+QJi+/zJoiC1tMsG8Sc EM7nMWY60cty8Qn9gyYNLn6EmKGv84NHhp6jCt+BFGHDem3sHnw2tg37VW26nmYNml+T PC9Q== X-Gm-Message-State: AG10YOQlmltigFnfuwg72vB8ERq1A3xHris28zVS3jbd/+/WdpbBp47WqgU6ixYTtXYOYKzS X-Received: by 10.66.144.4 with SMTP id si4mr42570113pab.0.1456190579970; Mon, 22 Feb 2016 17:22:59 -0800 (PST) Received: from graphite.smuckle.net (cpe-75-80-155-7.san.res.rr.com. [75.80.155.7]) by smtp.gmail.com with ESMTPSA id t29sm39626789pfi.8.2016.02.22.17.22.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 22 Feb 2016 17:22:59 -0800 (PST) From: Steve Muckle X-Google-Original-From: Steve Muckle To: Peter Zijlstra , Ingo Molnar , "Rafael J. Wysocki" Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Vincent Guittot , Morten Rasmussen , Dietmar Eggemann , Juri Lelli , Patrick Bellasi , Michael Turquette , Juri Lelli Subject: [RFCv7 PATCH 05/10] sched/{core, fair}: trigger OPP change request on fork() Date: Mon, 22 Feb 2016 17:22:45 -0800 Message-Id: <1456190570-4475-6-git-send-email-smuckle@linaro.org> X-Mailer: git-send-email 2.4.10 In-Reply-To: <1456190570-4475-1-git-send-email-smuckle@linaro.org> References: <1456190570-4475-1-git-send-email-smuckle@linaro.org> Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Juri Lelli Patch "sched/fair: add triggers for OPP change requests" introduced OPP change triggers for enqueue_task_fair(), but the trigger was operating only for wakeups. Fact is that it makes sense to consider wakeup_new also (i.e., fork()), as we don't know anything about a newly created task and thus we most certainly want to jump to max OPP to not harm performance too much. However, it is not currently possible (or at least it wasn't evident to me how to do so :/) to tell new wakeups from other (non wakeup) operations. This patch introduces an additional flag in sched.h that is only set at fork() time and it is then consumed in enqueue_task_fair() for our purpose. cc: Ingo Molnar cc: Peter Zijlstra Signed-off-by: Juri Lelli Signed-off-by: Steve Muckle --- kernel/sched/core.c | 2 +- kernel/sched/fair.c | 9 +++------ kernel/sched/sched.h | 1 + 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 87ca0be..86297a2 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2553,7 +2553,7 @@ void wake_up_new_task(struct task_struct *p) #endif rq = __task_rq_lock(p); - activate_task(rq, p, 0); + activate_task(rq, p, ENQUEUE_WAKEUP_NEW); p->on_rq = TASK_ON_RQ_QUEUED; trace_sched_wakeup_new(p); check_preempt_curr(rq, p, WF_FORK); diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index f1f00a4..e7fab8f 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4308,7 +4308,8 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags) { struct cfs_rq *cfs_rq; struct sched_entity *se = &p->se; - int task_new = !(flags & ENQUEUE_WAKEUP); + int task_new = flags & ENQUEUE_WAKEUP_NEW; + int task_wakeup = flags & ENQUEUE_WAKEUP; for_each_sched_entity(se) { if (se->on_rq) @@ -4349,12 +4350,8 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags) * because we get here also during load balancing, but * in these cases it seems wise to trigger as single * request after load balancing is done. - * - * XXX: how about fork()? Do we need a special - * flag/something to tell if we are here after a - * fork() (wakeup_task_new)? */ - if (!task_new) + if (task_new || task_wakeup) update_capacity_of(cpu_of(rq)); } hrtick_update(rq); diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 17908dd..9c26be2 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1140,6 +1140,7 @@ extern const u32 sched_prio_to_wmult[40]; #endif #define ENQUEUE_REPLENISH 0x08 #define ENQUEUE_RESTORE 0x10 +#define ENQUEUE_WAKEUP_NEW 0x20 #define DEQUEUE_SLEEP 0x01 #define DEQUEUE_SAVE 0x02