mm: Kconfig: group swap, slab, hotplug and thp options into submenus
authorJohannes Weiner <hannes@cmpxchg.org>
Thu, 19 May 2022 21:08:53 +0000 (14:08 -0700)
committerakpm <akpm@linux-foundation.org>
Thu, 19 May 2022 21:08:53 +0000 (14:08 -0700)
There are several clusters of related config options spread throughout the
mostly flat MM submenu.  Group them together and put specialization
options into further subdirectories to make the MM submenu a bit more
organized and easier to navigate.

[hannes@cmpxchg.org: fix kbuild warnings]
Link: https://lkml.kernel.org/r/YnvkSVivfnT57Vwh@cmpxchg.org
[hannes@cmpxchg.org: fix more kbuild warnings]
Link: https://lkml.kernel.org/r/Ynz8NusTdEGcCnJN@cmpxchg.org
Link: https://lkml.kernel.org/r/20220510152847.230957-4-hannes@cmpxchg.org
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Cc: Dan Streetman <ddstreet@ieee.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Roman Gushchin <guro@fb.com>
Cc: Seth Jennings <sjenning@redhat.com>
Cc: Shakeel Butt <shakeelb@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/Kconfig

index 675a6be..f63d8dc 100644 (file)
@@ -9,7 +9,7 @@ menu "Memory Management options"
 config ARCH_NO_SWAP
        bool
 
-config SWAP
+menuconfig SWAP
        bool "Support for paging of anonymous memory (swap)"
        depends on MMU && BLOCK && !ARCH_NO_SWAP
        default y
@@ -19,6 +19,191 @@ config SWAP
          used to provide more virtual memory than the actual RAM present
          in your computer.  If unsure say Y.
 
