From patchwork Wed Dec 9 06:19:26 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Muckle X-Patchwork-Id: 57931 Delivered-To: patch@linaro.org Received: by 10.112.147.194 with SMTP id tm2csp480777lbb; Tue, 8 Dec 2015 22:22:14 -0800 (PST) X-Received: by 10.98.13.22 with SMTP id v22mr10466735pfi.125.1449642134797; Tue, 08 Dec 2015 22:22:14 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 76si10379955pft.83.2015.12.08.22.22.14; Tue, 08 Dec 2015 22:22:14 -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; dkim=neutral (body hash did not verify) header.i=@linaro-org.20150623.gappssmtp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753240AbbLIGUh (ORCPT + 28 others); Wed, 9 Dec 2015 01:20:37 -0500 Received: from mail-pf0-f172.google.com ([209.85.192.172]:35939 "EHLO mail-pf0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752166AbbLIGTo (ORCPT ); Wed, 9 Dec 2015 01:19:44 -0500 Received: by pfdd184 with SMTP id d184so24743683pfd.3 for ; Tue, 08 Dec 2015 22:19:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7p0HMPdP8gtaFNNZDCZtUeJfG+NMFwHHmjcOg30TRNM=; b=swMQivICb6f3k/KJfcXbNviNWfrn8sAbrZbiE3sJ2sEwHmYlvDk8wMGaP8t6s9An1c 7XYFewKgsF0HLPj9lj8IIrVrl8gBT11VpbVTADkMZVDZrBW+SISshsks5tcxLy+dKPBq mTu5XcNIXLmLGlyIEe46g+Ns1dXTySHd0DoD7BFR4HHP0/ViKTPMhKS+jSG8q22C+4xM 6PmfvglMYCvGFOTgiJKtXFJHxZAHA3HRuFvMPbz6vvfnNPC+EoL8v00DxwUfFo6faBqg 5w7Bi0tMcGXbkApWnxop5oVhjD60zBMs0a7t3/YfVz8ANnyjOkEzVHLOjF9nMr4wjs8J 4qNA== 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=7p0HMPdP8gtaFNNZDCZtUeJfG+NMFwHHmjcOg30TRNM=; b=HzjH02bGotm22zXTJt6Ieira7L/ff3DUjKLDZH+8NhnCMvZR4Uk7MqqOYwbwC5Aat6 61Zs5y6JpGNKo/mkUbtRLjPylbmQvvj8hH9AiywQ+2MZ3hzFbNnAT84V57WDpAMWSH+G rjZPCF0MTJOd745Q5woN53RuGiBvatLr7MznhQkklKTdvcLUqWANekDIMVlaLKjOaAUK H4aXYAlp27QY7FyAY63DE0poQ3iYWSWrkMHm6XIVPBi/kZHwW6H3ws3euMDcDc4UyI2i QiOcleI8HMe8O93/w6wF26fC0/v7zB44HZtEV66aZn/0Sq3LsqSOzOK7xB0/YqTAUcQU YAWA== X-Gm-Message-State: ALoCoQlLr4jHK7fw39r3YXxuvk3L8jPq+Kyl0psy3tqmOJrB186g4a6iWSwNFfrd+nYZT7DXrlyiUJugqb5pjOf8znPTIym/kw== X-Received: by 10.98.14.26 with SMTP id w26mr10642263pfi.110.1449641983855; Tue, 08 Dec 2015 22:19:43 -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 l84sm8643078pfb.15.2015.12.08.22.19.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 08 Dec 2015 22:19:43 -0800 (PST) From: Steve Muckle X-Google-Original-From: Steve Muckle To: Peter Zijlstra , Ingo Molnar 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: [RFCv6 PATCH 05/10] sched/{core, fair}: trigger OPP change request on fork() Date: Tue, 8 Dec 2015 22:19:26 -0800 Message-Id: <1449641971-20827-6-git-send-email-smuckle@linaro.org> X-Mailer: git-send-email 2.4.10 In-Reply-To: <1449641971-20827-1-git-send-email-smuckle@linaro.org> References: <1449641971-20827-1-git-send-email-smuckle@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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(-) -- 2.4.10 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index aa3f978..4c8c353e 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2402,7 +2402,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 904188a..1bfbbb7 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4224,7 +4224,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) @@ -4265,12 +4266,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 a88dbec..ad82274 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1139,6 +1139,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