Re: [PATCH] sched: Tweak default dynamic preempt mode selection
From: Mike Galbraith
Date: Tue Nov 09 2021 - 08:31:19 EST
On Tue, 2021-11-09 at 12:19 +0000, Valentin Schneider wrote:
> On 09/11/21 12:00, Mike Galbraith wrote:
>
>
> > -config PREEMPT_NONE
> > +if PREEMPT_DYNAMIC
> > +config PREEMPT
> > bool
> >
>
> On my end this doesn't let PREEMPT_DYNAMIC select PREEMPT, which I came to
> realize we need (places like vermagic.h and ftrace's print_trace_header();
> also it avoids a lot of headaches).
Oops.
>
> The below lets me have PREEMPT w/ PREEMPT_DYNAMIC. The one annoying thing
> is the Preemption Model prompt remains visible in menuconfig when
> PREEMPT_DYNAMIC is selected, but eh...
Works for me, and looks a hell of a lot better. Ship it.
>
> ---
> diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
> index 12ac42a3415f..e01588f9de1f 100644
> --- a/kernel/Kconfig.preempt
> +++ b/kernel/Kconfig.preempt
> @@ -1,18 +1,9 @@
> # SPDX-License-Identifier: GPL-2.0-only
>
> -choice
> - prompt "Preemption Model"
> - default PREEMPT_STATIC
> -
> -config PREEMPT_STATIC
> - bool "Preemption behaviour defined at build"
> -
> config PREEMPT_DYNAMIC
> bool "Preemption behaviour defined on boot"
> depends on HAVE_PREEMPT_DYNAMIC && !ARCH_NO_PREEMPT
> select PREEMPT
> - select PREEMPTION
> - select UNINLINE_SPIN_UNLOCK if !ARCH_INLINE_SPIN_UNLOCK
> help
> This option allows to define the preemption model on the kernel
> command line parameter and thus override the default preemption
> @@ -28,15 +19,14 @@ config PREEMPT_DYNAMIC
>
> Interesting if you want the same pre-built kernel should be used for
> both Server and Desktop workloads.
> -endchoice
>
> -if PREEMPT_STATIC
> choice
> - prompt "Preemption Flavor"
> + prompt "Preemption Model"
> default PREEMPT_NONE
>
> config PREEMPT_NONE
> bool "No Forced Preemption (Server)"
> + depends on !PREEMPT_DYNAMIC
> help
> This is the traditional Linux preemption model, geared towards
> throughput. It will still provide good latencies most of the
> @@ -50,7 +40,7 @@ config PREEMPT_NONE
>
> config PREEMPT_VOLUNTARY
> bool "Voluntary Kernel Preemption (Desktop)"
> - depends on !ARCH_NO_PREEMPT
> + depends on !ARCH_NO_PREEMPT && !PREEMPT_DYNAMIC
> help
> This option reduces the latency of the kernel by adding more
> "explicit preemption points" to the kernel code. These new
> @@ -88,7 +78,7 @@ config PREEMPT
>
> config PREEMPT_RT
> bool "Fully Preemptible Kernel (Real-Time)"
> - depends on EXPERT && ARCH_SUPPORTS_RT
> + depends on EXPERT && ARCH_SUPPORTS_RT && !PREEMPT_DYNAMIC
> select PREEMPTION
> help
> This option turns the kernel into a real-time kernel by replacing
> @@ -104,14 +94,10 @@ config PREEMPT_RT
> require real-time guarantees.
>
> endchoice
> -endif # PREEMPT_STATIC
> -
> -if PREEMPT_DYNAMIC
> -config PREEMPT
> - bool
>
> choice
> - prompt "Boot Time Preemption Flavor"
> + prompt "Boot Time Preemption Model"
> + depends on PREEMPT_DYNAMIC
> default PREEMPT_NONE_BEHAVIOR
>
> config PREEMPT_NONE_BEHAVIOR
> @@ -123,7 +109,6 @@ config PREEMPT_VOLUNTARY_BEHAVIOR
> config PREEMPT_BEHAVIOR
> bool "Preemptible Kernel (Low-Latency Desktop)"
> endchoice
> -endif # PREEMPT_DYNAMIC
>
> config PREEMPT_COUNT
> bool
> @@ -149,5 +134,3 @@ config SCHED_CORE
> SCHED_CORE is default disabled. When it is enabled and unused,
> which is the likely usage by Linux distributions, there should
> be no measurable impact on performance.
> -
> -