Barry recently introduced a new CONFIG_SCHED_CLUSTER, and discussions around that highlighted that every architecture redefines its own help text and dependencies for CONFIG_SCHED_SMT and CONFIG_SCHED_MC. Move the definition of those to scheduler's Kconfig to centralize help text and generic dependencies (i.e. SMP). Make them depend on a matching ARCH_SUPPORTS_SCHED_* which the architectures can select with the relevant architecture-specific dependency. s390 uses its own topology table (set_sched_topology()) and doesn't seem to cope without SCHED_MC or SCHED_SMT, so those remain untogglable. Suggested-by: Barry Song <21cnbao@xxxxxxxxx> Signed-off-by: Valentin Schneider <valentin.schneider@xxxxxxx> --- arch/arm/Kconfig | 18 ++---------------- arch/arm64/Kconfig | 26 +++----------------------- arch/ia64/Kconfig | 9 +-------- arch/mips/Kconfig | 10 +--------- arch/parisc/Kconfig | 9 +-------- arch/powerpc/Kconfig | 9 +-------- arch/s390/Kconfig | 8 ++------ arch/sh/Kconfig | 1 + arch/sh/mm/Kconfig | 9 --------- arch/sparc/Kconfig | 20 ++------------------ arch/x86/Kconfig | 26 +++----------------------- kernel/sched/Kconfig | 43 +++++++++++++++++++++++++++++++++++++++++++ 12 files changed, 60 insertions(+), 128 deletions(-) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index fc196421b2ce..13aac98edf06 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -32,6 +32,8 @@ config ARM select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT if CPU_V7 select ARCH_SUPPORTS_ATOMIC_RMW select ARCH_SUPPORTS_HUGETLBFS if ARM_LPAE + select ARCH_SUPPORTS_SCHED_SMT if ARM_CPU_TOPOLOGY + select ARCH_SUPPORTS_SCHED_MC if ARM_CPU_TOPOLOGY select ARCH_USE_BUILTIN_BSWAP select ARCH_USE_CMPXCHG_LOCKREF select ARCH_USE_MEMTEST @@ -1166,22 +1168,6 @@ config ARM_CPU_TOPOLOGY affinity between processors which is then used to describe the cpu topology of an ARM System. -config SCHED_MC - bool "Multi-core scheduler support" - depends on ARM_CPU_TOPOLOGY - help - Multi-core scheduler support improves the CPU scheduler's decision - making when dealing with multi-core CPU chips at a cost of slightly - increased overhead in some places. If unsure say N here. - -config SCHED_SMT - bool "SMT scheduler support" - depends on ARM_CPU_TOPOLOGY - help - Improves the CPU scheduler's decision making when dealing with - MultiThreading at a cost of slightly increased overhead in some - places. If unsure say N here. - config HAVE_ARM_SCU bool help diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index d13677f4731d..8a49dd33f5e3 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -88,6 +88,9 @@ config ARM64 select ARCH_SUPPORTS_ATOMIC_RMW select ARCH_SUPPORTS_INT128 if CC_HAS_INT128 select ARCH_SUPPORTS_NUMA_BALANCING + select ARCH_SUPPORTS_SCHED_SMT + select ARCH_SUPPORTS_SCHED_MC + select ARCH_SUPPORTS_SCHED_CLUSTER select ARCH_WANT_COMPAT_IPC_PARSE_VERSION if COMPAT select ARCH_WANT_DEFAULT_BPF_JIT select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT @@ -982,29 +985,6 @@ config CPU_LITTLE_ENDIAN endchoice -config SCHED_MC - bool "Multi-core scheduler support" - help - Multi-core scheduler support improves the CPU scheduler's decision - making when dealing with multi-core CPU chips at a cost of slightly - increased overhead in some places. If unsure say N here. - -config SCHED_CLUSTER - bool "Cluster scheduler support" - help - Cluster scheduler support improves the CPU scheduler's decision - making when dealing with machines that have clusters of CPUs. - Cluster usually means a couple of CPUs which are placed closely - by sharing mid-level caches, last-level cache tags or internal - busses. - -config SCHED_SMT - bool "SMT scheduler support" - help - Improves the CPU scheduler's decision making when dealing with - MultiThreading at a cost of slightly increased overhead in some - places. If unsure say N here. - config NR_CPUS int "Maximum number of CPUs (2-4096)" range 2 4096 diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 045792cde481..67f3d84242ae 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig @@ -18,6 +18,7 @@ config IA64 select ARCH_ENABLE_MEMORY_HOTPLUG select ARCH_ENABLE_MEMORY_HOTREMOVE select ARCH_SUPPORTS_ACPI + select ARCH_SUPPORTS_SCHED_SMT select ACPI_SYSTEM_POWER_STATES_SUPPORT if ACPI select ARCH_MIGHT_HAVE_ACPI_PDC if ACPI select FORCE_PCI @@ -247,14 +248,6 @@ config HOTPLUG_CPU can be controlled through /sys/devices/system/cpu/cpu#. Say N if you want to disable CPU hotplug. -config SCHED_SMT - bool "SMT scheduler support" - depends on SMP - help - Improves the CPU scheduler's decision making when dealing with - Intel IA64 chips with MultiThreading at a cost of slightly increased - overhead in some places. If unsure say N here. - config PERMIT_BSP_REMOVE bool "Support removal of Bootstrap Processor" depends on HOTPLUG_CPU diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 771ca53af06d..cc60d440b097 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -2373,17 +2373,9 @@ config MIPS_MT_SMP config MIPS_MT bool -config SCHED_SMT - bool "SMT (multithreading) scheduler support" - depends on SYS_SUPPORTS_SCHED_SMT - default n - help - SMT scheduler support improves the CPU scheduler's decision making - when dealing with MIPS MT enabled cores at a cost of slightly - increased overhead in some places. If unsure say N here. - config SYS_SUPPORTS_SCHED_SMT bool + select ARCH_SUPPORTS_SCHED_SMT config SYS_SUPPORTS_MULTITHREADING bool diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 4742b6f169b7..6aaa962ec2f4 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig @@ -13,6 +13,7 @@ config PARISC select ARCH_NO_SG_CHAIN select ARCH_SUPPORTS_HUGETLBFS if PA20 select ARCH_SUPPORTS_MEMORY_FAILURE + select ARCH_SUPPORTS_SCHED_MC if PARISC_CPU_TOPOLOGY && PA8X00 select DMA_OPS select RTC_CLASS select RTC_DRV_GENERIC @@ -295,14 +296,6 @@ config PARISC_CPU_TOPOLOGY help Support PARISC cpu topology definition. -config SCHED_MC - bool "Multi-core scheduler support" - depends on PARISC_CPU_TOPOLOGY && PA8X00 - help - Multi-core scheduler support improves the CPU scheduler's decision - making when dealing with multi-core CPU chips at a cost of slightly - increased overhead in some places. If unsure say N here. - config IRQSTACKS bool "Use separate kernel stacks when processing interrupts" default y diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index ba5b66189358..9f45b92ccac1 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -151,6 +151,7 @@ config PPC select ARCH_STACKWALK select ARCH_SUPPORTS_ATOMIC_RMW select ARCH_SUPPORTS_DEBUG_PAGEALLOC if PPC32 || PPC_BOOK3S_64 + select ARCH_SUPPORTS_SCHED_SMT if PPC64 select ARCH_USE_BUILTIN_BSWAP select ARCH_USE_CMPXCHG_LOCKREF if PPC64 select ARCH_USE_MEMTEST @@ -861,14 +862,6 @@ config PPC_PROT_SAO_LPAR config PPC_COPRO_BASE bool -config SCHED_SMT - bool "SMT (Hyperthreading) scheduler support" - depends on PPC64 && SMP - help - SMT scheduler support improves the CPU scheduler's decision making - when dealing with POWER5 cpus at a cost of slightly increased - overhead in some places. If unsure say N here. - config PPC_DENORMALISATION bool "PowerPC denormalisation exception handling" depends on PPC_BOOK3S_64 diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index b86de61b8caa..a0b4117cb1fa 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -483,12 +483,6 @@ config NODES_SHIFT depends on NUMA default "1" -config SCHED_SMT - def_bool n - -config SCHED_MC - def_bool n - config SCHED_BOOK def_bool n @@ -498,6 +492,8 @@ config SCHED_DRAWER config SCHED_TOPOLOGY def_bool y prompt "Topology scheduler support" + select ARCH_SUPPORTS_SCHED_SMT + select ARCH_SUPPORTS_SCHED_MC select SCHED_SMT select SCHED_MC select SCHED_BOOK diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 6904f4bdbf00..7380ee27d252 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -13,6 +13,7 @@ config SUPERH select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST select ARCH_HIBERNATION_POSSIBLE if MMU select ARCH_MIGHT_HAVE_PC_PARPORT + select ARCH_SUPPORTS_SCHED_MC select ARCH_WANT_IPC_PARSE_VERSION select CPU_NO_EFFICIENT_FFS select DMA_DECLARE_COHERENT diff --git a/arch/sh/mm/Kconfig b/arch/sh/mm/Kconfig index ba569cfb4368..1d9f7006a72a 100644 --- a/arch/sh/mm/Kconfig +++ b/arch/sh/mm/Kconfig @@ -208,15 +208,6 @@ config HUGETLB_PAGE_SIZE_64MB endchoice -config SCHED_MC - bool "Multi-core scheduler support" - depends on SMP - default y - help - Multi-core scheduler support improves the CPU scheduler's decision - making when dealing with multi-core CPU chips at a cost of slightly - increased overhead in some places. If unsure say N here. - endmenu menu "Cache configuration" diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index b120ed947f50..a6cf30d37725 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -86,6 +86,8 @@ config SPARC64 select HAVE_ARCH_AUDITSYSCALL select ARCH_SUPPORTS_ATOMIC_RMW select ARCH_SUPPORTS_DEBUG_PAGEALLOC + select ARCH_SUPPORTS_SCHED_SMT + select ARCH_SUPPORTS_SCHED_MC select HAVE_NMI select HAVE_REGS_AND_STACK_ACCESS_API select ARCH_USE_QUEUED_RWLOCKS @@ -290,24 +292,6 @@ if SPARC64 source "kernel/power/Kconfig" endif -config SCHED_SMT - bool "SMT (Hyperthreading) scheduler support" - depends on SPARC64 && SMP - default y - help - SMT scheduler support improves the CPU scheduler's decision making - when dealing with SPARC cpus at a cost of slightly increased overhead - in some places. If unsure say N here. - -config SCHED_MC - bool "Multi-core scheduler support" - depends on SPARC64 && SMP - default y - help - Multi-core scheduler support improves the CPU scheduler's decision - making when dealing with multi-core CPU chips at a cost of slightly - increased overhead in some places. If unsure say N here. - config CMDLINE_BOOL bool "Default bootloader kernel arguments" depends on SPARC64 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 349e59b2f0e3..87a91fd33d85 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -107,6 +107,9 @@ config X86 select ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP if NR_CPUS <= 4096 select ARCH_SUPPORTS_LTO_CLANG select ARCH_SUPPORTS_LTO_CLANG_THIN + select ARCH_SUPPORTS_SCHED_SMT + select ARCH_SUPPORTS_SCHED_MC + select ARCH_SUPPORTS_SCHED_CLUSTER select ARCH_USE_BUILTIN_BSWAP select ARCH_USE_MEMTEST select ARCH_USE_QUEUED_RWLOCKS @@ -1001,29 +1004,6 @@ config NR_CPUS This is purely to save memory: each supported CPU adds about 8KB to the kernel image. -config SCHED_CLUSTER - bool "Cluster scheduler support" - depends on SMP - default y - help - Cluster scheduler support improves the CPU scheduler's decision - making when dealing with machines that have clusters of CPUs. - Cluster usually means a couple of CPUs which are placed closely - by sharing mid-level caches, last-level cache tags or internal - busses. - -config SCHED_SMT - def_bool y if SMP - -config SCHED_MC - def_bool y - prompt "Multi-core scheduler support" - depends on SMP - help - Multi-core scheduler support improves the CPU scheduler's decision - making when dealing with multi-core CPU chips at a cost of slightly - increased overhead in some places. If unsure say N here. - config SCHED_MC_PRIO bool "CPU core priorities scheduler support" depends on SCHED_MC && CPU_SUP_INTEL diff --git a/kernel/sched/Kconfig b/kernel/sched/Kconfig index c8b8e12c9c9c..9ceb08f42aeb 100644 --- a/kernel/sched/Kconfig +++ b/kernel/sched/Kconfig @@ -131,3 +131,46 @@ 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. + + +# +# For architectuers that want to enable generic scheduler handling of +# different topology levels: +# +config ARCH_SUPPORTS_SCHED_SMT + bool + +config ARCH_SUPPORTS_SCHED_MC + bool + +config ARCH_SUPPORTS_SCHED_CLUSTER + bool + +config SCHED_SMT + bool "SMT scheduler support" + depends on ARCH_SUPPORTS_SCHED_SMT && SMP + default y + help + Improves the CPU scheduler's decision making when dealing with + MultiThreading at a cost of slightly increased overhead in some + places. If unsure say N here. + +config SCHED_MC + bool "Multi-core scheduler support" + depends on ARCH_SUPPORTS_SCHED_MC && SMP + default y + help + Multi-core scheduler support improves the CPU scheduler's decision + making when dealing with multi-core CPU chips at a cost of slightly + increased overhead in some places. If unsure say N here. + +config SCHED_CLUSTER + bool "Cluster scheduler support" + depends on ARCH_SUPPORTS_SCHED_CLUSTER && SMP + default y + help + Cluster scheduler support improves the CPU scheduler's decision + making when dealing with machines that have clusters of CPUs. + Cluster usually means a couple of CPUs which are placed closely + by sharing mid-level caches, last-level cache tags or internal + busses. -- 2.25.1