From: Juri Lelli <juri.lelli@redhat.com>
To: Yuri Andriaccio <yurand2000@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
Valentin Schneider <vschneid@redhat.com>,
linux-kernel@vger.kernel.org,
Luca Abeni <luca.abeni@santannapisa.it>,
Yuri Andriaccio <yuri.andriaccio@santannapisa.it>
Subject: Re: [RFC PATCH v3 13/24] sched/rt: Update rt-cgroup schedulability checks
Date: Thu, 9 Oct 2025 11:51:21 +0200 [thread overview]
Message-ID: <aOeFmZIBIj6HDiIZ@jlelli-thinkpadt14gen4.remote.csb> (raw)
In-Reply-To: <20250929092221.10947-14-yurand2000@gmail.com>
Hello,
On 29/09/25 11:22, Yuri Andriaccio wrote:
> From: luca abeni <luca.abeni@santannapisa.it>
>
> Update schedulability checks and setup of runtime/period for rt-cgroups.
So, it looks like changelogs are all too minimal and dry. Having a more
comprehensive (but concise) description of what the patch does, why it
does it and how, will help reviewing and is essential in the future to
trace back design decisions and issues. Please consider this for current
and previous/subsequent patches.
> Co-developed-by: Alessio Balsini <a.balsini@sssup.it>
> Signed-off-by: Alessio Balsini <a.balsini@sssup.it>
> Co-developed-by: Andrea Parri <parri.andrea@gmail.com>
> Signed-off-by: Andrea Parri <parri.andrea@gmail.com>
> Co-developed-by: Yuri Andriaccio <yurand2000@gmail.com>
> Signed-off-by: Yuri Andriaccio <yurand2000@gmail.com>
> Signed-off-by: luca abeni <luca.abeni@santannapisa.it>
> ---
> kernel/sched/core.c | 6 ++++
> kernel/sched/deadline.c | 46 +++++++++++++++++++++++----
> kernel/sched/rt.c | 70 +++++++++++++++++++++++------------------
> kernel/sched/sched.h | 1 +
> 4 files changed, 87 insertions(+), 36 deletions(-)
>
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 2cfbe3b7b17..1217f714dd2 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -9281,6 +9281,12 @@ cpu_cgroup_css_alloc(struct cgroup_subsys_state *parent_css)
> return &root_task_group.css;
> }
>
> + /* Do not allow cpu_cgroup hierachies with depth greater than 2. */
I believe this limit gets removed with later patches, but since we have
it here, we should state why we have the limit in place.
> +#ifdef CONFIG_RT_GROUP_SCHED
> + if (parent != &root_task_group)
> + return ERR_PTR(-EINVAL);
> +#endif
> +
> tg = sched_create_group(parent);
> if (IS_ERR(tg))
> return ERR_PTR(-ENOMEM);
> diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
> index 1293b9a252b..5d93b3ca030 100644
> --- a/kernel/sched/deadline.c
> +++ b/kernel/sched/deadline.c
> @@ -347,7 +347,47 @@ void cancel_inactive_timer(struct sched_dl_entity *dl_se)
> cancel_dl_timer(dl_se, &dl_se->inactive_timer);
> }
>
> +/*
> + * Used for dl_bw check and update, used under sched_rt_handler()::mutex and
> + * sched_domains_mutex.
> + */
> +u64 dl_cookie;
> +
> #ifdef CONFIG_RT_GROUP_SCHED
> +int dl_check_tg(unsigned long total)
> +{
> + unsigned long flags;
> + int which_cpu;
> + int cpus;
> + struct dl_bw *dl_b;
> + u64 gen = ++dl_cookie;
> +
> + for_each_possible_cpu(which_cpu) {
> + rcu_read_lock_sched();
> +
> + if (!dl_bw_visited(which_cpu, gen)) {
> + cpus = dl_bw_cpus(which_cpu);
> + dl_b = dl_bw_of(which_cpu);
> +
> + raw_spin_lock_irqsave(&dl_b->lock, flags);
> +
> + if (dl_b->bw != -1 &&
> + dl_b->bw * cpus < dl_b->total_bw + total * cpus) {
Does this need to use cap_scale()?
> + raw_spin_unlock_irqrestore(&dl_b->lock, flags);
> + rcu_read_unlock_sched();
> +
> + return 0;
> + }
> +
> + raw_spin_unlock_irqrestore(&dl_b->lock, flags);
> + }
> +
> + rcu_read_unlock_sched();
> + }
> +
> + return 1;
> +}
> +
...
> @@ -2034,8 +2029,8 @@ static int tg_rt_schedulable(struct task_group *tg, void *data)
> unsigned long total, sum = 0;
> u64 period, runtime;
>
> - period = ktime_to_ns(tg->rt_bandwidth.rt_period);
> - runtime = tg->rt_bandwidth.rt_runtime;
> + period = tg->dl_bandwidth.dl_period;
> + runtime = tg->dl_bandwidth.dl_runtime;
Just as an example, this is the kind of important change (rt_bandwidth
-> dl_bandwidth) that usually deserves to be explicitly mentioned in the
changelog.
...
> @@ -2097,6 +2096,20 @@ static int __rt_schedulable(struct task_group *tg, u64 period, u64 runtime)
> .rt_runtime = runtime,
> };
>
> + /*
> + * Since we truncate DL_SCALE bits, make sure we're at least
> + * that big.
> + */
> + if (runtime != 0 && runtime < (1ULL << DL_SCALE))
> + return -EINVAL;
> +
> + /*
^
Nit, fix alignment.
> + * Since we use the MSB for wrap-around and sign issues, make
> + * sure it's not set (mind that period can be equal to zero).
> + */
> + if (period & (1ULL << 63))
> + return -EINVAL;
> +
Thanks,
Juri
next prev parent reply other threads:[~2025-10-09 9:51 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-29 9:21 [RFC PATCH v3 00/24] Hierarchical Constant Bandwidth Server Yuri Andriaccio
2025-09-29 9:21 ` [RFC PATCH v3 01/24] sched/deadline: Do not access dl_se->rq directly Yuri Andriaccio
2025-10-02 13:10 ` Juri Lelli
2025-09-29 9:21 ` [RFC PATCH v3 02/24] sched/deadline: Distinct between dl_rq and my_q Yuri Andriaccio
2025-10-02 13:29 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 03/24] sched/rt: Pass an rt_rq instead of an rq where needed Yuri Andriaccio
2025-10-02 14:01 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 04/24] sched/rt: Move some functions from rt.c to sched.h Yuri Andriaccio
2025-10-02 14:12 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 05/24] sched/rt: Disable RT_GROUP_SCHED Yuri Andriaccio
2025-10-02 15:35 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 06/24] sched/rt: Introduce HCBS specific structs in task_group Yuri Andriaccio
2025-10-02 15:58 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 07/24] sched/core: Initialize root_task_group Yuri Andriaccio
2025-10-02 16:33 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 08/24] sched/deadline: Add dl_init_tg Yuri Andriaccio
2025-10-08 6:25 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 09/24] sched/rt: Add {alloc/free}_rt_sched_group Yuri Andriaccio
2025-10-08 7:28 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 10/24] sched/deadline: Account rt-cgroups bandwidth in deadline tasks schedulability tests Yuri Andriaccio
2025-09-29 9:22 ` [RFC PATCH v3 11/24] sched/rt: Add rt-cgroups' dl-servers operations Yuri Andriaccio
2025-10-08 10:26 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 12/24] sched/rt: Update task event callbacks for HCBS scheduling Yuri Andriaccio
2025-10-09 6:54 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 13/24] sched/rt: Update rt-cgroup schedulability checks Yuri Andriaccio
2025-09-29 11:03 ` Markus Elfring
2025-10-09 9:51 ` Juri Lelli [this message]
2025-09-29 9:22 ` [RFC PATCH v3 14/24] sched/rt: Allow zeroing the runtime of the root control group Yuri Andriaccio
2025-10-09 13:54 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 15/24] sched/rt: Remove old RT_GROUP_SCHED data structures Yuri Andriaccio
2025-09-29 9:22 ` [RFC PATCH v3 16/24] sched/core: Cgroup v2 support Yuri Andriaccio
2025-09-29 9:22 ` [RFC PATCH v3 17/24] sched/rt: Remove support for cgroups-v1 Yuri Andriaccio
2025-10-15 11:51 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 18/24] sched/deadline: Allow deeper hierarchies of RT cgroups Yuri Andriaccio
2025-10-15 14:24 ` Juri Lelli
2025-09-29 9:22 ` [RFC PATCH v3 19/24] sched/rt: Add rt-cgroup migration Yuri Andriaccio
2025-09-29 9:22 ` [RFC PATCH v3 20/24] sched/rt: Add HCBS migration related checks and function calls Yuri Andriaccio
2025-09-29 9:22 ` [RFC PATCH v3 21/24] sched/deadline: Make rt-cgroup's servers pull tasks on timer replenishment Yuri Andriaccio
2025-09-29 9:22 ` [RFC PATCH v3 22/24] sched/deadline: Fix HCBS migrations on server stop Yuri Andriaccio
2025-09-29 9:22 ` [RFC PATCH v3 23/24] sched/core: Execute enqueued balance callbacks when changing allowed CPUs Yuri Andriaccio
2025-09-29 9:22 ` [RFC PATCH v3 24/24] sched/core: Execute enqueued balance callbacks when migrating task betweeen cgroups Yuri Andriaccio
2025-10-02 9:00 ` [RFC PATCH v3 00/24] Hierarchical Constant Bandwidth Server Juri Lelli
2025-10-15 14:35 ` Juri Lelli
2025-10-15 15:17 ` Yuri Andriaccio
2025-10-20 9:40 ` Juri Lelli
2025-10-24 8:02 ` luca abeni
2025-11-03 10:32 ` Juri Lelli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aOeFmZIBIj6HDiIZ@jlelli-thinkpadt14gen4.remote.csb \
--to=juri.lelli@redhat.com \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luca.abeni@santannapisa.it \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=yurand2000@gmail.com \
--cc=yuri.andriaccio@santannapisa.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®