Received: by 10.223.164.221 with SMTP id h29csp526136wrb; Sat, 28 Oct 2017 03:02:25 -0700 (PDT) X-Google-Smtp-Source: ABhQp+RBge07LxlNt0k14xkwmzhcBukv8GMZEgzDBIqX1YVjMNBIHVLPMdpZTkwbS81JF9Fw1KBv X-Received: by 10.84.168.35 with SMTP id e32mr2562237plb.294.1509184945672; Sat, 28 Oct 2017 03:02:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1509184945; cv=none; d=google.com; s=arc-20160816; b=W1eFVBtRY9aLrxamuonwHsnd0d3e/TktaICaPIDlXjD4pXV+fM3DLp4qegc2x1MqZQ wdznn342LAijpnETKNGIY/fV8mv80kdr76iMXkwWU9jvg0fFI6VMqEa19FMOPQ5D2Fit iD9a42Ki4W9/0vCNIsZWCRygjAJ/TOAhqucLgGrI4F72B91sZ/GOexSSe5NyF21ztFlk OInnrfp45MzrhDxirzZ732fcbYCLvXpPLzXscf5408KT8Vjjf4hw8ZvUW9Y+NqROcVZL 6rhKTgRk33wP8UIsCGsNyYDzpBriHqTYAgzarL2QsjH7ihsVTlv57hpoxstSVAIWI29l 910Q== 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:dkim-signature:arc-authentication-results; bh=6YgBoFgc3VbMw3uJOC2b6ThirT9J9gHoVettX7XYvl0=; b=XnKnVdLPgjDtZAGKKU4vnxrYtGsbySKC9g6QJrTq67Q2UdmC06iDp9vbkA+Alb/+dH GokwKZDO0ARYUOZmz+w46qvzQpuNJ1JYB3lDvlIU4mnVRhFHlqMp9vjpkbBcsEgtIFsV s73yq38AMDDMKcqIRjy642rqJNssB8wKbLcEg1Kz4BG85DD2P1G4PLsYM/YTYsNbbbbV TI6TX7aB+nImyQWGUqMu5k8aIcJx2yWBDyW8y6rN7Elc2y1N8nzl/77AnXfKiKm5X6pU vLJh0Ax5jsBZ48CzgnS8uDb1egu+JIcVOg21jNQBwAeLCSmjIyBtZm/STJZrevycVPK7 8Mhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=SPItA0Ys; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f26si6784731pff.119.2017.10.28.03.02.12; Sat, 28 Oct 2017 03:02:25 -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; dkim=pass header.i=@google.com header.s=20161025 header.b=SPItA0Ys; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751515AbdJ1KAU (ORCPT + 99 others); Sat, 28 Oct 2017 06:00:20 -0400 Received: from mail-qt0-f195.google.com ([209.85.216.195]:43883 "EHLO mail-qt0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751392AbdJ1KAH (ORCPT ); Sat, 28 Oct 2017 06:00:07 -0400 Received: by mail-qt0-f195.google.com with SMTP id j58so11210692qtj.0 for ; Sat, 28 Oct 2017 03:00:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6YgBoFgc3VbMw3uJOC2b6ThirT9J9gHoVettX7XYvl0=; b=SPItA0YsiE0JGfOo4Hnr8kAub0tT5qmybdp5LCNGcS0eBjQ3uDHLeFj74ybq6dQ6O1 wxLG/lgv4sTO4OnAeg9n8IM454cenpCmGjxLq5Hi7z2NYoh3cVAP98dnlZsslTRVFVeD TenBdKWn/vm0T5Y+yKRyB9Y9oV0yJ75jkuIzs4cbB2pTU6C9wBNDzG1nC58iYYzWn2Ob EPLoKn9Z97Z8MppBijf0NEH3rpLZgcuHibngTHM7qQZ1lDN4+rR3X0+tcave2EJZPtjY 1qjq55+Xae51gEJ/uFU/Gy0ZwLMVYyIBFkM7ZrDlXX5whimV/Ce5UpNlWSSoOTSrcGFD mVfA== 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; bh=6YgBoFgc3VbMw3uJOC2b6ThirT9J9gHoVettX7XYvl0=; b=kMvixGXr3WZ+Oggf2/vf5px1TIIh0Gsoo+LGSBSEG2Om3hy1LBvBbkbiNJYIHPVyfp xWkKxrBUmUAmWmdO+i6880n8itCFdeexBjB90/j77cj0X+sK5XXuMWye7QbQ9cqRFMWk Mdu0NfwVJZtvE3OA7HrW5RZkplSEpQDE60sEn68J/lDSAhtI/0qKlLHYDlYkiN4oHwwb tQFAVfoOxi4cVA6dTk0xT+IYQnDpFAnXJ9aHHBJupjh8L21ftygSQ+whJprH5TJ1cv9i z1wwo8KNn7bYtwnkcTGrmTI6W/QxmyhIyiS+fVgXoHY00JloyGUGN9+vKoKI4hvaucwg Ra7g== X-Gm-Message-State: AMCzsaUdvhd/oaPs+alBScMo296RiMtKViPY06vs9gZmum/PEy+A75uu tZRydZeHWLsu7UnnH/ttlk2vOsw0k6k= X-Received: by 10.200.24.185 with SMTP id s54mr5237441qtj.328.1509184805644; Sat, 28 Oct 2017 03:00:05 -0700 (PDT) Received: from joelaf-glaptop0.hsd1.va.comcast.net (c-76-123-2-128.hsd1.va.comcast.net. [76.123.2.128]) by smtp.gmail.com with ESMTPSA id g47sm6806117qtc.1.2017.10.28.03.00.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 28 Oct 2017 03:00:05 -0700 (PDT) From: Joel Fernandes To: linux-kernel@vger.kernel.org Cc: Joel Fernandes , "Rafael J . Wysocki" , Viresh Kumar , Ingo Molnar , Peter Zijlstra , "Cc: Srinivas Pandruvada" , "Cc: Len Brown" , "Cc: Juri Lelli" , "Cc: Patrick Bellasi" , "Cc: Steve Muckle" , "Cc: Brendan Jackman" , "Cc: Chris Redpath" , "Cc: Atish Patra" , "Cc: Dietmar Eggemann" , "Cc: Vincent Guittot" , "Cc: Morten Ramussen" , "Cc: Frederic Weisbecker" , "Cc: Thomas Gleixner" , "Cc: EAS Dev" , "Cc: Android Kernel" Subject: [PATCH RFC 2/5] sched/fair: Skip frequency update if CPU about to idle Date: Sat, 28 Oct 2017 02:59:38 -0700 Message-Id: <20171028095941.4773-3-joelaf@google.com> X-Mailer: git-send-email 2.15.0.rc2.357.g7e34df9404-goog In-Reply-To: <20171028095941.4773-1-joelaf@google.com> References: <20171028095941.4773-1-joelaf@google.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Updating CPU frequency on last dequeue of a CPU is useless. Because the utilization since CPU came out of idle can increase till the last dequeue, this means we are requesting for a higher frequency before entering idle which is not very meaningful or useful. It causes unwanted wakeups of the schedutil governor kthread in slow-switch systems resulting in large number of wake ups that could have been avoided. In an Android application playing music where the music app's thread wakes up and sleeps periodically on an Android device, its seen that the frequency increases slightly on the dequeue and is reduced when the task wakes up again. This oscillation continues between 300Mhz and 350Mhz, and while the task is running, its at 300MHz the whole time. This is pointless. Adding to that, these are unnecessary wake ups. Infact most of the time when the sugov thread wakes up, all the CPUs are idle - so it can hurt power by disturbing the cluster when it is idling. This patch prevents a frequency update on the last dequeue. With this the number of schedutil governor thread wake ups are reduces more than 2 times (1389 -> 527). Cc: Rafael J. Wysocki Cc: Viresh Kumar Cc: Ingo Molnar Cc: Peter Zijlstra Signed-off-by: Joel Fernandes --- kernel/sched/fair.c | 25 ++++++++++++++++++++++--- kernel/sched/sched.h | 1 + 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index f97693fe8b6e..4c06e52935d3 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -3725,6 +3725,7 @@ static void detach_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *s #define UPDATE_TG 0x1 #define SKIP_AGE_LOAD 0x2 #define DO_ATTACH 0x4 +#define SKIP_CPUFREQ 0x8 /* Update task and its cfs_rq load average */ static inline void update_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) @@ -3741,7 +3742,7 @@ static inline void update_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *s if (se->avg.last_update_time && !(flags & SKIP_AGE_LOAD)) __update_load_avg_se(now, cpu, cfs_rq, se); - decayed = update_cfs_rq_load_avg(now, cfs_rq, true); + decayed = update_cfs_rq_load_avg(now, cfs_rq, !(flags & SKIP_CPUFREQ)); decayed |= propagate_entity_load_avg(se); if (!se->avg.last_update_time && (flags & DO_ATTACH)) { @@ -3839,6 +3840,7 @@ update_cfs_rq_load_avg(u64 now, struct cfs_rq *cfs_rq, bool update_freq) #define UPDATE_TG 0x0 #define SKIP_AGE_LOAD 0x0 #define DO_ATTACH 0x0 +#define SKIP_CPUFREQ 0x0 static inline void update_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se, int not_used1) { @@ -4060,6 +4062,8 @@ static __always_inline void return_cfs_rq_runtime(struct cfs_rq *cfs_rq); static void dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) { + int update_flags; + /* * Update run-time statistics of the 'current'. */ @@ -4073,7 +4077,12 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) * - For group entity, update its weight to reflect the new share * of its group cfs_rq. */ - update_load_avg(cfs_rq, se, UPDATE_TG); + update_flags = UPDATE_TG; + + if (flags & DEQUEUE_IDLE) + update_flags |= SKIP_CPUFREQ; + + update_load_avg(cfs_rq, se, update_flags); dequeue_runnable_load_avg(cfs_rq, se); update_stats_dequeue(cfs_rq, se, flags); @@ -5220,6 +5229,9 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags) struct sched_entity *se = &p->se; int task_sleep = flags & DEQUEUE_SLEEP; + if (task_sleep && rq->nr_running == 1) + flags |= DEQUEUE_IDLE; + for_each_sched_entity(se) { cfs_rq = cfs_rq_of(se); dequeue_entity(cfs_rq, se, flags); @@ -5250,13 +5262,20 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags) } for_each_sched_entity(se) { + int update_flags; + cfs_rq = cfs_rq_of(se); cfs_rq->h_nr_running--; if (cfs_rq_throttled(cfs_rq)) break; - update_load_avg(cfs_rq, se, UPDATE_TG); + update_flags = UPDATE_TG; + + if (flags & DEQUEUE_IDLE) + update_flags |= SKIP_CPUFREQ; + + update_load_avg(cfs_rq, se, update_flags); update_cfs_group(se); } diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 8aa24b41f652..68f5cd102744 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1394,6 +1394,7 @@ extern const u32 sched_prio_to_wmult[40]; #define DEQUEUE_SAVE 0x02 /* matches ENQUEUE_RESTORE */ #define DEQUEUE_MOVE 0x04 /* matches ENQUEUE_MOVE */ #define DEQUEUE_NOCLOCK 0x08 /* matches ENQUEUE_NOCLOCK */ +#define DEQUEUE_IDLE 0x10 #define ENQUEUE_WAKEUP 0x01 #define ENQUEUE_RESTORE 0x02 -- 2.15.0.rc2.357.g7e34df9404-goog From 1583429207453082099@xxx Tue Nov 07 17:29:26 +0000 2017 X-GM-THRID: 1583404330332789991 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread