]> exis.tech > repos - linux.git/commitdiff
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 675a6be43739480e0c522a4985473a21aee865a7..f63d8dc36511865d363f55c1a19874c521ea079a 100644 (file)
@@ -9,7 +9,7 @@ menu "Memory Management options"
 config ARCH_NO_SWAP
        bool
 
 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
        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.
 
          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
 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.
 
          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
 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.
 
 
          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
 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_HOTPLUG
        bool
 
+config ARCH_ENABLE_MEMORY_HOTREMOVE
+       bool
+
 # eventually, we can have this option just 'select SPARSEMEM'
 # 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
 
        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
 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.
 
          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)
 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
 
        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.
 # 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.
 
 
          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
        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 memory constrained on embedded, you may want to say N.
 
+if TRANSPARENT_HUGEPAGE
+
 choice
        prompt "Transparent Hugepage Support sysfs defaults"
        depends on TRANSPARENT_HUGEPAGE
 choice
        prompt "Transparent Hugepage Support sysfs defaults"
        depends on TRANSPARENT_HUGEPAGE
@@ -540,12 +739,6 @@ choice
          benefit.
 endchoice
 
          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
 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.
 
 
          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
 #
 #
 # 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.
 
 
          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
 
 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 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
 
 config ARCH_HAS_PTE_SPECIAL
        bool