xref: /kernel/linux/linux-6.6/mm/Kconfig (revision 62306a36)
1# SPDX-License-Identifier: GPL-2.0-only
2
3menu "Memory Management options"
4
5#
6# For some reason microblaze and nios2 hard code SWAP=n.  Hopefully we can
7# add proper SWAP support to them, in which case this can be remove.
8#
9config ARCH_NO_SWAP
10	bool
11
12config ZPOOL
13	bool
14
15menuconfig SWAP
16	bool "Support for paging of anonymous memory (swap)"
17	depends on MMU && BLOCK && !ARCH_NO_SWAP
18	default y
19	help
20	  This option allows you to choose whether you want to have support
21	  for so called swap devices or swap files in your kernel that are
22	  used to provide more virtual memory than the actual RAM present
23	  in your computer.  If unsure say Y.
24
25config ZSWAP
26	bool "Compressed cache for swap pages"
27	depends on SWAP
28	select CRYPTO
29	select ZPOOL
30	help
31	  A lightweight compressed cache for swap pages.  It takes
32	  pages that are in the process of being swapped out and attempts to
33	  compress them into a dynamically allocated RAM-based memory pool.
34	  This can result in a significant I/O reduction on swap device and,
35	  in the case where decompressing from RAM is faster than swap device
36	  reads, can also improve workload performance.
37
38config CMA_REUSE
39	bool "CMA reuse feature"
40	depends on CMA
41	help
42	  If enabled, it will add MIGRATE_CMA to pcp lists and movable
43	  allocations with __GFP_CMA flag will use cma areas prior to
44	  movable areas.
45
46	  It improves the utilization ratio of cma areas.
47
48config ZSWAP_DEFAULT_ON
49	bool "Enable the compressed cache for swap pages by default"
50	depends on ZSWAP
51	help
52	  If selected, the compressed cache for swap pages will be enabled
53	  at boot, otherwise it will be disabled.
54
55	  The selection made here can be overridden by using the kernel
56	  command line 'zswap.enabled=' option.
57
58config ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON
59	bool "Invalidate zswap entries when pages are loaded"
60	depends on ZSWAP
61	help
62	  If selected, exclusive loads for zswap will be enabled at boot,
63	  otherwise it will be disabled.
64
65	  If exclusive loads are enabled, when a page is loaded from zswap,
66	  the zswap entry is invalidated at once, as opposed to leaving it
67	  in zswap until the swap entry is freed.
68
69	  This avoids having two copies of the same page in memory
70	  (compressed and uncompressed) after faulting in a page from zswap.
71	  The cost is that if the page was never dirtied and needs to be
72	  swapped out again, it will be re-compressed.
73
74choice
75	prompt "Default compressor"
76	depends on ZSWAP
77	default ZSWAP_COMPRESSOR_DEFAULT_LZO
78	help
79	  Selects the default compression algorithm for the compressed cache
80	  for swap pages.
81
82	  For an overview what kind of performance can be expected from
83	  a particular compression algorithm please refer to the benchmarks
84	  available at the following LWN page:
85	  https://lwn.net/Articles/751795/
86
87	  If in doubt, select 'LZO'.
88
89	  The selection made here can be overridden by using the kernel
90	  command line 'zswap.compressor=' option.
91
92config ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
93	bool "Deflate"
94	select CRYPTO_DEFLATE
95	help
96	  Use the Deflate algorithm as the default compression algorithm.
97
98config ZSWAP_COMPRESSOR_DEFAULT_LZO
99	bool "LZO"
100	select CRYPTO_LZO
101	help
102	  Use the LZO algorithm as the default compression algorithm.
103
104config ZSWAP_COMPRESSOR_DEFAULT_842
105	bool "842"
106	select CRYPTO_842
107	help
108	  Use the 842 algorithm as the default compression algorithm.
109
110config ZSWAP_COMPRESSOR_DEFAULT_LZ4
111	bool "LZ4"
112	select CRYPTO_LZ4
113	help
114	  Use the LZ4 algorithm as the default compression algorithm.
115
116config ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
117	bool "LZ4HC"
118	select CRYPTO_LZ4HC
119	help
120	  Use the LZ4HC algorithm as the default compression algorithm.
121
122config ZSWAP_COMPRESSOR_DEFAULT_ZSTD
123	bool "zstd"
124	select CRYPTO_ZSTD
125	help
126	  Use the zstd algorithm as the default compression algorithm.
127endchoice
128
129config ZSWAP_COMPRESSOR_DEFAULT
130       string
131       depends on ZSWAP
132       default "deflate" if ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
133       default "lzo" if ZSWAP_COMPRESSOR_DEFAULT_LZO
134       default "842" if ZSWAP_COMPRESSOR_DEFAULT_842
135       default "lz4" if ZSWAP_COMPRESSOR_DEFAULT_LZ4
136       default "lz4hc" if ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
137       default "zstd" if ZSWAP_COMPRESSOR_DEFAULT_ZSTD
138       default ""
139
140choice
141	prompt "Default allocator"
142	depends on ZSWAP
143	default ZSWAP_ZPOOL_DEFAULT_ZBUD
144	help
145	  Selects the default allocator for the compressed cache for
146	  swap pages.
147	  The default is 'zbud' for compatibility, however please do
148	  read the description of each of the allocators below before
149	  making a right choice.
150
151	  The selection made here can be overridden by using the kernel
152	  command line 'zswap.zpool=' option.
153
154config ZSWAP_ZPOOL_DEFAULT_ZBUD
155	bool "zbud"
156	select ZBUD
157	help
158	  Use the zbud allocator as the default allocator.
159
160config ZSWAP_ZPOOL_DEFAULT_Z3FOLD
161	bool "z3fold"
162	select Z3FOLD
163	help
164	  Use the z3fold allocator as the default allocator.
165
166config ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
167	bool "zsmalloc"
168	select ZSMALLOC
169	help
170	  Use the zsmalloc allocator as the default allocator.
171endchoice
172
173config ZSWAP_ZPOOL_DEFAULT
174       string
175       depends on ZSWAP
176       default "zbud" if ZSWAP_ZPOOL_DEFAULT_ZBUD
177       default "z3fold" if ZSWAP_ZPOOL_DEFAULT_Z3FOLD
178       default "zsmalloc" if ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
179       default ""
180
181config ZBUD
182	tristate "2:1 compression allocator (zbud)"
183	depends on ZSWAP
184	help
185	  A special purpose allocator for storing compressed pages.
186	  It is designed to store up to two compressed pages per physical
187	  page.  While this design limits storage density, it has simple and
188	  deterministic reclaim properties that make it preferable to a higher
189	  density approach when reclaim will be used.
190
191config Z3FOLD
192	tristate "3:1 compression allocator (z3fold)"
193	depends on ZSWAP
194	help
195	  A special purpose allocator for storing compressed pages.
196	  It is designed to store up to three compressed pages per physical
197	  page. It is a ZBUD derivative so the simplicity and determinism are
198	  still there.
199
200config ZSMALLOC
201	tristate
202	prompt "N:1 compression allocator (zsmalloc)" if ZSWAP
203	depends on MMU
204	help
205	  zsmalloc is a slab-based memory allocator designed to store
206	  pages of various compression levels efficiently. It achieves
207	  the highest storage density with the least amount of fragmentation.
208
209config ZSMALLOC_STAT
210	bool "Export zsmalloc statistics"
211	depends on ZSMALLOC
212	select DEBUG_FS
213	help
214	  This option enables code in the zsmalloc to collect various
215	  statistics about what's happening in zsmalloc and exports that
216	  information to userspace via debugfs.
217	  If unsure, say N.
218
219config ZSMALLOC_CHAIN_SIZE
220	int "Maximum number of physical pages per-zspage"
221	default 8
222	range 4 16
223	depends on ZSMALLOC
224	help
225	  This option sets the upper limit on the number of physical pages
226	  that a zmalloc page (zspage) can consist of. The optimal zspage
227	  chain size is calculated for each size class during the
228	  initialization of the pool.
229
230	  Changing this option can alter the characteristics of size classes,
231	  such as the number of pages per zspage and the number of objects
232	  per zspage. This can also result in different configurations of
233	  the pool, as zsmalloc merges size classes with similar
234	  characteristics.
235
236	  For more information, see zsmalloc documentation.
237
238menu "SLAB allocator options"
239
240choice
241	prompt "Choose SLAB allocator"
242	default SLUB
243	help
244	   This option allows to select a slab allocator.
245
246config SLAB_DEPRECATED
247	bool "SLAB (DEPRECATED)"
248	depends on !PREEMPT_RT
249	help
250	  Deprecated and scheduled for removal in a few cycles. Replaced by
251	  SLUB.
252
253	  If you cannot migrate to SLUB, please contact linux-mm@kvack.org
254	  and the people listed in the SLAB ALLOCATOR section of MAINTAINERS
255	  file, explaining why.
256
257	  The regular slab allocator that is established and known to work
258	  well in all environments. It organizes cache hot objects in
259	  per cpu and per node queues.
260
261config SLUB
262	bool "SLUB (Unqueued Allocator)"
263	help
264	   SLUB is a slab allocator that minimizes cache line usage
265	   instead of managing queues of cached objects (SLAB approach).
266	   Per cpu caching is realized using slabs of objects instead
267	   of queues of objects. SLUB can use memory efficiently
268	   and has enhanced diagnostics. SLUB is the default choice for
269	   a slab allocator.
270
271endchoice
272
273config SLAB
274	bool
275	default y
276	depends on SLAB_DEPRECATED
277
278config SLUB_TINY
279	bool "Configure SLUB for minimal memory footprint"
280	depends on SLUB && EXPERT
281	select SLAB_MERGE_DEFAULT
282	help
283	   Configures the SLUB allocator in a way to achieve minimal memory
284	   footprint, sacrificing scalability, debugging and other features.
285	   This is intended only for the smallest system that had used the
286	   SLOB allocator and is not recommended for systems with more than
287	   16MB RAM.
288
289	   If unsure, say N.
290
291config SLAB_MERGE_DEFAULT
292	bool "Allow slab caches to be merged"
293	default y
294	depends on SLAB || SLUB
295	help
296	  For reduced kernel memory fragmentation, slab caches can be
297	  merged when they share the same size and other characteristics.
298	  This carries a risk of kernel heap overflows being able to
299	  overwrite objects from merged caches (and more easily control
300	  cache layout), which makes such heap attacks easier to exploit
301	  by attackers. By keeping caches unmerged, these kinds of exploits
302	  can usually only damage objects in the same cache. To disable
303	  merging at runtime, "slab_nomerge" can be passed on the kernel
304	  command line.
305
306config SLAB_FREELIST_RANDOM
307	bool "Randomize slab freelist"
308	depends on SLAB || (SLUB && !SLUB_TINY)
309	help
310	  Randomizes the freelist order used on creating new pages. This
311	  security feature reduces the predictability of the kernel slab
312	  allocator against heap overflows.
313
314config SLAB_FREELIST_HARDENED
315	bool "Harden slab freelist metadata"
316	depends on SLAB || (SLUB && !SLUB_TINY)
317	help
318	  Many kernel heap attacks try to target slab cache metadata and
319	  other infrastructure. This options makes minor performance
320	  sacrifices to harden the kernel slab allocator against common
321	  freelist exploit methods. Some slab implementations have more
322	  sanity-checking than others. This option is most effective with
323	  CONFIG_SLUB.
324
325config SLUB_STATS
326	default n
327	bool "Enable SLUB performance statistics"
328	depends on SLUB && SYSFS && !SLUB_TINY
329	help
330	  SLUB statistics are useful to debug SLUBs allocation behavior in
331	  order find ways to optimize the allocator. This should never be
332	  enabled for production use since keeping statistics slows down
333	  the allocator by a few percentage points. The slabinfo command
334	  supports the determination of the most active slabs to figure
335	  out which slabs are relevant to a particular load.
336	  Try running: slabinfo -DA
337
338config SLUB_CPU_PARTIAL
339	default y
340	depends on SLUB && SMP && !SLUB_TINY
341	bool "SLUB per cpu partial cache"
342	help
343	  Per cpu partial caches accelerate objects allocation and freeing
344	  that is local to a processor at the price of more indeterminism
345	  in the latency of the free. On overflow these caches will be cleared
346	  which requires the taking of locks that may cause latency spikes.
347	  Typically one would choose no for a realtime system.
348
349config RANDOM_KMALLOC_CACHES
350	default n
351	depends on SLUB && !SLUB_TINY
352	bool "Randomize slab caches for normal kmalloc"
353	help
354	  A hardening feature that creates multiple copies of slab caches for
355	  normal kmalloc allocation and makes kmalloc randomly pick one based
356	  on code address, which makes the attackers more difficult to spray
357	  vulnerable memory objects on the heap for the purpose of exploiting
358	  memory vulnerabilities.
359
360	  Currently the number of copies is set to 16, a reasonably large value
361	  that effectively diverges the memory objects allocated for different
362	  subsystems or modules into different caches, at the expense of a
363	  limited degree of memory and CPU overhead that relates to hardware and
364	  system workload.
365
366endmenu # SLAB allocator options
367
368config SHUFFLE_PAGE_ALLOCATOR
369	bool "Page allocator randomization"
370	default SLAB_FREELIST_RANDOM && ACPI_NUMA
371	help
372	  Randomization of the page allocator improves the average
373	  utilization of a direct-mapped memory-side-cache. See section
374	  5.2.27 Heterogeneous Memory Attribute Table (HMAT) in the ACPI
375	  6.2a specification for an example of how a platform advertises
376	  the presence of a memory-side-cache. There are also incidental
377	  security benefits as it reduces the predictability of page
378	  allocations to compliment SLAB_FREELIST_RANDOM, but the
379	  default granularity of shuffling on the MAX_ORDER i.e, 10th
380	  order of pages is selected based on cache utilization benefits
381	  on x86.
382
383	  While the randomization improves cache utilization it may
384	  negatively impact workloads on platforms without a cache. For
385	  this reason, by default, the randomization is enabled only
386	  after runtime detection of a direct-mapped memory-side-cache.
387	  Otherwise, the randomization may be force enabled with the
388	  'page_alloc.shuffle' kernel command line parameter.
389
390	  Say Y if unsure.
391
392config COMPAT_BRK
393	bool "Disable heap randomization"
394	default y
395	help
396	  Randomizing heap placement makes heap exploits harder, but it
397	  also breaks ancient binaries (including anything libc5 based).
398	  This option changes the bootup default to heap randomization
399	  disabled, and can be overridden at runtime by setting
400	  /proc/sys/kernel/randomize_va_space to 2.
401
402	  On non-ancient distros (post-2000 ones) N is usually a safe choice.
403
404config MMAP_ALLOW_UNINITIALIZED
405	bool "Allow mmapped anonymous memory to be uninitialized"
406	depends on EXPERT && !MMU
407	default n
408	help
409	  Normally, and according to the Linux spec, anonymous memory obtained
410	  from mmap() has its contents cleared before it is passed to
411	  userspace.  Enabling this config option allows you to request that
412	  mmap() skip that if it is given an MAP_UNINITIALIZED flag, thus
413	  providing a huge performance boost.  If this option is not enabled,
414	  then the flag will be ignored.
415
416	  This is taken advantage of by uClibc's malloc(), and also by
417	  ELF-FDPIC binfmt's brk and stack allocator.
418
419	  Because of the obvious security issues, this option should only be
420	  enabled on embedded devices where you control what is run in
421	  userspace.  Since that isn't generally a problem on no-MMU systems,
422	  it is normally safe to say Y here.
423
424	  See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
425
426config SELECT_MEMORY_MODEL
427	def_bool y
428	depends on ARCH_SELECT_MEMORY_MODEL
429
430choice
431	prompt "Memory model"
432	depends on SELECT_MEMORY_MODEL
433	default SPARSEMEM_MANUAL if ARCH_SPARSEMEM_DEFAULT
434	default FLATMEM_MANUAL
435	help
436	  This option allows you to change some of the ways that
437	  Linux manages its memory internally. Most users will
438	  only have one option here selected by the architecture
439	  configuration. This is normal.
440
441config FLATMEM_MANUAL
442	bool "Flat Memory"
443	depends on !ARCH_SPARSEMEM_ENABLE || ARCH_FLATMEM_ENABLE
444	help
445	  This option is best suited for non-NUMA systems with
446	  flat address space. The FLATMEM is the most efficient
447	  system in terms of performance and resource consumption
448	  and it is the best option for smaller systems.
449
450	  For systems that have holes in their physical address
451	  spaces and for features like NUMA and memory hotplug,
452	  choose "Sparse Memory".
453
454	  If unsure, choose this option (Flat Memory) over any other.
455
456config SPARSEMEM_MANUAL
457	bool "Sparse Memory"
458	depends on ARCH_SPARSEMEM_ENABLE
459	help
460	  This will be the only option for some systems, including
461	  memory hot-plug systems.  This is normal.
462
463	  This option provides efficient support for systems with
464	  holes is their physical address space and allows memory
465	  hot-plug and hot-remove.
466
467	  If unsure, choose "Flat Memory" over this option.
468
469endchoice
470
471config MEMORY_MONITOR
472	bool "ENABLE MEMORY_MONITOR"
473	depends on PROC_FS
474	default n
475	help
476		MEMORY_MONITOR is a monitor of some memory reclaim method.
477		Now, kswapd wake up monitor use it.
478
479config HYPERHOLD_FILE_LRU
480	bool "Enable HyperHold FILE LRU"
481	depends on HYPERHOLD && MEMCG
482	select HYPERHOLD_MEMCG
483	default n
484	help
485	  File-LRU is a mechanism that put file page in global lru list,
486	  and anon page in memcg lru list(if MEMCG is enable), what's
487	  more, recliam of anonymous pages and file page are separated.
488
489config HYPERHOLD_MEMCG
490	bool "Enable Memcg Management in HyperHold"
491	depends on HYPERHOLD && MEMCG
492	help
493	  Add more attributes in memory cgroup, these attribute is used
494	  to show information, shrink memory, swapin page and so on.
495
496config HYPERHOLD_ZSWAPD
497	bool "Enable zswapd thread to reclaim anon pages in background"
498	depends on HYPERHOLD && ZRAM
499	default n
500	help
501	  zswapd is a kernel thread that reclaim anonymous pages in the
502	  background. When the use of swap pages reaches the watermark
503	  and the refault of anonymous pages is high, the content of
504	  zram will exchanged to eswap by a certain percentage.
505
506config SPARSEMEM
507	def_bool y
508	depends on (!SELECT_MEMORY_MODEL && ARCH_SPARSEMEM_ENABLE) || SPARSEMEM_MANUAL
509
510config FLATMEM
511	def_bool y
512	depends on !SPARSEMEM || FLATMEM_MANUAL
513
514#
515# SPARSEMEM_EXTREME (which is the default) does some bootmem
516# allocations when sparse_init() is called.  If this cannot
517# be done on your architecture, select this option.  However,
518# statically allocating the mem_section[] array can potentially
519# consume vast quantities of .bss, so be careful.
520#
521# This option will also potentially produce smaller runtime code
522# with gcc 3.4 and later.
523#
524config SPARSEMEM_STATIC
525	bool
526
527#
528# Architecture platforms which require a two level mem_section in SPARSEMEM
529# must select this option. This is usually for architecture platforms with
530# an extremely sparse physical address space.
531#
532config SPARSEMEM_EXTREME
533	def_bool y
534	depends on SPARSEMEM && !SPARSEMEM_STATIC
535
536config SPARSEMEM_VMEMMAP_ENABLE
537	bool
538
539config SPARSEMEM_VMEMMAP
540	bool "Sparse Memory virtual memmap"
541	depends on SPARSEMEM && SPARSEMEM_VMEMMAP_ENABLE
542	default y
543	help
544	  SPARSEMEM_VMEMMAP uses a virtually mapped memmap to optimise
545	  pfn_to_page and page_to_pfn operations.  This is the most
546	  efficient option when sufficient kernel resources are available.
547#
548# Select this config option from the architecture Kconfig, if it is preferred
549# to enable the feature of HugeTLB/dev_dax vmemmap optimization.
550#
551config ARCH_WANT_OPTIMIZE_DAX_VMEMMAP
552	bool
553
554config ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP
555	bool
556
557config HAVE_MEMBLOCK_PHYS_MAP
558	bool
559
560config HAVE_FAST_GUP
561	depends on MMU
562	bool
563
564# Don't discard allocated memory used to track "memory" and "reserved" memblocks
565# after early boot, so it can still be used to test for validity of memory.
566# Also, memblocks are updated with memory hot(un)plug.
567config ARCH_KEEP_MEMBLOCK
568	bool
569
570# Keep arch NUMA mapping infrastructure post-init.
571config NUMA_KEEP_MEMINFO
572	bool
573
574config MEMORY_ISOLATION
575	bool
576
577# IORESOURCE_SYSTEM_RAM regions in the kernel resource tree that are marked
578# IORESOURCE_EXCLUSIVE cannot be mapped to user space, for example, via
579# /dev/mem.
580config EXCLUSIVE_SYSTEM_RAM
581	def_bool y
582	depends on !DEVMEM || STRICT_DEVMEM
583
584#
585# Only be set on architectures that have completely implemented memory hotplug
586# feature. If you are not sure, don't touch it.
587#
588config HAVE_BOOTMEM_INFO_NODE
589	def_bool n
590
591config ARCH_ENABLE_MEMORY_HOTPLUG
592	bool
593
594config ARCH_ENABLE_MEMORY_HOTREMOVE
595	bool
596
597# eventually, we can have this option just 'select SPARSEMEM'
598menuconfig MEMORY_HOTPLUG
599	bool "Memory hotplug"
600	select MEMORY_ISOLATION
601	depends on SPARSEMEM
602	depends on ARCH_ENABLE_MEMORY_HOTPLUG
603	depends on 64BIT
604	select NUMA_KEEP_MEMINFO if NUMA
605
606if MEMORY_HOTPLUG
607
608config MEMORY_HOTPLUG_DEFAULT_ONLINE
609	bool "Online the newly added memory blocks by default"
610	depends on MEMORY_HOTPLUG
611	help
612	  This option sets the default policy setting for memory hotplug
613	  onlining policy (/sys/devices/system/memory/auto_online_blocks) which
614	  determines what happens to newly added memory regions. Policy setting
615	  can always be changed at runtime.
616	  See Documentation/admin-guide/mm/memory-hotplug.rst for more information.
617
618	  Say Y here if you want all hot-plugged memory blocks to appear in
619	  'online' state by default.
620	  Say N here if you want the default policy to keep all hot-plugged
621	  memory blocks in 'offline' state.
622
623config MEMORY_HOTREMOVE
624	bool "Allow for memory hot remove"
625	select HAVE_BOOTMEM_INFO_NODE if (X86_64 || PPC64)
626	depends on MEMORY_HOTPLUG && ARCH_ENABLE_MEMORY_HOTREMOVE
627	depends on MIGRATION
628
629config MHP_MEMMAP_ON_MEMORY
630	def_bool y
631	depends on MEMORY_HOTPLUG && SPARSEMEM_VMEMMAP
632	depends on ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
633
634endif # MEMORY_HOTPLUG
635
636config ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
637       bool
638
639# Heavily threaded applications may benefit from splitting the mm-wide
640# page_table_lock, so that faults on different parts of the user address
641# space can be handled with less contention: split it at this NR_CPUS.
642# Default to 4 for wider testing, though 8 might be more appropriate.
643# ARM's adjust_pte (unused if VIPT) depends on mm-wide page_table_lock.
644# PA-RISC 7xxx's spinlock_t would enlarge struct page from 32 to 44 bytes.
645# SPARC32 allocates multiple pte tables within a single page, and therefore
646# a per-page lock leads to problems when multiple tables need to be locked
647# at the same time (e.g. copy_page_range()).
648# DEBUG_SPINLOCK and DEBUG_LOCK_ALLOC spinlock_t also enlarge struct page.
649#
650config SPLIT_PTLOCK_CPUS
651	int
652	default "999999" if !MMU
653	default "999999" if ARM && !CPU_CACHE_VIPT
654	default "999999" if PARISC && !PA20
655	default "999999" if SPARC32
656	default "4"
657
658config ARCH_ENABLE_SPLIT_PMD_PTLOCK
659	bool
660
661#
662# support for memory balloon
663config MEMORY_BALLOON
664	bool
665
666#
667# support for memory balloon compaction
668config BALLOON_COMPACTION
669	bool "Allow for balloon memory compaction/migration"
670	def_bool y
671	depends on COMPACTION && MEMORY_BALLOON
672	help
673	  Memory fragmentation introduced by ballooning might reduce
674	  significantly the number of 2MB contiguous memory blocks that can be
675	  used within a guest, thus imposing performance penalties associated
676	  with the reduced number of transparent huge pages that could be used
677	  by the guest workload. Allowing the compaction & migration for memory
678	  pages enlisted as being part of memory balloon devices avoids the
679	  scenario aforementioned and helps improving memory defragmentation.
680
681#
682# support for memory compaction
683config COMPACTION
684	bool "Allow for memory compaction"
685	def_bool y
686	select MIGRATION
687	depends on MMU
688	help
689	  Compaction is the only memory management component to form
690	  high order (larger physically contiguous) memory blocks
691	  reliably. The page allocator relies on compaction heavily and
692	  the lack of the feature can lead to unexpected OOM killer
693	  invocations for high order memory requests. You shouldn't
694	  disable this option unless there really is a strong reason for
695	  it and then we would be really interested to hear about that at
696	  linux-mm@kvack.org.
697
698config COMPACT_UNEVICTABLE_DEFAULT
699	int
700	depends on COMPACTION
701	default 0 if PREEMPT_RT
702	default 1
703
704#
705# support for free page reporting
706config PAGE_REPORTING
707	bool "Free page reporting"
708	def_bool n
709	help
710	  Free page reporting allows for the incremental acquisition of
711	  free pages from the buddy allocator for the purpose of reporting
712	  those pages to another entity, such as a hypervisor, so that the
713	  memory can be freed within the host for other uses.
714
715#
716# support for page migration
717#
718config MIGRATION
719	bool "Page migration"
720	def_bool y
721	depends on (NUMA || ARCH_ENABLE_MEMORY_HOTREMOVE || COMPACTION || CMA) && MMU
722	help
723	  Allows the migration of the physical location of pages of processes
724	  while the virtual addresses are not changed. This is useful in
725	  two situations. The first is on NUMA systems to put pages nearer
726	  to the processors accessing. The second is when allocating huge
727	  pages as migration can relocate pages to satisfy a huge page
728	  allocation instead of reclaiming.
729
730config DEVICE_MIGRATION
731	def_bool MIGRATION && ZONE_DEVICE
732
733config ARCH_ENABLE_HUGEPAGE_MIGRATION
734	bool
735
736config ARCH_ENABLE_THP_MIGRATION
737	bool
738
739config HUGETLB_PAGE_SIZE_VARIABLE
740	def_bool n
741	help
742	  Allows the pageblock_order value to be dynamic instead of just standard
743	  HUGETLB_PAGE_ORDER when there are multiple HugeTLB page sizes available
744	  on a platform.
745
746	  Note that the pageblock_order cannot exceed MAX_ORDER and will be
747	  clamped down to MAX_ORDER.
748
749config CONTIG_ALLOC
750	def_bool (MEMORY_ISOLATION && COMPACTION) || CMA
751
752config PHYS_ADDR_T_64BIT
753	def_bool 64BIT
754
755config BOUNCE
756	bool "Enable bounce buffers"
757	default y
758	depends on BLOCK && MMU && HIGHMEM
759	help
760	  Enable bounce buffers for devices that cannot access the full range of
761	  memory available to the CPU. Enabled by default when HIGHMEM is
762	  selected, but you may say n to override this.
763
764config MMU_NOTIFIER
765	bool
766	select INTERVAL_TREE
767
768config KSM
769	bool "Enable KSM for page merging"
770	depends on MMU
771	select XXHASH
772	help
773	  Enable Kernel Samepage Merging: KSM periodically scans those areas
774	  of an application's address space that an app has advised may be
775	  mergeable.  When it finds pages of identical content, it replaces
776	  the many instances by a single page with that content, so
777	  saving memory until one or another app needs to modify the content.
778	  Recommended for use with KVM, or with other duplicative applications.
779	  See Documentation/mm/ksm.rst for more information: KSM is inactive
780	  until a program has madvised that an area is MADV_MERGEABLE, and
781	  root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set).
782
783config DEFAULT_MMAP_MIN_ADDR
784	int "Low address space to protect from user allocation"
785	depends on MMU
786	default 4096
787	help
788	  This is the portion of low virtual memory which should be protected
789	  from userspace allocation.  Keeping a user from writing to low pages
790	  can help reduce the impact of kernel NULL pointer bugs.
791
792	  For most ia64, ppc64 and x86 users with lots of address space
793	  a value of 65536 is reasonable and should cause no problems.
794	  On arm and other archs it should not be higher than 32768.
795	  Programs which use vm86 functionality or have some need to map
796	  this low address space will need CAP_SYS_RAWIO or disable this
797	  protection by setting the value to 0.
798
799	  This value can be changed after boot using the
800	  /proc/sys/vm/mmap_min_addr tunable.
801
802config ARCH_SUPPORTS_MEMORY_FAILURE
803	bool
804
805config MEMORY_FAILURE
806	depends on MMU
807	depends on ARCH_SUPPORTS_MEMORY_FAILURE
808	bool "Enable recovery from hardware memory errors"
809	select MEMORY_ISOLATION
810	select RAS
811	help
812	  Enables code to recover from some memory failures on systems
813	  with MCA recovery. This allows a system to continue running
814	  even when some of its memory has uncorrected errors. This requires
815	  special hardware support and typically ECC memory.
816
817config HWPOISON_INJECT
818	tristate "HWPoison pages injector"
819	depends on MEMORY_FAILURE && DEBUG_KERNEL && PROC_FS
820	select PROC_PAGE_MONITOR
821
822config NOMMU_INITIAL_TRIM_EXCESS
823	int "Turn on mmap() excess space trimming before booting"
824	depends on !MMU
825	default 1
826	help
827	  The NOMMU mmap() frequently needs to allocate large contiguous chunks
828	  of memory on which to store mappings, but it can only ask the system
829	  allocator for chunks in 2^N*PAGE_SIZE amounts - which is frequently
830	  more than it requires.  To deal with this, mmap() is able to trim off
831	  the excess and return it to the allocator.
832
833	  If trimming is enabled, the excess is trimmed off and returned to the
834	  system allocator, which can cause extra fragmentation, particularly
835	  if there are a lot of transient processes.
836
837	  If trimming is disabled, the excess is kept, but not used, which for
838	  long-term mappings means that the space is wasted.
839
840	  Trimming can be dynamically controlled through a sysctl option
841	  (/proc/sys/vm/nr_trim_pages) which specifies the minimum number of
842	  excess pages there must be before trimming should occur, or zero if
843	  no trimming is to occur.
844
845	  This option specifies the initial value of this option.  The default
846	  of 1 says that all excess pages should be trimmed.
847
848	  See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
849
850config ARCH_WANT_GENERAL_HUGETLB
851	bool
852
853config ARCH_WANTS_THP_SWAP
854	def_bool n
855
856menuconfig TRANSPARENT_HUGEPAGE
857	bool "Transparent Hugepage Support"
858	depends on HAVE_ARCH_TRANSPARENT_HUGEPAGE && !PREEMPT_RT
859	select COMPACTION
860	select XARRAY_MULTI
861	help
862	  Transparent Hugepages allows the kernel to use huge pages and
863	  huge tlb transparently to the applications whenever possible.
864	  This feature can improve computing performance to certain
865	  applications by speeding up page faults during memory
866	  allocation, by reducing the number of tlb misses and by speeding
867	  up the pagetable walking.
868
869	  If memory constrained on embedded, you may want to say N.
870
871if TRANSPARENT_HUGEPAGE
872
873choice
874	prompt "Transparent Hugepage Support sysfs defaults"
875	depends on TRANSPARENT_HUGEPAGE
876	default TRANSPARENT_HUGEPAGE_ALWAYS
877	help
878	  Selects the sysfs defaults for Transparent Hugepage Support.
879
880	config TRANSPARENT_HUGEPAGE_ALWAYS
881		bool "always"
882	help
883	  Enabling Transparent Hugepage always, can increase the
884	  memory footprint of applications without a guaranteed
885	  benefit but it will work automatically for all applications.
886
887	config TRANSPARENT_HUGEPAGE_MADVISE
888		bool "madvise"
889	help
890	  Enabling Transparent Hugepage madvise, will only provide a
891	  performance improvement benefit to the applications using
892	  madvise(MADV_HUGEPAGE) but it won't risk to increase the
893	  memory footprint of applications without a guaranteed
894	  benefit.
895endchoice
896
897config THP_SWAP
898	def_bool y
899	depends on TRANSPARENT_HUGEPAGE && ARCH_WANTS_THP_SWAP && SWAP && 64BIT
900	help
901	  Swap transparent huge pages in one piece, without splitting.
902	  XXX: For now, swap cluster backing transparent huge page
903	  will be split after swapout.
904
905	  For selection by architectures with reasonable THP sizes.
906
907config READ_ONLY_THP_FOR_FS
908	bool "Read-only THP for filesystems (EXPERIMENTAL)"
909	depends on TRANSPARENT_HUGEPAGE && SHMEM
910
911	help
912	  Allow khugepaged to put read-only file-backed pages in THP.
913
914	  This is marked experimental because it is a new feature. Write
915	  support of file THPs will be developed in the next few release
916	  cycles.
917
918endif # TRANSPARENT_HUGEPAGE
919
920#
921# UP and nommu archs use km based percpu allocator
922#
923config NEED_PER_CPU_KM
924	depends on !SMP || !MMU
925	bool
926	default y
927
928config NEED_PER_CPU_EMBED_FIRST_CHUNK
929	bool
930
931config NEED_PER_CPU_PAGE_FIRST_CHUNK
932	bool
933
934config USE_PERCPU_NUMA_NODE_ID
935	bool
936
937config HAVE_SETUP_PER_CPU_AREA
938	bool
939
940config CMA
941	bool "Contiguous Memory Allocator"
942	depends on MMU
943	select MIGRATION
944	select MEMORY_ISOLATION
945	help
946	  This enables the Contiguous Memory Allocator which allows other
947	  subsystems to allocate big physically-contiguous blocks of memory.
948	  CMA reserves a region of memory and allows only movable pages to
949	  be allocated from it. This way, the kernel can use the memory for
950	  pagecache and when a subsystem requests for contiguous area, the
951	  allocated pages are migrated away to serve the contiguous request.
952
953	  If unsure, say "n".
954
955config CMA_DEBUG
956	bool "CMA debug messages (DEVELOPMENT)"
957	depends on DEBUG_KERNEL && CMA
958	help
959	  Turns on debug messages in CMA.  This produces KERN_DEBUG
960	  messages for every CMA call as well as various messages while
961	  processing calls such as dma_alloc_from_contiguous().
962	  This option does not affect warning and error messages.
963
964config CMA_DEBUGFS
965	bool "CMA debugfs interface"
966	depends on CMA && DEBUG_FS
967	help
968	  Turns on the DebugFS interface for CMA.
969
970config CMA_SYSFS
971	bool "CMA information through sysfs interface"
972	depends on CMA && SYSFS
973	help
974	  This option exposes some sysfs attributes to get information
975	  from CMA.
976
977config CMA_AREAS
978	int "Maximum count of the CMA areas"
979	depends on CMA
980	default 19 if NUMA
981	default 7
982	help
983	  CMA allows to create CMA areas for particular purpose, mainly,
984	  used as device private area. This parameter sets the maximum
985	  number of CMA area in the system.
986
987	  If unsure, leave the default value "7" in UMA and "19" in NUMA.
988
989config MEM_SOFT_DIRTY
990	bool "Track memory changes"
991	depends on CHECKPOINT_RESTORE && HAVE_ARCH_SOFT_DIRTY && PROC_FS
992	select PROC_PAGE_MONITOR
993	help
994	  This option enables memory changes tracking by introducing a
995	  soft-dirty bit on pte-s. This bit it set when someone writes
996	  into a page just as regular dirty bit, but unlike the latter
997	  it can be cleared by hands.
998
999	  See Documentation/admin-guide/mm/soft-dirty.rst for more details.
1000
1001config GENERIC_EARLY_IOREMAP
1002	bool
1003
1004config STACK_MAX_DEFAULT_SIZE_MB
1005	int "Default maximum user stack size for 32-bit processes (MB)"
1006	default 100
1007	range 8 2048
1008	depends on STACK_GROWSUP && (!64BIT || COMPAT)
1009	help
1010	  This is the maximum stack size in Megabytes in the VM layout of 32-bit
1011	  user processes when the stack grows upwards (currently only on parisc
1012	  arch) when the RLIMIT_STACK hard limit is unlimited.
1013
1014	  A sane initial value is 100 MB.
1015
1016config DEFERRED_STRUCT_PAGE_INIT
1017	bool "Defer initialisation of struct pages to kthreads"
1018	depends on SPARSEMEM
1019	depends on !NEED_PER_CPU_KM
1020	depends on 64BIT
1021	select PADATA
1022	help
1023	  Ordinarily all struct pages are initialised during early boot in a
1024	  single thread. On very large machines this can take a considerable
1025	  amount of time. If this option is set, large machines will bring up
1026	  a subset of memmap at boot and then initialise the rest in parallel.
1027	  This has a potential performance impact on tasks running early in the
1028	  lifetime of the system until these kthreads finish the
1029	  initialisation.
1030
1031config PAGE_IDLE_FLAG
1032	bool
1033	select PAGE_EXTENSION if !64BIT
1034	help
1035	  This adds PG_idle and PG_young flags to 'struct page'.  PTE Accessed
1036	  bit writers can set the state of the bit in the flags so that PTE
1037	  Accessed bit readers may avoid disturbance.
1038
1039config IDLE_PAGE_TRACKING
1040	bool "Enable idle page tracking"
1041	depends on SYSFS && MMU
1042	select PAGE_IDLE_FLAG
1043	help
1044	  This feature allows to estimate the amount of user pages that have
1045	  not been touched during a given period of time. This information can
1046	  be useful to tune memory cgroup limits and/or for job placement
1047	  within a compute cluster.
1048
1049	  See Documentation/admin-guide/mm/idle_page_tracking.rst for
1050	  more details.
1051
1052config ARCH_HAS_CACHE_LINE_SIZE
1053	bool
1054
1055config ARCH_HAS_CURRENT_STACK_POINTER
1056	bool
1057	help
1058	  In support of HARDENED_USERCOPY performing stack variable lifetime
1059	  checking, an architecture-agnostic way to find the stack pointer
1060	  is needed. Once an architecture defines an unsigned long global
1061	  register alias named "current_stack_pointer", this config can be
1062	  selected.
1063
1064config ARCH_HAS_PTE_DEVMAP
1065	bool
1066
1067config ARCH_HAS_ZONE_DMA_SET
1068	bool
1069
1070config ZONE_DMA
1071	bool "Support DMA zone" if ARCH_HAS_ZONE_DMA_SET
1072	default y if ARM64 || X86
1073
1074config ZONE_DMA32
1075	bool "Support DMA32 zone" if ARCH_HAS_ZONE_DMA_SET
1076	depends on !X86_32
1077	default y if ARM64
1078
1079config ZONE_DEVICE
1080	bool "Device memory (pmem, HMM, etc...) hotplug support"
1081	depends on MEMORY_HOTPLUG
1082	depends on MEMORY_HOTREMOVE
1083	depends on SPARSEMEM_VMEMMAP
1084	depends on ARCH_HAS_PTE_DEVMAP
1085	select XARRAY_MULTI
1086
1087	help
1088	  Device memory hotplug support allows for establishing pmem,
1089	  or other device driver discovered memory regions, in the
1090	  memmap. This allows pfn_to_page() lookups of otherwise
1091	  "device-physical" addresses which is needed for using a DAX
1092	  mapping in an O_DIRECT operation, among other things.
1093
1094	  If FS_DAX is enabled, then say Y.
1095
1096#
1097# Helpers to mirror range of the CPU page tables of a process into device page
1098# tables.
1099#
1100config HMM_MIRROR
1101	bool
1102	depends on MMU
1103
1104config GET_FREE_REGION
1105	depends on SPARSEMEM
1106	bool
1107
1108config DEVICE_PRIVATE
1109	bool "Unaddressable device memory (GPU memory, ...)"
1110	depends on ZONE_DEVICE
1111	select GET_FREE_REGION
1112
1113	help
1114	  Allows creation of struct pages to represent unaddressable device
1115	  memory; i.e., memory that is only accessible from the device (or
1116	  group of devices). You likely also want to select HMM_MIRROR.
1117
1118config VMAP_PFN
1119	bool
1120
1121config ARCH_USES_HIGH_VMA_FLAGS
1122	bool
1123config ARCH_HAS_PKEYS
1124	bool
1125
1126config ARCH_USES_PG_ARCH_X
1127	bool
1128	help
1129	  Enable the definition of PG_arch_x page flags with x > 1. Only
1130	  suitable for 64-bit architectures with CONFIG_FLATMEM or
1131	  CONFIG_SPARSEMEM_VMEMMAP enabled, otherwise there may not be
1132	  enough room for additional bits in page->flags.
1133
1134config VM_EVENT_COUNTERS
1135	default y
1136	bool "Enable VM event counters for /proc/vmstat" if EXPERT
1137	help
1138	  VM event counters are needed for event counts to be shown.
1139	  This option allows the disabling of the VM event counters
1140	  on EXPERT systems.  /proc/vmstat will only show page counts
1141	  if VM event counters are disabled.
1142
1143config PERCPU_STATS
1144	bool "Collect percpu memory statistics"
1145	help
1146	  This feature collects and exposes statistics via debugfs. The
1147	  information includes global and per chunk statistics, which can
1148	  be used to help understand percpu memory usage.
1149
1150config GUP_TEST
1151	bool "Enable infrastructure for get_user_pages()-related unit tests"
1152	depends on DEBUG_FS
1153	help
1154	  Provides /sys/kernel/debug/gup_test, which in turn provides a way
1155	  to make ioctl calls that can launch kernel-based unit tests for
1156	  the get_user_pages*() and pin_user_pages*() family of API calls.
1157
1158	  These tests include benchmark testing of the _fast variants of
1159	  get_user_pages*() and pin_user_pages*(), as well as smoke tests of
1160	  the non-_fast variants.
1161
1162	  There is also a sub-test that allows running dump_page() on any
1163	  of up to eight pages (selected by command line args) within the
1164	  range of user-space addresses. These pages are either pinned via
1165	  pin_user_pages*(), or pinned via get_user_pages*(), as specified
1166	  by other command line arguments.
1167
1168	  See tools/testing/selftests/mm/gup_test.c
1169
1170comment "GUP_TEST needs to have DEBUG_FS enabled"
1171	depends on !GUP_TEST && !DEBUG_FS
1172
1173config GUP_GET_PXX_LOW_HIGH
1174	bool
1175
1176config DMAPOOL_TEST
1177	tristate "Enable a module to run time tests on dma_pool"
1178	depends on HAS_DMA
1179	help
1180	  Provides a test module that will allocate and free many blocks of
1181	  various sizes and report how long it takes. This is intended to
1182	  provide a consistent way to measure how changes to the
1183	  dma_pool_alloc/free routines affect performance.
1184
1185config ARCH_HAS_PTE_SPECIAL
1186	bool
1187
1188#
1189# Some architectures require a special hugepage directory format that is
1190# required to support multiple hugepage sizes. For example a4fe3ce76
1191# "powerpc/mm: Allow more flexible layouts for hugepage pagetables"
1192# introduced it on powerpc.  This allows for a more flexible hugepage
1193# pagetable layouts.
1194#
1195config ARCH_HAS_HUGEPD
1196	bool
1197
1198config MAPPING_DIRTY_HELPERS
1199        bool
1200
1201config KMAP_LOCAL
1202	bool
1203
1204config KMAP_LOCAL_NON_LINEAR_PTE_ARRAY
1205	bool
1206
1207# struct io_mapping based helper.  Selected by drivers that need them
1208config IO_MAPPING
1209	bool
1210
1211config MEMFD_CREATE
1212	bool "Enable memfd_create() system call" if EXPERT
1213
1214config SECRETMEM
1215	default y
1216	bool "Enable memfd_secret() system call" if EXPERT
1217	depends on ARCH_HAS_SET_DIRECT_MAP
1218	help
1219	  Enable the memfd_secret() system call with the ability to create
1220	  memory areas visible only in the context of the owning process and
1221	  not mapped to other processes and other kernel page tables.
1222
1223config ANON_VMA_NAME
1224	bool "Anonymous VMA name support"
1225	depends on PROC_FS && ADVISE_SYSCALLS && MMU
1226
1227	help
1228	  Allow naming anonymous virtual memory areas.
1229
1230	  This feature allows assigning names to virtual memory areas. Assigned
1231	  names can be later retrieved from /proc/pid/maps and /proc/pid/smaps
1232	  and help identifying individual anonymous memory areas.
1233	  Assigning a name to anonymous virtual memory area might prevent that
1234	  area from being merged with adjacent virtual memory areas due to the
1235	  difference in their name.
1236
1237config USERFAULTFD
1238	bool "Enable userfaultfd() system call"
1239	depends on MMU
1240	help
1241	  Enable the userfaultfd() system call that allows to intercept and
1242	  handle page faults in userland.
1243
1244config HAVE_ARCH_USERFAULTFD_WP
1245	bool
1246	help
1247	  Arch has userfaultfd write protection support
1248
1249config HAVE_ARCH_USERFAULTFD_MINOR
1250	bool
1251	help
1252	  Arch has userfaultfd minor fault support
1253
1254config PTE_MARKER_UFFD_WP
1255	bool "Userfaultfd write protection support for shmem/hugetlbfs"
1256	default y
1257	depends on HAVE_ARCH_USERFAULTFD_WP
1258
1259	help
1260	  Allows to create marker PTEs for userfaultfd write protection
1261	  purposes.  It is required to enable userfaultfd write protection on
1262	  file-backed memory types like shmem and hugetlbfs.
1263
1264# multi-gen LRU {
1265config LRU_GEN
1266	bool "Multi-Gen LRU"
1267	depends on MMU
1268	# make sure folio->flags has enough spare bits
1269	depends on 64BIT || !SPARSEMEM || SPARSEMEM_VMEMMAP
1270	help
1271	  A high performance LRU implementation to overcommit memory. See
1272	  Documentation/admin-guide/mm/multigen_lru.rst for details.
1273
1274config LRU_GEN_ENABLED
1275	bool "Enable by default"
1276	depends on LRU_GEN
1277	help
1278	  This option enables the multi-gen LRU by default.
1279
1280config LRU_GEN_STATS
1281	bool "Full stats for debugging"
1282	depends on LRU_GEN
1283	help
1284	  Do not enable this option unless you plan to look at historical stats
1285	  from evicted generations for debugging purpose.
1286
1287	  This option has a per-memcg and per-node memory overhead.
1288# }
1289
1290config ARCH_SUPPORTS_PER_VMA_LOCK
1291       def_bool n
1292
1293config PER_VMA_LOCK
1294	def_bool y
1295	depends on ARCH_SUPPORTS_PER_VMA_LOCK && MMU && SMP
1296	help
1297	  Allow per-vma locking during page fault handling.
1298
1299	  This feature allows locking each virtual memory area separately when
1300	  handling page faults instead of taking mmap_lock.
1301
1302config LOCK_MM_AND_FIND_VMA
1303	bool
1304	depends on !STACK_GROWSUP
1305
1306
1307config MEM_PURGEABLE
1308	bool "Purgeable memory feature"
1309	default n
1310	depends on 64BIT
1311	select ARCH_USES_HIGH_VMA_FLAGS
1312	help
1313	  Support purgeable pages for process
1314
1315config MEM_PURGEABLE_DEBUG
1316	bool "Purgeable memory debug"
1317	default n
1318	depends on MEM_PURGEABLE
1319	help
1320	  Debug info for purgeable memory
1321
1322config PURGEABLE_ASHMEM
1323	bool "Purgeable memory feature for ashmem"
1324	default n
1325	depends on MEM_PURGEABLE
1326	help
1327	  Support purgeable ashmem for process
1328
1329source "mm/damon/Kconfig"
1330
1331endmenu
1332