[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <560fdd10-f12b-4ce8-a628-c4952eff93ec@redhat.com>
Date: Wed, 4 Sep 2024 14:20:25 -0400
From: Waiman Long <longman@...hat.com>
To: Phil Auld <pauld@...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 9/4/24 13:19, Phil Auld wrote:
> 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?
You are right. I will send out v3 to correct that.
Cheers,
Longman
Powered by blists - more mailing lists