Re: [PATCH 0/5] sched: Make CONFIG_SCHED_DEBUG features unconditional
From: Ingo Molnar
Date: Wed Mar 19 2025 - 17:10:14 EST
* Valentin Schneider <vschneid@xxxxxxxxxx> wrote:
> On 17/03/25 11:42, Ingo Molnar wrote:
> > For more than a decade, CONFIG_SCHED_DEBUG=y has been enabled
> > in all the major Linux distributions:
> >
> > /boot/config-6.11.0-19-generic:CONFIG_SCHED_DEBUG=y
> >
> > The reason is that while originally CONFIG_SCHED_DEBUG started
> > out as a debugging feature, over the years (decades ...) it has
> > grown various bits of statistics, instrumentation and
> > control knobs that are useful for sysadmin and general software
> > development purposes as well.
> >
> > But within the kernel we still pretend that there's a choice,
> > and sometimes code that is seemingly 'debug only' creates overhead
> > that should be optimized in reality.
> >
> > So make it all official and make CONFIG_SCHED_DEBUG unconditional.
> > This gets rid of a large amount of #ifdefs, so good riddance ...
> >
>
> Pretty much every distro I'm aware of has CONFIG_SCHED_DEBUG=y; a quick check
> tells me it's been like so for RHEL since at least 2013, and that's from a
> commit copying configs from RHEL-6 to RHEL-7.
>
> Two things however come to mind:
>
> 1) What does this mean for the debug stuff we've repeatedly said wasn't ABI
> because it was under CONFIG_SCHED_DEBUG? I've been burned by making
> sched_domain.flags read-only, and there's still writable stuff:
>
> # ls -al /sys/kernel/debug/sched/domains/cpu0/domain0/
> total 0
> drwxr-xr-x. 2 root root 0 Mar 19 04:36 .
> drwxr-xr-x. 3 root root 0 Mar 19 04:36 ..
> -rw-r--r--. 1 root root 0 Mar 19 04:36 busy_factor
> -rw-r--r--. 1 root root 0 Mar 19 04:36 cache_nice_tries
> -r--r--r--. 1 root root 0 Mar 19 04:36 flags
> -r--r--r--. 1 root root 0 Mar 19 04:36 groups_flags
> -rw-r--r--. 1 root root 0 Mar 19 04:36 imbalance_pct
> -r--r--r--. 1 root root 0 Mar 19 04:36 level
> -rw-r--r--. 1 root root 0 Mar 19 04:36 max_interval
> -rw-r--r--. 1 root root 0 Mar 19 04:36 max_newidle_lb_cost
> -rw-r--r--. 1 root root 0 Mar 19 04:36 min_interval
> -r--r--r--. 1 root root 0 Mar 19 04:36 name
>
> + all the non topology related debug knobs.
Yeah, I don't think these or other sysctls are as contentious as
previously thought. We might want to put '/debug/' into the directory
name above, or we could move it over to debugfs entirely - but we
should make it clear via the name that these are debugging knobs in
essence.
> 2) Peter mentioned a few times that, last time it was benchmarked, there
> were noticeable perf differences between CONFIG_SCHED_DEBUG=n and
> CONFIG_SCHED_DEBUG=y. This would be an occasion to re-measure that and
> potentially move (some of) these checks to e.g. a sched_debug_verbose
> static key.
Yeah, and this is an argument strongly *in favor* of eliminating
CONFIG_SCHED_DEBUG: in a way the CONFIG_SCHED_DEBUG "option" created a
false sense of "it's only debug code". But it's not a genuine debug
option, it's actual overhead for the vast majority of Linux distros and
users.
So let's just eliminate SCHED_DEBUG, and fix any overhead. It's exactly
what we should do anyway - nothing changes IMHO, just the appearance of
urgency. :-)
Thanks,
Ingo