+config ZSWAP
+       bool "Compressed cache for swap pages (EXPERIMENTAL)"
+       depends on SWAP && CRYPTO=y
+       select FRONTSWAP
+       select ZPOOL
+       help
+         A lightweight compressed cache for swap pages.  It takes
+         pages that are in the process of being swapped out and attempts to
+         compress them into a dynamically allocated RAM-based memory pool.
+         This can result in a significant I/O reduction on swap device and,
+         in the case where decompressing from RAM is faster that swap device
+         reads, can also improve workload performance.
+
+         This is marked experimental because it is a new feature (as of
+         v3.11) that interacts heavily with memory reclaim.  While these
+         interactions don't cause any known issues on simple memory setups,
+         they have not be fully explored on the large set of potential
+         configurations and workloads that exist.
+
+choice
+       prompt "Compressed cache for swap pages default compressor"
+       depends on ZSWAP
+       default ZSWAP_COMPRESSOR_DEFAULT_LZO
+       help
+         Selects the default compression algorithm for the compressed cache
+         for swap pages.
+
+         For an overview what kind of performance can be expected from
+         a particular compression algorithm please refer to the benchmarks
+         available at the following LWN page:
+         https://lwn.net/Articles/751795/
+
+         If in doubt, select 'LZO'.
+
+         The selection made here can be overridden by using the kernel
+         command line 'zswap.compressor=' option.
+
+config ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
+       bool "Deflate"
+       select CRYPTO_DEFLATE
+       help
+         Use the Deflate algorithm as the default compression algorithm.
+
+config ZSWAP_COMPRESSOR_DEFAULT_LZO
+       bool "LZO"
+       select CRYPTO_LZO
+       help
+         Use the LZO algorithm as the default compression algorithm.
+
+config ZSWAP_COMPRESSOR_DEFAULT_842
+       bool "842"
+       select CRYPTO_842
+       help
+         Use the 842 algorithm as the default compression algorithm.
+
+config ZSWAP_COMPRESSOR_DEFAULT_LZ4
+       bool "LZ4"
+       select CRYPTO_LZ4
+       help
+         Use the LZ4 algorithm as the default compression algorithm.
+
+config ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
+       bool "LZ4HC"
+       select CRYPTO_LZ4HC
+       help
+         Use the LZ4HC algorithm as the default compression algorithm.
+
+config ZSWAP_COMPRESSOR_DEFAULT_ZSTD
+       bool "zstd"
+       select CRYPTO_ZSTD
+       help
+         Use the zstd algorithm as the default compression algorithm.
+endchoice
+
+config ZSWAP_COMPRESSOR_DEFAULT
+       string
+       depends on ZSWAP
+       default "deflate" if ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
+       default "lzo" if ZSWAP_COMPRESSOR_DEFAULT_LZO
+       default "842" if ZSWAP_COMPRESSOR_DEFAULT_842
+       default "lz4" if ZSWAP_COMPRESSOR_DEFAULT_LZ4
+       default "lz4hc" if ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
+       default "zstd" if ZSWAP_COMPRESSOR_DEFAULT_ZSTD
+       default ""
+
+choice
+       prompt "Compressed cache for swap pages default allocator"
+       depends on ZSWAP
+       default ZSWAP_ZPOOL_DEFAULT_ZBUD
+       help
+         Selects the default allocator for the compressed cache for
+         swap pages.
+         The default is 'zbud' for compatibility, however please do
+         read the description of each of the allocators below before
+         making a right choice.
+
+         The selection made here can be overridden by using the kernel
+         command line 'zswap.zpool=' option.
+
+config ZSWAP_ZPOOL_DEFAULT_ZBUD
+       bool "zbud"
+       select ZBUD
+       help
+         Use the zbud allocator as the default allocator.
+
+config ZSWAP_ZPOOL_DEFAULT_Z3FOLD
+       bool "z3fold"
+       select Z3FOLD
+       help
+         Use the z3fold allocator as the default allocator.
+
+config ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
+       bool "zsmalloc"
+       select ZSMALLOC
+       help
+         Use the zsmalloc allocator as the default allocator.
+endchoice
+
+config ZSWAP_ZPOOL_DEFAULT
+       string
+       depends on ZSWAP
+       default "zbud" if ZSWAP_ZPOOL_DEFAULT_ZBUD
+       default "z3fold" if ZSWAP_ZPOOL_DEFAULT_Z3FOLD
+       default "zsmalloc" if ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
+       default ""
+
+config ZSWAP_DEFAULT_ON
+       bool "Enable the compressed cache for swap pages by default"
+       depends on ZSWAP
+       help
+         If selected, the compressed cache for swap pages will be enabled
+         at boot, otherwise it will be disabled.
+
+         The selection made here can be overridden by using the kernel
+         command line 'zswap.enabled=' option.
+
+config ZPOOL
+       tristate "Common API for compressed memory storage"
+       depends on ZSWAP
+       help
+         Compressed memory storage API.  This allows using either zbud or
+         zsmalloc.
+
+config ZBUD
+       tristate "Low (Up to 2x) density storage for compressed pages"
+       depends on ZPOOL
+       help
+         A special purpose allocator for storing compressed pages.
+         It is designed to store up to two compressed pages per physical
+         page.  While this design limits storage density, it has simple and
+         deterministic reclaim properties that make it preferable to a higher
+         density approach when reclaim will be used.
+
+config Z3FOLD
+       tristate "Up to 3x density storage for compressed pages"
+       depends on ZPOOL
+       help
+         A special purpose allocator for storing compressed pages.
+         It is designed to store up to three compressed pages per physical
+         page. It is a ZBUD derivative so the simplicity and determinism are
+         still there.
+
+config ZSMALLOC
+       tristate "Memory allocator for compressed pages"
+       depends on MMU
+       help
+         zsmalloc is a slab-based memory allocator designed to store
+         compressed RAM pages.  zsmalloc uses virtual memory mapping
+         in order to reduce fragmentation.  However, this results in a
+         non-standard allocator interface where a handle, not a pointer, is
+         returned by an alloc().  This handle must be mapped in order to
+         access the allocated space.
+
+config ZSMALLOC_STAT
+       bool "Export zsmalloc statistics"
+       depends on ZSMALLOC
+       select DEBUG_FS
+       help
+         This option enables code in the zsmalloc to collect various
+         statistics about what's happening in zsmalloc and exports that
+         information to userspace via debugfs.
+         If unsure, say N.
+
+menu "SLAB allocator options"
+
 choice
        prompt "Choose SLAB allocator"
        default SLUB
