[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240904171949.GC136544@pauld.westford.csb>
Date: Wed, 4 Sep 2024 13:19:49 -0400
From: Phil Auld <pauld@...hat.com>
To: Waiman Long <longman@...hat.com>
Cc: Ingo Molnar <mingo@...hat.com>, Peter Zijlstra <peterz@...radead.org>,
Juri Lelli <juri.lelli@...hat.com>,
Vincent Guittot <vincent.guittot@...aro.org>,
Dietmar Eggemann <dietmar.eggemann@....com>,
Steven Rostedt <rostedt@...dmis.org>,
Ben Segall <bsegall@...gle.com>, Mel Gorman <mgorman@...e.de>,
Valentin Schneider <vschneid@...hat.com>,
Frederic Weisbecker <frederic@...nel.org>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2 2/2] sched/isolation: Consolidate housekeeping
cpumasks that are always identical
On Wed, Sep 04, 2024 at 01:14:41PM -0400 Waiman Long wrote:
> The housekeeping cpumasks are only set by two boot commandline
> parameters: "nohz_full" and "isolcpus". When there is more than one of
> "nohz_full" or "isolcpus", the extra ones must have the same CPU list
> or the setup will fail partially.
>
> The HK_TYPE_TICK, HK_TYPE_DOMAIN and HK_TYPE_MANAGED_IRQ types are
> settable by "isolcpus" and they can be set individually. The other
> housekeeping types are all set by "nohz_full" without a way to set them
> individually. So they all have identical cpumasks.
>
> There is actually no point in having different cpumasks for these
> "nohz_full" only housekeeping types. Consolidate these types to use the
> same cpumask by aliasing them to the same value. If there is a need to
> set any of them independently in the future, we can break them out to
> their own cpumasks again.
>
> With this change, the number of cpumasks in the housekeeping structure
> drops from 9 to 4.
>
> Signed-off-by: Waiman Long <longman@...hat.com>
> ---
> include/linux/sched/isolation.h | 18 ++++++++++++------
> kernel/sched/isolation.c | 9 ++-------
> 2 files changed, 14 insertions(+), 13 deletions(-)
>
> diff --git a/include/linux/sched/isolation.h b/include/linux/sched/isolation.h
> index 499d5e480882..e2c42172de82 100644
> --- a/include/linux/sched/isolation.h
> +++ b/include/linux/sched/isolation.h
> @@ -7,15 +7,21 @@
> #include <linux/tick.h>
>
> enum hk_type {
> - HK_TYPE_TIMER,
> - HK_TYPE_RCU,
> - HK_TYPE_MISC,
> HK_TYPE_TICK,
> HK_TYPE_DOMAIN,
> - HK_TYPE_WQ,
> HK_TYPE_MANAGED_IRQ,
> - HK_TYPE_KTHREAD,
> - HK_TYPE_MAX
> + HK_TYPE_KERNEL_NOISE,
> + HK_TYPE_MAX,
> +
> + /*
> + * The following housekeeping types are only set by the nohz_full
> + * boot commandline option. So they can share the same value.
> + */
> + HK_TYPE_TIMER = HK_TYPE_KERNEL_NOISE,
> + HK_TYPE_RCU = HK_TYPE_KERNEL_NOISE,
> + HK_TYPE_MISC = HK_TYPE_KERNEL_NOISE,
> + HK_TYPE_WQ = HK_TYPE_KERNEL_NOISE,
> + HK_TYPE_KTHREAD = HK_TYPE_KERNEL_NOISE
> };
>
> #ifdef CONFIG_CPU_ISOLATION
> diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c
> index 5345e11f3d44..2b654272edcd 100644
> --- a/kernel/sched/isolation.c
> +++ b/kernel/sched/isolation.c
> @@ -9,14 +9,10 @@
> */
>
> enum hk_flags {
> - HK_FLAG_TIMER = BIT(HK_TYPE_TIMER),
> - HK_FLAG_RCU = BIT(HK_TYPE_RCU),
> - HK_FLAG_MISC = BIT(HK_TYPE_MISC),
> HK_FLAG_TICK = BIT(HK_TYPE_TICK),
> HK_FLAG_DOMAIN = BIT(HK_TYPE_DOMAIN),
> - HK_FLAG_WQ = BIT(HK_TYPE_WQ),
> HK_FLAG_MANAGED_IRQ = BIT(HK_TYPE_MANAGED_IRQ),
> - HK_FLAG_KTHREAD = BIT(HK_TYPE_KTHREAD),
> + HK_FLAG_KERNEL_NOISE = BIT(HK_TYPE_KERNEL_NOISE),
> };
>
> DEFINE_STATIC_KEY_FALSE(housekeeping_overridden);
> @@ -194,8 +190,7 @@ static int __init housekeeping_nohz_full_setup(char *str)
> {
> unsigned long flags;
>
> - flags = HK_FLAG_TICK | HK_FLAG_WQ | HK_FLAG_TIMER | HK_FLAG_RCU |
> - HK_FLAG_MISC | HK_FLAG_KTHREAD;
> + flags = HK_FLAG_KERNEL_NOISE;
>
This does not look equivalent. HK_FLAG_TICK seems to be lost?
Cheers,
Phil
> return housekeeping_setup(str, flags);
> }
> --
> 2.43.5
>
--
Powered by blists - more mailing lists