Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp6657898pxb; Wed, 17 Feb 2021 09:52:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJx93uw9cGmk37nJMRkx7Duhyplvoo/UDXk1amfjr6DFE3FWQubd47r2P6ty4YwyFrq25iVa X-Received: by 2002:a17:906:fc16:: with SMTP id ov22mr144743ejb.268.1613584360083; Wed, 17 Feb 2021 09:52:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613584360; cv=none; d=google.com; s=arc-20160816; b=EaVdGXxIiQ+s9XCf2QM3oc7u2tsb/gkJJF3g7M/YaeJbNT33c4uqh/9TaQW+d4pivC kOIFsbzahAQpwQYDsjjIZ6YGRml3YsRDZS7vFdFd6RLU5C7yZ044gItbJO1bXJmHCguy 27XUo/+87zAO5A40lgxd0F3DKKUM/qE1yTMjqnDbzUZ+XYeAh978WHk718ASt2jZa1Nw uu/RHvdIvt2sqYylB+7TvOIAd4piknPuRIeSNmSpv00EmBDb0xP+sdp+8lOTCeJgGkqB dYaJYIRg2z7rofibVsgK9EtL4TX7Pr0II6xHhl7z/cG9f4Rj11eGmpAVNopIyP+Ouw87 PHUg== 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=a6fJHWHzGXDij8Gpwi71823DsiNF59SRzBHAispXgPA=; b=VW2oLPtouaEPOjVAvg3x6Gy2RwHyxL/8Zvvs8ewqlXJZJuzlVHHpMbdcDDcjyokAf6 kO8JcmW8i9d2gkO3JGmn3OU507wWZ12bi+yCrhzKTmxTWIT2KHGBi6TK5y/iXsKlrROo bWhRqEqr2RG1uKRr/q+as5/BCwTqAsOa1kgJjwG3XGcImgVy2MUl+41LKsTKpdRqdoUy JeH9YZ33/O8yX4481aQkBFavRarLUCwFmHylUrsZXna9H64/XE3QZlNrCDO8zrDE8oQX DBQsaI24YmaKvxUOkZHz6eVP7dbDLy3nNZCAt6uLrQw7RMqdT7LS0OAksycCzmbHznoE O4kA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=G3KJvpAn; dkim=neutral (no key) header.i=@linutronix.de header.b=qNOWSjgJ; 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 rp21si1973480ejb.563.2021.02.17.09.52.15; Wed, 17 Feb 2021 09:52:40 -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=G3KJvpAn; dkim=neutral (no key) header.i=@linutronix.de header.b=qNOWSjgJ; 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 S232968AbhBQN1L (ORCPT + 99 others); Wed, 17 Feb 2021 08:27:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33236 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232889AbhBQNSz (ORCPT ); Wed, 17 Feb 2021 08:18:55 -0500 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E683BC061788; Wed, 17 Feb 2021 05:17:34 -0800 (PST) Date: Wed, 17 Feb 2021 13:17:32 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1613567852; 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=a6fJHWHzGXDij8Gpwi71823DsiNF59SRzBHAispXgPA=; b=G3KJvpAn/eO6C0zZjz2oAUfYktHjCuY+LaL9R7einOzR7COSlbBe5S733DtjkWl+JbeGuy rIi+4rfQzFJwpZd2QMT1RIL6RoXp6P8YmTc4MeYB/G0gfC0vgSt7eVfcBkrNb86u1y1vBe d5Bim3EYDvxUZZS6ZwxvaG6s/FVJOf68t1CkNYzJKwseJKr2CNbTjuOJmdK9snT3xxQiBd FAaPhFlbfHYM8c3lOrhRa/SfKPzIJtxYoUTLwAnOVHVPz7I9y6wQ/I03//Ni4/VXvksRz8 ESo01XxgfIhuYJBTfYbjXjzyLswWYHjCEaO7Jm0pOhHtCZm4ac0QeQLakGwytQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1613567852; 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=a6fJHWHzGXDij8Gpwi71823DsiNF59SRzBHAispXgPA=; b=qNOWSjgJ9I62coCaJIz9/cwbewlXxKtNSlhe0lK3/9CeNhbqXLMzKOliWdKH4X3KWSm41u dCr9itXABRuiYrAA== From: "tip-bot2 for Juri Lelli" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: sched/core] sched/features: Distinguish between NORMAL and DEADLINE hrtick Cc: Juri Lelli , "Luis Claudio R. Goncalves" , Daniel Bristot de Oliveira , "Peter Zijlstra (Intel)" , Ingo Molnar , x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20210208073554.14629-3-juri.lelli@redhat.com> References: <20210208073554.14629-3-juri.lelli@redhat.com> MIME-Version: 1.0 Message-ID: <161356785209.20312.4469541394599855364.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: e0ee463c93c43b1657ad69cf2678ff5bf1b754fe Gitweb: https://git.kernel.org/tip/e0ee463c93c43b1657ad69cf2678ff5bf1b754fe Author: Juri Lelli AuthorDate: Mon, 08 Feb 2021 08:35:54 +01:00 Committer: Ingo Molnar CommitterDate: Wed, 17 Feb 2021 14:12:42 +01:00 sched/features: Distinguish between NORMAL and DEADLINE hrtick The HRTICK feature has traditionally been servicing configurations that need precise preemptions point for NORMAL tasks. More recently, the feature has been extended to also service DEADLINE tasks with stringent runtime enforcement needs (e.g., runtime < 1ms with HZ=1000). Enabling HRTICK sched feature currently enables the additional timer and task tick for both classes, which might introduced undesired overhead for no additional benefit if one needed it only for one of the cases. Separate HRTICK sched feature in two (and leave the traditional case name unmodified) so that it can be selectively enabled when needed. With: $ echo HRTICK > /sys/kernel/debug/sched_features the NORMAL/fair hrtick gets enabled. With: $ echo HRTICK_DL > /sys/kernel/debug/sched_features the DEADLINE hrtick gets enabled. Signed-off-by: Juri Lelli Signed-off-by: Luis Claudio R. Goncalves Signed-off-by: Daniel Bristot de Oliveira Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Ingo Molnar Link: https://lkml.kernel.org/r/20210208073554.14629-3-juri.lelli@redhat.com --- kernel/sched/core.c | 2 +- kernel/sched/deadline.c | 4 ++-- kernel/sched/fair.c | 4 ++-- kernel/sched/features.h | 1 + kernel/sched/sched.h | 26 ++++++++++++++++++++++++-- 5 files changed, 30 insertions(+), 7 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 18d51ab..88a2e2b 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -4969,7 +4969,7 @@ static void __sched notrace __schedule(bool preempt) schedule_debug(prev, preempt); - if (sched_feat(HRTICK)) + if (sched_feat(HRTICK) || sched_feat(HRTICK_DL)) hrtick_clear(rq); local_irq_disable(); diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 6f37796..aac3539 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -1832,7 +1832,7 @@ static void set_next_task_dl(struct rq *rq, struct task_struct *p, bool first) if (!first) return; - if (hrtick_enabled(rq)) + if (hrtick_enabled_dl(rq)) start_hrtick_dl(rq, p); if (rq->curr->sched_class != &dl_sched_class) @@ -1895,7 +1895,7 @@ static void task_tick_dl(struct rq *rq, struct task_struct *p, int queued) * not being the leftmost task anymore. In that case NEED_RESCHED will * be set and schedule() will start a new hrtick for the next task. */ - if (hrtick_enabled(rq) && queued && p->dl.runtime > 0 && + if (hrtick_enabled_dl(rq) && queued && p->dl.runtime > 0 && is_leftmost(p, &rq->dl)) start_hrtick_dl(rq, p); } diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 59b645e..8a8bd7b 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -5429,7 +5429,7 @@ static void hrtick_update(struct rq *rq) { struct task_struct *curr = rq->curr; - if (!hrtick_enabled(rq) || curr->sched_class != &fair_sched_class) + if (!hrtick_enabled_fair(rq) || curr->sched_class != &fair_sched_class) return; if (cfs_rq_of(&curr->se)->nr_running < sched_nr_latency) @@ -7116,7 +7116,7 @@ done: __maybe_unused; list_move(&p->se.group_node, &rq->cfs_tasks); #endif - if (hrtick_enabled(rq)) + if (hrtick_enabled_fair(rq)) hrtick_start_fair(rq, p); update_misfit_status(p, rq); diff --git a/kernel/sched/features.h b/kernel/sched/features.h index e875eab..1bc2b15 100644 --- a/kernel/sched/features.h +++ b/kernel/sched/features.h @@ -38,6 +38,7 @@ SCHED_FEAT(CACHE_HOT_BUDDY, true) SCHED_FEAT(WAKEUP_PREEMPTION, true) SCHED_FEAT(HRTICK, false) +SCHED_FEAT(HRTICK_DL, false) SCHED_FEAT(DOUBLE_TICK, false) /* diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 0dfdd52..10a1522 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -2105,17 +2105,39 @@ extern const_debug unsigned int sysctl_sched_migration_cost; */ static inline int hrtick_enabled(struct rq *rq) { - if (!sched_feat(HRTICK)) - return 0; if (!cpu_active(cpu_of(rq))) return 0; return hrtimer_is_hres_active(&rq->hrtick_timer); } +static inline int hrtick_enabled_fair(struct rq *rq) +{ + if (!sched_feat(HRTICK)) + return 0; + return hrtick_enabled(rq); +} + +static inline int hrtick_enabled_dl(struct rq *rq) +{ + if (!sched_feat(HRTICK_DL)) + return 0; + return hrtick_enabled(rq); +} + void hrtick_start(struct rq *rq, u64 delay); #else +static inline int hrtick_enabled_fair(struct rq *rq) +{ + return 0; +} + +static inline int hrtick_enabled_dl(struct rq *rq) +{ + return 0; +} + static inline int hrtick_enabled(struct rq *rq) { return 0;