@@ -90,6 +275,19 @@ config SLAB_FREELIST_HARDENED
          sanity-checking than others. This option is most effective with
          CONFIG_SLUB.
 
+config SLUB_CPU_PARTIAL
+       default y
+       depends on SLUB && SMP
+       bool "SLUB per cpu partial cache"
+       help
+         Per cpu partial caches accelerate objects allocation and freeing
+         that is local to a processor at the price of more indeterminism
+         in the latency of the free. On overflow these caches will be cleared
+         which requires the taking of locks that may cause latency spikes.
+         Typically one would choose no for a realtime system.
+
+endmenu # SLAB allocator options
+
 config SHUFFLE_PAGE_ALLOCATOR
        bool "Page allocator randomization"
        default SLAB_FREELIST_RANDOM && ACPI_NUMA
@@ -114,17 +312,6 @@ config SHUFFLE_PAGE_ALLOCATOR
 
          Say Y if unsure.
 
-config SLUB_CPU_PARTIAL
-       default y
-       depends on SLUB && SMP
-       bool "SLUB per cpu partial cache"
-       help
-         Per cpu partial caches accelerate objects allocation and freeing
-         that is local to a processor at the price of more indeterminism
-         in the latency of the free. On overflow these caches will be cleared
-         which requires the taking of locks that may cause latency spikes.
-         Typically one would choose no for a realtime system.
-
 config SELECT_MEMORY_MODEL
        def_bool y
        depends on ARCH_SELECT_MEMORY_MODEL
@@ -249,15 +436,20 @@ config HAVE_BOOTMEM_INFO_NODE
 config ARCH_ENABLE_MEMORY_HOTPLUG
        bool
 
+config ARCH_ENABLE_MEMORY_HOTREMOVE
+       bool
+
 # eventually, we can have this option just 'select SPARSEMEM'
-config MEMORY_HOTPLUG
-       bool "Allow for memory hot-add"
+menuconfig MEMORY_HOTPLUG
+       bool "Memory hotplug"
        select MEMORY_ISOLATION
        depends on SPARSEMEM
        depends on ARCH_ENABLE_MEMORY_HOTPLUG
        depends on 64BIT
        select NUMA_KEEP_MEMINFO if NUMA
 
+if MEMORY_HOTPLUG
+
 config MEMORY_HOTPLUG_DEFAULT_ONLINE
        bool "Online the newly added memory blocks by default"
        depends on MEMORY_HOTPLUG
@@ -273,9 +465,6 @@ config MEMORY_HOTPLUG_DEFAULT_ONLINE
          Say N here if you want the default policy to keep all hot-plugged
          memory blocks in 'offline' state.
 
-config ARCH_ENABLE_MEMORY_HOTREMOVE
-       bool
-
 config MEMORY_HOTREMOVE
        bool "Allow for memory hot remove"
        select HAVE_BOOTMEM_INFO_NODE if (X86_64 || PPC64)
@@ -287,6 +476,8 @@ config MHP_MEMMAP_ON_MEMORY
        depends on MEMORY_HOTPLUG && SPARSEMEM_VMEMMAP
        depends on ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
 
+endif # MEMORY_HOTPLUG
+
 # Heavily threaded applications may benefit from splitting the mm-wide
 # page_table_lock, so that faults on different parts of the user address
 # space can be handled with less contention: split it at this NR_CPUS.
@@ -501,7 +692,13 @@ config NOMMU_INITIAL_TRIM_EXCESS
 
          See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
 
-config TRANSPARENT_HUGEPAGE
+config ARCH_WANT_GENERAL_HUGETLB
+       bool
+
+config ARCH_WANTS_THP_SWAP
+       def_bool n
+
+menuconfig TRANSPARENT_HUGEPAGE
        bool "Transparent Hugepage Support"
        depends on HAVE_ARCH_TRANSPARENT_HUGEPAGE && !PREEMPT_RT
        select COMPACTION
@@ -516,6 +713,8 @@ config TRANSPARENT_HUGEPAGE
 
          If memory constrained on embedded, you may want to say N.
 
+if TRANSPARENT_HUGEPAGE
+
 choice
        prompt "Transparent Hugepage Support sysfs defaults"
        depends on TRANSPARENT_HUGEPAGE
