From: Tao Cui <cui.tao@linux.dev>
To: Andrea Righi <arighi@nvidia.com>
Cc: cui.tao@linux.dev, tj@kernel.org, void@manifault.com,
changwoo@igalia.com, suzhidao@xiaomi.com,
sched-ext@lists.linux.dev, linux-kernel@vger.kernel.org,
bpf@vger.kernel.org, Tao Cui <cuitao@kylinos.cn>
Subject: Re: [PATCH] sched_ext: pass the initial cpu.idle state in scx_cgroup_init_args
Date: Mon, 24 Aug 2026 22:16:49 +0800 [thread overview]
Message-ID: <13ca7798-d10e-471d-aab7-e3199199e07f@linux.dev> (raw)
In-Reply-To: <aoxRHw-Q5FCUX6zo@gpd4>
Hello, Andrea
在 2026/8/24 22:11, Andrea Righi 写道:
> Hi Tao,
>
> On Mon, Aug 24, 2026 at 09:39:54PM +0800, Tao Cui wrote:
>> From: Tao Cui <cuitao@kylinos.cn>
>>
>> scx_cgroup_init_args carries the initial weight and bandwidth control
>> parameters of a cgroup to ops.cgroup_init(), but not its cpu.idle
>> state. A cgroup that was already configured idle before the scheduler
>> was loaded (or before it was onlined under it) is presented as
>> non-idle, and the BPF scheduler only learns about it if cpu.idle is
>> written again later.
>>
>> Add the idle state to scx_cgroup_init_args and fill it in both places
>> that build the args -- scx_tg_online() for cgroups created under the
>> scheduler and scx_cgroup_init() for cgroups that already exist when
>> the scheduler is loaded.
>>
>> Verified in a VM with a probe scheduler printing the init args: a
>> cgroup configured cpu.idle=1 before loading shows idle=1 in
>> ops.cgroup_init(), the default shows 0, and later cpu.idle writes
>> still come through ops.cgroup_set_idle().
>>
>> Signed-off-by: Tao Cui <cuitao@kylinos.cn>
>> ---
>> kernel/sched/ext/ext.c | 4 +++-
>> kernel/sched/ext/internal.h | 3 +++
>> 2 files changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/kernel/sched/ext/ext.c b/kernel/sched/ext/ext.c
>> index b646711a45fe..a7218314dcfb 100644
>> --- a/kernel/sched/ext/ext.c
>> +++ b/kernel/sched/ext/ext.c
>> @@ -4764,7 +4764,8 @@ int scx_tg_online(struct task_group *tg)
>> { .weight = tg->scx.weight,
>> .bw_period_us = tg->scx.bw_period_us,
>> .bw_quota_us = tg->scx.bw_quota_us,
>> - .bw_burst_us = tg->scx.bw_burst_us };
>> + .bw_burst_us = tg->scx.bw_burst_us,
>> + .idle = tg->scx.idle };
>>
>> ret = SCX_CALL_OP_RET(sch, cgroup_init,
>> NULL, tg->css.cgroup, &args);
>> @@ -5185,6 +5186,7 @@ static int scx_cgroup_init(struct scx_sched *sch)
>> .bw_period_us = tg->scx.bw_period_us,
>> .bw_quota_us = tg->scx.bw_quota_us,
>> .bw_burst_us = tg->scx.bw_burst_us,
>> + .idle = tg->scx.idle,
>> };
>>
>> ret = SCX_CALL_OP_RET(sch, cgroup_init, NULL, css->cgroup, &args);
>> diff --git a/kernel/sched/ext/internal.h b/kernel/sched/ext/internal.h
>> index 53e136a47924..aa149a9c29f7 100644
>> --- a/kernel/sched/ext/internal.h
>> +++ b/kernel/sched/ext/internal.h
>> @@ -259,6 +259,9 @@ struct scx_cgroup_init_args {
>> u64 bw_period_us;
>> u64 bw_quota_us;
>> u64 bw_burst_us;
>> +
>> + /* whether the cgroup is configured idle via cpu.idle */
>> + bool idle;
>> };
>
> It looks like there are two more places in kernel/sched/ext/sub.c,
> scx_cgroup_claim_subtree() and scx_cgroup_return_subtree(), they should also
> initialize idle. Otherwise the field defaults to false and an idle cgroup would
> be presented as non-idle when it's handed to a sub-scheduler.
>
Right, I missed those two. v2 fills .idle in all four places that
build scx_cgroup_init_args, including both sub-scheduler handover
paths in sub.c. The main paths are verified in a VM; the sub.c ones
are compile-tested only.
Thanks,
Tao> Thanks,
> -Andrea
prev parent reply other threads:[~2026-08-24 14:16 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-24 13:39 [PATCH] sched_ext: pass the initial cpu.idle state in scx_cgroup_init_args Tao Cui
2026-08-24 13:55 ` sashiko-bot
2026-08-24 14:11 ` Andrea Righi
2026-08-24 14:16 ` Tao Cui [this message]
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=13ca7798-d10e-471d-aab7-e3199199e07f@linux.dev \
--to=cui.tao@linux.dev \
--cc=arighi@nvidia.com \
--cc=bpf@vger.kernel.org \
--cc=changwoo@igalia.com \
--cc=cuitao@kylinos.cn \
--cc=linux-kernel@vger.kernel.org \
--cc=sched-ext@lists.linux.dev \
--cc=suzhidao@xiaomi.com \
--cc=tj@kernel.org \
--cc=void@manifault.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.