Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp404715pxb; Sat, 6 Mar 2021 03:47:34 -0800 (PST) X-Google-Smtp-Source: ABdhPJzv7gMEmxWthu5VgO0XCwRB4lxqu5B3gprZB29+TgmUIKFdwbXMhQ0VuMDHeeOMLb1uv87a X-Received: by 2002:a05:6402:375:: with SMTP id s21mr13461579edw.287.1615031254093; Sat, 06 Mar 2021 03:47:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615031254; cv=none; d=google.com; s=arc-20160816; b=nULSeKBtA+Ii8N7Fiuyf7adYxEw4tesJ+p88Q2Elt40HkhIf7dqMMXfocxx7KSCEdr IE3CEzorLB6qgUkiXO+AMNbuPIAReahnKt2JdGNwkvlY/ULkmnutE0EvlPu1GA67bjv7 xBXkzmj9DDhHBDJL2MP8wZjQcG2KhFyjBzrmPfvCCXqb3Sd5zTxeS/YO5L1D+tj6KtIV fQxwjZFZnjq4mfIYUl1ZE+a57Na4fai4ABusWDsAH2zlPAhpo3Gg2FQ3cb8sZHSxQAA+ MDQBJl2JaucqrsI9BwFjWqjj3SNJBI7W0mxC0zMS3aBo93cA4KpccexAmzFjB68DScOH WTqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:robot-unsubscribe :robot-id:message-id:mime-version:references:in-reply-to:cc:subject :to:reply-to:sender:from:dkim-signature:dkim-signature:date; bh=1P3PuapQCPu+P6h38eAFeVR5TUXIRpe3xn112g4z9pE=; b=i4O0KnpBt7ddD7eCqnvHA0zCE+z2y/cwObdWSxCjQ3CwwuGyVzS548nXWXAPHLgU80 bM8e/LJpfxMBEt3GBJHC1OZp7yV07vdDMZxUxD8rfC2rrZ9tWdKYeJepBAaghkEOhzKs l76jZXQzo1lhDA4tDYy13ra4alKg63QP91sJBoWOfIh45V+agNIcoVYHRcKoYIZDOOCD tdSyUf57nHZuiOL/S42tFERGU79u2/DyuttfPjjiZn6cLzS3bErPK3W2SkcKM4gr0F78 9GxEerBw0e8iJ7B8h5IFAp9+aVbs38dYXrdPA4drRv45IKfZb2Efyqt0R9s1sZiXW5OC Piww== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=YvXnUI0q; dkim=neutral (no key) header.i=@linutronix.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dc3si3396153edb.57.2021.03.06.03.47.11; Sat, 06 Mar 2021 03:47:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=YvXnUI0q; dkim=neutral (no key) header.i=@linutronix.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231350AbhCFLmz (ORCPT + 99 others); Sat, 6 Mar 2021 06:42:55 -0500 Received: from Galois.linutronix.de ([193.142.43.55]:34368 "EHLO galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230403AbhCFLmZ (ORCPT ); Sat, 6 Mar 2021 06:42:25 -0500 Date: Sat, 06 Mar 2021 11:42:23 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1615030944; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1P3PuapQCPu+P6h38eAFeVR5TUXIRpe3xn112g4z9pE=; b=YvXnUI0qZ+/xEYl16U6rbgYM8RRLMakJ6Kyo4pHZM1TUrYzM4uz4pfCJRNcuZo16icNMrO pJKyvcavNdIvIyZV24xPd/HpERS/fLV6EwNZCTw1Qp4vaIqvXiwOgzs/zFlQFukemOdm2j Ukh4Ffqm1wUZEhM8SmemoKySBOvZo+mXBg43WAU1Rdgksu4A9gGUQVntpIYdP3hmpSGiL0 /hT7COCbQ6Pa70qoKFtwO17k//S/qp41g/hnHgwA4OVXujKRPQEPTJnBNKAMrxFqJYIKqe qvshWPMvkLTE06pmgoQkRuw4L9LkaIkHLrQqv9Kyin05MzYvHyf1jiSWNf7EIw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1615030944; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1P3PuapQCPu+P6h38eAFeVR5TUXIRpe3xn112g4z9pE=; b=9Ru/NouYvLGg5LKyz33DDDcwMf2wKHixK9xd7vKN/0CRXGMRQVfofRn84yEvvjGSyKP0NF B3t3yWENoAQD7nDQ== From: "tip-bot2 for Vincent Guittot" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: sched/core] sched/fair: Remove update of blocked load from newidle_balance Cc: Vincent Guittot , "Peter Zijlstra (Intel)" , Ingo Molnar , Valentin Schneider , x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20210224133007.28644-2-vincent.guittot@linaro.org> References: <20210224133007.28644-2-vincent.guittot@linaro.org> MIME-Version: 1.0 Message-ID: <161503094353.398.8402845944658689039.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the sched/core branch of tip: Commit-ID: 0826530de3cbdc89e60a89e86def94a5f0fc81ca Gitweb: https://git.kernel.org/tip/0826530de3cbdc89e60a89e86def94a5f0fc81ca Author: Vincent Guittot AuthorDate: Wed, 24 Feb 2021 14:30:01 +01:00 Committer: Ingo Molnar CommitterDate: Sat, 06 Mar 2021 12:40:21 +01:00 sched/fair: Remove update of blocked load from newidle_balance newidle_balance runs with both preempt and irq disabled which prevent local irq to run during this period. The duration for updating the blocked load of CPUs varies according to the number of CPU cgroups with non-decayed load and extends this critical period to an uncontrolled level. Remove the update from newidle_balance and trigger a normal ILB that will take care of the update instead. This reduces the IRQ latency from O(nr_cgroups * nr_nohz_cpus) to O(nr_cgroups). Signed-off-by: Vincent Guittot Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Ingo Molnar Reviewed-by: Valentin Schneider Link: https://lkml.kernel.org/r/20210224133007.28644-2-vincent.guittot@linaro.org --- kernel/sched/fair.c | 33 +++++---------------------------- 1 file changed, 5 insertions(+), 28 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 794c2cb..806e16f 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -7392,8 +7392,6 @@ enum migration_type { #define LBF_NEED_BREAK 0x02 #define LBF_DST_PINNED 0x04 #define LBF_SOME_PINNED 0x08 -#define LBF_NOHZ_STATS 0x10 -#define LBF_NOHZ_AGAIN 0x20 struct lb_env { struct sched_domain *sd; @@ -8397,9 +8395,6 @@ static inline void update_sg_lb_stats(struct lb_env *env, for_each_cpu_and(i, sched_group_span(group), env->cpus) { struct rq *rq = cpu_rq(i); - if ((env->flags & LBF_NOHZ_STATS) && update_nohz_stats(rq, false)) - env->flags |= LBF_NOHZ_AGAIN; - sgs->group_load += cpu_load(rq); sgs->group_util += cpu_util(i); sgs->group_runnable += cpu_runnable(rq); @@ -8940,11 +8935,6 @@ static inline void update_sd_lb_stats(struct lb_env *env, struct sd_lb_stats *sd struct sg_lb_stats tmp_sgs; int sg_status = 0; -#ifdef CONFIG_NO_HZ_COMMON - if (env->idle == CPU_NEWLY_IDLE && READ_ONCE(nohz.has_blocked)) - env->flags |= LBF_NOHZ_STATS; -#endif - do { struct sg_lb_stats *sgs = &tmp_sgs; int local_group; @@ -8981,14 +8971,6 @@ next_group: /* Tag domain that child domain prefers tasks go to siblings first */ sds->prefer_sibling = child && child->flags & SD_PREFER_SIBLING; -#ifdef CONFIG_NO_HZ_COMMON - if ((env->flags & LBF_NOHZ_AGAIN) && - cpumask_subset(nohz.idle_cpus_mask, sched_domain_span(env->sd))) { - - WRITE_ONCE(nohz.next_blocked, - jiffies + msecs_to_jiffies(LOAD_AVG_PERIOD)); - } -#endif if (env->sd->flags & SD_NUMA) env->fbq_type = fbq_classify_group(&sds->busiest_stat); @@ -10517,16 +10499,11 @@ static void nohz_newidle_balance(struct rq *this_rq) time_before(jiffies, READ_ONCE(nohz.next_blocked))) return; - raw_spin_unlock(&this_rq->lock); /* - * This CPU is going to be idle and blocked load of idle CPUs - * need to be updated. Run the ilb locally as it is a good - * candidate for ilb instead of waking up another idle CPU. - * Kick an normal ilb if we failed to do the update. + * Blocked load of idle CPUs need to be updated. + * Kick an ILB to update statistics. */ - if (!_nohz_idle_balance(this_rq, NOHZ_STATS_KICK, CPU_NEWLY_IDLE)) - kick_ilb(NOHZ_STATS_KICK); - raw_spin_lock(&this_rq->lock); + kick_ilb(NOHZ_STATS_KICK); } #else /* !CONFIG_NO_HZ_COMMON */ @@ -10587,8 +10564,6 @@ static int newidle_balance(struct rq *this_rq, struct rq_flags *rf) update_next_balance(sd, &next_balance); rcu_read_unlock(); - nohz_newidle_balance(this_rq); - goto out; } @@ -10654,6 +10629,8 @@ out: if (pulled_task) this_rq->idle_stamp = 0; + else + nohz_newidle_balance(this_rq); rq_repin_lock(this_rq, rf);