mm, slub: add CONFIG_SLUB_TINY
authorVlastimil Babka <vbabka@suse.cz>
Mon, 14 Nov 2022 17:13:45 +0000 (18:13 +0100)
committerVlastimil Babka <vbabka@suse.cz>
Sun, 27 Nov 2022 22:38:02 +0000 (23:38 +0100)
For tiny systems that have used SLOB until now, SLUB might be
impractical due to its higher memory usage. To help with that, introduce
an option CONFIG_SLUB_TINY that modifies SLUB to use less memory.
This is done by sacrificing scalability, security and debugging
features, therefore not recommended for any system with more than 16MB
RAM.

This commit introduces the option and uses it to set other related
options in a way that reduces memory usage.

Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Acked-by: Hyeonggon Yoo <42.hyeyoo@gmail.com>
Acked-by: Mike Rapoport <rppt@linux.ibm.com>
Reviewed-by: Christoph Lameter <cl@linux.com>
lib/Kconfig.kasan
mm/Kconfig
mm/Kconfig.debug

index ca09b1cf8ee9d3b7993352bc57da5d159bb06c56..836f70393e22cea591e593b689f25e5101f3c15e 100644 (file)
@@ -37,7 +37,7 @@ menuconfig KASAN
                     (HAVE_ARCH_KASAN_SW_TAGS && CC_HAS_KASAN_SW_TAGS)) && \
                    CC_HAS_WORKING_NOSANITIZE_ADDRESS) || \
                   HAVE_ARCH_KASAN_HW_TAGS
-       depends on (SLUB && SYSFS) || (SLAB && !DEBUG_SLAB)
+       depends on (SLUB && SYSFS && !SLUB_TINY) || (SLAB && !DEBUG_SLAB)
        select STACKDEPOT_ALWAYS_INIT
        help
          Enables KASAN (Kernel Address Sanitizer) - a dynamic memory safety
index 57e1d8c5b505287c3c0c81474d0daaa8f333e3d1..6701d72d3037a69d8a7507734452e4d214e7160e 100644 (file)
@@ -230,6 +230,19 @@ config SLOB
 
 endchoice
 
+config SLUB_TINY
+       bool "Configure SLUB for minimal memory footprint"
+       depends on SLUB && EXPERT
+       select SLAB_MERGE_DEFAULT
+       help
+          Configures the SLUB allocator in a way to achieve minimal memory
+          footprint, sacrificing scalability, debugging and other features.
+          This is intended only for the smallest system that had used the
+          SLOB allocator and is not recommended for systems with more than
+          16MB RAM.
+
+          If unsure, say N.
+
 config SLAB_MERGE_DEFAULT
        bool "Allow slab caches to be merged"
        default y
@@ -247,7 +260,7 @@ config SLAB_MERGE_DEFAULT
 
 config SLAB_FREELIST_RANDOM
        bool "Randomize slab freelist"
-       depends on SLAB || SLUB
+       depends on SLAB || (SLUB && !SLUB_TINY)
        help
          Randomizes the freelist order used on creating new pages. This
          security feature reduces the predictability of the kernel slab
@@ -255,7 +268,7 @@ config SLAB_FREELIST_RANDOM
 
 config SLAB_FREELIST_HARDENED
        bool "Harden slab freelist metadata"
-       depends on SLAB || SLUB
+       depends on SLAB || (SLUB && !SLUB_TINY)
        help
          Many kernel heap attacks try to target slab cache metadata and
          other infrastructure. This options makes minor performance
@@ -267,7 +280,7 @@ config SLAB_FREELIST_HARDENED
 config SLUB_STATS
        default n
        bool "Enable SLUB performance statistics"
-       depends on SLUB && SYSFS
+       depends on SLUB && SYSFS && !SLUB_TINY
        help
          SLUB statistics are useful to debug SLUBs allocation behavior in
          order find ways to optimize the allocator. This should never be
@@ -279,7 +292,7 @@ config SLUB_STATS
 
 config SLUB_CPU_PARTIAL
        default y
-       depends on SLUB && SMP
+       depends on SLUB && SMP && !SLUB_TINY
        bool "SLUB per cpu partial cache"
        help
          Per cpu partial caches accelerate objects allocation and freeing
index ce8dded36de94247fe2de6c3c2e83a097c851d5c..fca699ad1fb05f02250c0d5b4abcad4de5d7a6b4 100644 (file)
@@ -56,7 +56,7 @@ config DEBUG_SLAB
 config SLUB_DEBUG
        default y
        bool "Enable SLUB debugging support" if EXPERT
-       depends on SLUB && SYSFS
+       depends on SLUB && SYSFS && !SLUB_TINY
        select STACKDEPOT if STACKTRACE_SUPPORT
        help
          SLUB has extensive debug support features. Disabling these can