Re: [PATCH] sched/deadline: Fix DL server initialization for initially offline CPUs

Juri Lelli <[email protected]>
Newsgroups org.kernel.vger.stable,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
Hi Hui Su,

On 11/08/26 18:06, Hui Su wrote:
> Commit 9f239df55546 ("sched/deadline: Initialize dl_servers after SMP")
> moved DL server initialization to sched_init_smp(), assuming that all
> CPUs are online after SMP initialization.
> 
> That assumption does not hold when CPUs are intentionally left offline
> at boot, for example with maxcpus=. sched_init_dl_servers() only walks
> online CPUs, so the fair and sched_ext DL servers of an initially
> offline CPU never get their default DL parameters configured. Bringing
> the CPU online later does not run this initialization again, leaving the
> server parameters at zero.
> 
> For example, boot a two-vCPU QEMU guest with maxcpus=1 and then bring
> CPU1 online:
> 
>   # echo 1 > /sys/devices/system/cpu/cpu1/online
>   # cat /sys/kernel/debug/sched/fair_server/cpu1/runtime
>   0
>   # cat /sys/kernel/debug/sched/fair_server/cpu1/period
>   0
> 
> With a zero runtime the fair server cannot be activated, so fair tasks
> on the late-online CPU can be starved when higher-priority tasks
> monopolize the CPU, potentially causing user-space workloads to stall.
> 
> Initialize DL servers for all possible CPUs instead. For CPUs that are
> already online, preserve the existing initialization behavior. For an
> initially offline CPU, initialize the server parameters and keep its
> bandwidth reservation local to the runqueue, but do not account it to
> the root domain until the CPU becomes active. A subsequent root-domain
> rebuild then publishes the reservation.
> 
> Avoid updating the runqueue clock and setting up the current CBS period
> for offline CPUs. The configured runtime and period are initialized at
> boot, while the dynamic runtime and absolute deadline are initialized
> through the normal CBS wakeup path when the server is first started.
> 
> After the fix, the same test reports:
> 
>   # cat /sys/kernel/debug/sched/fair_server/cpu1/runtime
>   50000000
>   # cat /sys/kernel/debug/sched/fair_server/cpu1/period
>   1000000000
> 
> Fixes: 9f239df55546 ("sched/deadline: Initialize dl_servers after SMP")
> Cc: [email protected]
> Signed-off-by: Hui Su <[email protected]>
> ---

Thanks for the fix, makes sense to me.

Acked-by: Juri Lelli <[email protected]>

BTW, while reviewing, sashiko noted a related pre-existing issue in the
init=false path of dl_server_apply_params(): __dl_sub() and __dl_add() are
called unconditionally with cpus that could be 0 during CPU hot-unplug, when
the CPU is no longer active but still online. sched_server_write_common() only
checks cpu_online(), so a debugfs write during that window could hit a
divide-by-zero.

Could you take a look and consider posting an additional patch to address it?

Thanks,
Juri
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.