diff options
Diffstat (limited to 'debian/patches/features/arm64/arm64-dynamically-allocate-cpumasks-and-increase-supported-cpus-to-512.patch')
-rw-r--r-- | debian/patches/features/arm64/arm64-dynamically-allocate-cpumasks-and-increase-supported-cpus-to-512.patch | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/debian/patches/features/arm64/arm64-dynamically-allocate-cpumasks-and-increase-supported-cpus-to-512.patch b/debian/patches/features/arm64/arm64-dynamically-allocate-cpumasks-and-increase-supported-cpus-to-512.patch new file mode 100644 index 0000000000..dd7c02e005 --- /dev/null +++ b/debian/patches/features/arm64/arm64-dynamically-allocate-cpumasks-and-increase-supported-cpus-to-512.patch @@ -0,0 +1,98 @@ +From: "Christoph Lameter (Ampere)" <cl@gentwo.org> +Date: Wed, 6 Mar 2024 17:45:04 -0800 +Subject: ARM64: Dynamically allocate cpumasks and increase supported CPUs to + 512 +Forwarded: https://lore.kernel.org/lkml/37099a57-b655-3b3a-56d0-5f7fbd49d7db@gentwo.org/ +Applied-Upstream: 3fbd56f0e7c14e7c7a7597fd4a368753fe70d76f + + [ a.k.a. Revert "Revert "ARM64: Dynamically allocate cpumasks and + increase supported CPUs to 512""; originally reverted because of a + bug in the cpufreq-dt code not using zalloc_cpumask_var() ] + +Currently defconfig selects NR_CPUS=256, but some vendors (e.g. Ampere +Computing) are planning to ship systems with 512 CPUs. So that all CPUs on +these systems can be used with defconfig, we'd like to bump NR_CPUS to 512. +Therefore this patch increases the default NR_CPUS from 256 to 512. + +As increasing NR_CPUS will increase the size of cpumasks, there's a fear that +this might have a significant impact on stack usage due to code which places +cpumasks on the stack. To mitigate that concern, we can select +CPUMASK_OFFSTACK. As that doesn't seem to be a problem today with +NR_CPUS=256, we only select this when NR_CPUS > 256. + +CPUMASK_OFFSTACK configures the cpumasks in the kernel to be +dynamically allocated. This was used in the X86 architecture in the +past to enable support for larger CPU configurations up to 8k cpus. + +With that is becomes possible to dynamically size the allocation of +the cpu bitmaps depending on the quantity of processors detected on +bootup. Memory used for cpumasks will increase if the kernel is +run on a machine with more cores. + +Further increases may be needed if ARM processor vendors start +supporting more processors. Given the current inflationary trends +in core counts from multiple processor manufacturers this may occur. + +There are minor regressions for hackbench. The kernel data size +for 512 cpus is smaller with offstack than with onstack. + +Benchmark results using hackbench average over 10 runs of + + hackbench -s 512 -l 2000 -g 15 -f 25 -P + +on Altra 80 Core + +Support for 256 CPUs on stack. Baseline + + 7.8564 sec + +Support for 512 CUs on stack. + + 7.8713 sec + 0.18% + +512 CPUS offstack + + 7.8916 sec + 0.44% + +Kernel size comparison: + + text data filename Difference to onstack256 baseline +25755648 9589248 vmlinuz-6.8.0-rc4-onstack256 +25755648 9607680 vmlinuz-6.8.0-rc4-onstack512 +0.19% +25755648 9603584 vmlinuz-6.8.0-rc4-offstack512 +0.14% + +Tested-by: Eric Mackay <eric.mackay@oracle.com> +Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> +Signed-off-by: Christoph Lameter (Ampere) <cl@linux.com> +Acked-by: Mark Rutland <mark.rutland@arm.com> +Link: https://lore.kernel.org/r/37099a57-b655-3b3a-56d0-5f7fbd49d7db@gentwo.org +Link: https://lore.kernel.org/r/20240314125457.186678-1-m.szyprowski@samsung.com +[catalin.marinas@arm.com: use 'select' instead of duplicating 'config CPUMASK_OFFSTACK'] +Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> +--- + arch/arm64/Kconfig | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig +index 4869265ace2ddd..a03de40bd4cd7c 100644 +--- a/arch/arm64/Kconfig ++++ b/arch/arm64/Kconfig +@@ -120,6 +120,7 @@ config ARM64 + select CLONE_BACKWARDS + select COMMON_CLK + select CPU_PM if (SUSPEND || CPU_IDLE) ++ select CPUMASK_OFFSTACK if NR_CPUS > 256 + select CRC32 + select DCACHE_WORD_ACCESS + select DYNAMIC_FTRACE if FUNCTION_TRACER +@@ -1430,7 +1431,7 @@ config SCHED_SMT + config NR_CPUS + int "Maximum number of CPUs (2-4096)" + range 2 4096 +- default "256" ++ default "512" + + config HOTPLUG_CPU + bool "Support for hot-pluggable CPUs" +-- +cgit 1.2.3-korg |