@@ -540,12 +739,6 @@ choice
          benefit.
 endchoice
 
-config ARCH_WANT_GENERAL_HUGETLB
-       bool
-
-config ARCH_WANTS_THP_SWAP
-       def_bool n
-
 config THP_SWAP
        def_bool y
        depends on TRANSPARENT_HUGEPAGE && ARCH_WANTS_THP_SWAP && SWAP
@@ -556,6 +749,19 @@ config THP_SWAP
 
          For selection by architectures with reasonable THP sizes.
 
+config READ_ONLY_THP_FOR_FS
+       bool "Read-only THP for filesystems (EXPERIMENTAL)"
+       depends on TRANSPARENT_HUGEPAGE && SHMEM
+
+       help
+         Allow khugepaged to put read-only file-backed pages in THP.
+
+         This is marked experimental because it is a new feature. Write
+         support of file THPs will be developed in the next few release
+         cycles.
+
+endif # TRANSPARENT_HUGEPAGE
+
 #
 # UP and nommu archs use km based percpu allocator
 #
@@ -640,188 +846,6 @@ config MEM_SOFT_DIRTY
 
          See Documentation/admin-guide/mm/soft-dirty.rst for more details.
 
-config ZSWAP
-       bool "Compressed cache for swap pages (EXPERIMENTAL)"
-       depends on SWAP && CRYPTO=y
-       select FRONTSWAP
-       select ZPOOL
-       help
-         A lightweight compressed cache for swap pages.  It takes
-         pages that are in the process of being swapped out and attempts to
-         compress them into a dynamically allocated RAM-based memory pool.
-         This can result in a significant I/O reduction on swap device and,
-         in the case where decompressing from RAM is faster that swap device
-         reads, can also improve workload performance.
-
-         This is marked experimental because it is a new feature (as of
-         v3.11) that interacts heavily with memory reclaim.  While these
-         interactions don't cause any known issues on simple memory setups,
-         they have not be fully explored on the large set of potential
-         configurations and workloads that exist.
-
-choice
-       prompt "Compressed cache for swap pages default compressor"
-       depends on ZSWAP
-       default ZSWAP_COMPRESSOR_DEFAULT_LZO
-       help
-         Selects the default compression algorithm for the compressed cache
-         for swap pages.
-
-         For an overview what kind of performance can be expected from
-         a particular compression algorithm please refer to the benchmarks
-         available at the following LWN page:
-         https://lwn.net/Articles/751795/
-
-         If in doubt, select 'LZO'.
-
-         The selection made here can be overridden by using the kernel
-         command line 'zswap.compressor=' option.
-
-config ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
-       bool "Deflate"
-       select CRYPTO_DEFLATE
-       help
-         Use the Deflate algorithm as the default compression algorithm.
-
-config ZSWAP_COMPRESSOR_DEFAULT_LZO
-       bool "LZO"
-       select CRYPTO_LZO
-       help
-         Use the LZO algorithm as the default compression algorithm.
-
-config ZSWAP_COMPRESSOR_DEFAULT_842
-       bool "842"
-       select CRYPTO_842
-       help
-         Use the 842 algorithm as the default compression algorithm.
-
-config ZSWAP_COMPRESSOR_DEFAULT_LZ4
-       bool "LZ4"
-       select CRYPTO_LZ4
-       help
-         Use the LZ4 algorithm as the default compression algorithm.
-
-config ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
-       bool "LZ4HC"
-       select CRYPTO_LZ4HC
-       help
-         Use the LZ4HC algorithm as the default compression algorithm.
-
-config ZSWAP_COMPRESSOR_DEFAULT_ZSTD
-       bool "zstd"
-       select CRYPTO_ZSTD
-       help
-         Use the zstd algorithm as the default compression algorithm.
-endchoice
-
-config ZSWAP_COMPRESSOR_DEFAULT
-       string
-       depends on ZSWAP
-       default "deflate" if ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
-       default "lzo" if ZSWAP_COMPRESSOR_DEFAULT_LZO
-       default "842" if ZSWAP_COMPRESSOR_DEFAULT_842
-       default "lz4" if ZSWAP_COMPRESSOR_DEFAULT_LZ4
-       default "lz4hc" if ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
-       default "zstd" if ZSWAP_COMPRESSOR_DEFAULT_ZSTD
-       default ""
-
-choice
-       prompt "Compressed cache for swap pages default allocator"
-       depends on ZSWAP
-       default ZSWAP_ZPOOL_DEFAULT_ZBUD
-       help
-         Selects the default allocator for the compressed cache for
-         swap pages.
-         The default is 'zbud' for compatibility, however please do
-         read the description of each of the allocators below before
-         making a right choice.
-
-         The selection made here can be overridden by using the kernel
-         command line 'zswap.zpool=' option.
-
-config ZSWAP_ZPOOL_DEFAULT_ZBUD
-       bool "zbud"
-       select ZBUD
-       help
-         Use the zbud allocator as the default allocator.
-
-config ZSWAP_ZPOOL_DEFAULT_Z3FOLD
-       bool "z3fold"
-       select Z3FOLD
-       help
-         Use the z3fold allocator as the default allocator.
-
-config ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
-       bool "zsmalloc"
-       select ZSMALLOC
-       help
-         Use the zsmalloc allocator as the default allocator.
-endchoice
-
-config ZSWAP_ZPOOL_DEFAULT
-       string
-       depends on ZSWAP
-       default "zbud" if ZSWAP_ZPOOL_DEFAULT_ZBUD
-       default "z3fold" if ZSWAP_ZPOOL_DEFAULT_Z3FOLD
-       default "zsmalloc" if ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
-       default ""
-
-config ZSWAP_DEFAULT_ON
-       bool "Enable the compressed cache for swap pages by default"
-       depends on ZSWAP
-       help
-         If selected, the compressed cache for swap pages will be enabled
-         at boot, otherwise it will be disabled.
-
-         The selection made here can be overridden by using the kernel
-         command line 'zswap.enabled=' option.
-
-config ZPOOL
-       tristate "Common API for compressed memory storage"
-       help
-         Compressed memory storage API.  This allows using either zbud or
-         zsmalloc.
-
-config ZBUD
-       tristate "Low (Up to 2x) density storage for compressed pages"
-       depends on ZPOOL
-       help
-         A special purpose allocator for storing compressed pages.
-         It is designed to store up to two compressed pages per physical
-         page.  While this design limits storage density, it has simple and
-         deterministic reclaim properties that make it preferable to a higher
-         density approach when reclaim will be used.
-
-config Z3FOLD
-       tristate "Up to 3x density storage for compressed pages"
-       depends on ZPOOL
-       help
-         A special purpose allocator for storing compressed pages.
-         It is designed to store up to three compressed pages per physical
-         page. It is a ZBUD derivative so the simplicity and determinism are
-         still there.
-
-config ZSMALLOC
-       tristate "Memory allocator for compressed pages"
-       depends on MMU
-       help
-         zsmalloc is a slab-based memory allocator designed to store
-         compressed RAM pages.  zsmalloc uses virtual memory mapping
-         in order to reduce fragmentation.  However, this results in a
-         non-standard allocator interface where a handle, not a pointer, is
-         returned by an alloc().  This handle must be mapped in order to
-         access the allocated space.
-
-config ZSMALLOC_STAT
-       bool "Export zsmalloc statistics"
-       depends on ZSMALLOC
-       select DEBUG_FS
-       help
-         This option enables code in the zsmalloc to collect various
-         statistics about what's happening in zsmalloc and exports that
-         information to userspace via debugfs.
-         If unsure, say N.
-
 config GENERIC_EARLY_IOREMAP
        bool
 
@@ -978,17 +1002,6 @@ comment "GUP_TEST needs to have DEBUG_FS enabled"
 config GUP_GET_PTE_LOW_HIGH
        bool
 
-config READ_ONLY_THP_FOR_FS
-       bool "Read-only THP for filesystems (EXPERIMENTAL)"
-       depends on TRANSPARENT_HUGEPAGE && SHMEM
-
-       help
-         Allow khugepaged to put read-only file-backed pages in THP.
-
-         This is marked experimental because it is a new feature. Write
-         support of file THPs will be developed in the next few release
-         cycles.
-
 config ARCH_HAS_PTE_SPECIAL
        bool