Merge tag 'pwm/for-5.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/thierry...
[linux-2.6-microblaze.git] / Documentation / admin-guide / mm / memory-hotplug.rst
1 .. _admin_guide_memory_hotplug:
2
3 ==================
4 Memory Hot(Un)Plug
5 ==================
6
7 This document describes generic Linux support for memory hot(un)plug with
8 a focus on System RAM, including ZONE_MOVABLE support.
9
10 .. contents:: :local:
11
12 Introduction
13 ============
14
15 Memory hot(un)plug allows for increasing and decreasing the size of physical
16 memory available to a machine at runtime. In the simplest case, it consists of
17 physically plugging or unplugging a DIMM at runtime, coordinated with the
18 operating system.
19
20 Memory hot(un)plug is used for various purposes:
21
22 - The physical memory available to a machine can be adjusted at runtime, up- or
23   downgrading the memory capacity. This dynamic memory resizing, sometimes
24   referred to as "capacity on demand", is frequently used with virtual machines
25   and logical partitions.
26
27 - Replacing hardware, such as DIMMs or whole NUMA nodes, without downtime. One
28   example is replacing failing memory modules.
29
30 - Reducing energy consumption either by physically unplugging memory modules or
31   by logically unplugging (parts of) memory modules from Linux.
32
33 Further, the basic memory hot(un)plug infrastructure in Linux is nowadays also
34 used to expose persistent memory, other performance-differentiated memory and
35 reserved memory regions as ordinary system RAM to Linux.
36
37 Linux only supports memory hot(un)plug on selected 64 bit architectures, such as
38 x86_64, arm64, ppc64, s390x and ia64.
39
40 Memory Hot(Un)Plug Granularity
41 ------------------------------
42
43 Memory hot(un)plug in Linux uses the SPARSEMEM memory model, which divides the
44 physical memory address space into chunks of the same size: memory sections. The
45 size of a memory section is architecture dependent. For example, x86_64 uses
46 128 MiB and ppc64 uses 16 MiB.
47
48 Memory sections are combined into chunks referred to as "memory blocks". The
49 size of a memory block is architecture dependent and corresponds to the smallest
50 granularity that can be hot(un)plugged. The default size of a memory block is
51 the same as memory section size, unless an architecture specifies otherwise.
52
53 All memory blocks have the same size.
54
55 Phases of Memory Hotplug
56 ------------------------
57
58 Memory hotplug consists of two phases:
59
60 (1) Adding the memory to Linux
61 (2) Onlining memory blocks
62
63 In the first phase, metadata, such as the memory map ("memmap") and page tables
64 for the direct mapping, is allocated and initialized, and memory blocks are
65 created; the latter also creates sysfs files for managing newly created memory
66 blocks.
67
68 In the second phase, added memory is exposed to the page allocator. After this
69 phase, the memory is visible in memory statistics, such as free and total
70 memory, of the system.
71
72 Phases of Memory Hotunplug
73 --------------------------
74
75 Memory hotunplug consists of two phases:
76
77 (1) Offlining memory blocks
78 (2) Removing the memory from Linux
79
80 In the fist phase, memory is "hidden" from the page allocator again, for
81 example, by migrating busy memory to other memory locations and removing all
82 relevant free pages from the page allocator After this phase, the memory is no
83 longer visible in memory statistics of the system.
84
85 In the second phase, the memory blocks are removed and metadata is freed.
86
87 Memory Hotplug Notifications
88 ============================
89
90 There are various ways how Linux is notified about memory hotplug events such
91 that it can start adding hotplugged memory. This description is limited to
92 systems that support ACPI; mechanisms specific to other firmware interfaces or
93 virtual machines are not described.
94
95 ACPI Notifications
96 ------------------
97
98 Platforms that support ACPI, such as x86_64, can support memory hotplug
99 notifications via ACPI.
100
101 In general, a firmware supporting memory hotplug defines a memory class object
102 HID "PNP0C80". When notified about hotplug of a new memory device, the ACPI
103 driver will hotplug the memory to Linux.
104
105 If the firmware supports hotplug of NUMA nodes, it defines an object _HID
106 "ACPI0004", "PNP0A05", or "PNP0A06". When notified about an hotplug event, all
107 assigned memory devices are added to Linux by the ACPI driver.
108
109 Similarly, Linux can be notified about requests to hotunplug a memory device or
110 a NUMA node via ACPI. The ACPI driver will try offlining all relevant memory
111 blocks, and, if successful, hotunplug the memory from Linux.
112
113 Manual Probing
114 --------------
115
116 On some architectures, the firmware may not be able to notify the operating
117 system about a memory hotplug event. Instead, the memory has to be manually
118 probed from user space.
119
120 The probe interface is located at::
121
122         /sys/devices/system/memory/probe
123
124 Only complete memory blocks can be probed. Individual memory blocks are probed
125 by providing the physical start address of the memory block::
126
127         % echo addr > /sys/devices/system/memory/probe
128
129 Which results in a memory block for the range [addr, addr + memory_block_size)
130 being created.
131
132 .. note::
133
134   Using the probe interface is discouraged as it is easy to crash the kernel,
135   because Linux cannot validate user input; this interface might be removed in
136   the future.
137
138 Onlining and Offlining Memory Blocks
139 ====================================
140
141 After a memory block has been created, Linux has to be instructed to actually
142 make use of that memory: the memory block has to be "online".
143
144 Before a memory block can be removed, Linux has to stop using any memory part of
145 the memory block: the memory block has to be "offlined".
146
147 The Linux kernel can be configured to automatically online added memory blocks
148 and drivers automatically trigger offlining of memory blocks when trying
149 hotunplug of memory. Memory blocks can only be removed once offlining succeeded
150 and drivers may trigger offlining of memory blocks when attempting hotunplug of
151 memory.
152
153 Onlining Memory Blocks Manually
154 -------------------------------
155
156 If auto-onlining of memory blocks isn't enabled, user-space has to manually
157 trigger onlining of memory blocks. Often, udev rules are used to automate this
158 task in user space.
159
160 Onlining of a memory block can be triggered via::
161
162         % echo online > /sys/devices/system/memory/memoryXXX/state
163
164 Or alternatively::
165
166         % echo 1 > /sys/devices/system/memory/memoryXXX/online
167
168 The kernel will select the target zone automatically, usually defaulting to
169 ``ZONE_NORMAL`` unless ``movablecore=1`` has been specified on the kernel
170 command line or if the memory block would intersect the ZONE_MOVABLE already.
171
172 One can explicitly request to associate an offline memory block with
173 ZONE_MOVABLE by::
174
175         % echo online_movable > /sys/devices/system/memory/memoryXXX/state
176
177 Or one can explicitly request a kernel zone (usually ZONE_NORMAL) by::
178
179         % echo online_kernel > /sys/devices/system/memory/memoryXXX/state
180
181 In any case, if onlining succeeds, the state of the memory block is changed to
182 be "online". If it fails, the state of the memory block will remain unchanged
183 and the above commands will fail.
184
185 Onlining Memory Blocks Automatically
186 ------------------------------------
187
188 The kernel can be configured to try auto-onlining of newly added memory blocks.
189 If this feature is disabled, the memory blocks will stay offline until
190 explicitly onlined from user space.
191
192 The configured auto-online behavior can be observed via::
193
194         % cat /sys/devices/system/memory/auto_online_blocks
195
196 Auto-onlining can be enabled by writing ``online``, ``online_kernel`` or
197 ``online_movable`` to that file, like::
198
199         % echo online > /sys/devices/system/memory/auto_online_blocks
200
201 Modifying the auto-online behavior will only affect all subsequently added
202 memory blocks only.
203
204 .. note::
205
206   In corner cases, auto-onlining can fail. The kernel won't retry. Note that
207   auto-onlining is not expected to fail in default configurations.
208
209 .. note::
210
211   DLPAR on ppc64 ignores the ``offline`` setting and will still online added
212   memory blocks; if onlining fails, memory blocks are removed again.
213
214 Offlining Memory Blocks
215 -----------------------
216
217 In the current implementation, Linux's memory offlining will try migrating all
218 movable pages off the affected memory block. As most kernel allocations, such as
219 page tables, are unmovable, page migration can fail and, therefore, inhibit
220 memory offlining from succeeding.
221
222 Having the memory provided by memory block managed by ZONE_MOVABLE significantly
223 increases memory offlining reliability; still, memory offlining can fail in
224 some corner cases.
225
226 Further, memory offlining might retry for a long time (or even forever), until
227 aborted by the user.
228
229 Offlining of a memory block can be triggered via::
230
231         % echo offline > /sys/devices/system/memory/memoryXXX/state
232
233 Or alternatively::
234
235         % echo 0 > /sys/devices/system/memory/memoryXXX/online
236
237 If offlining succeeds, the state of the memory block is changed to be "offline".
238 If it fails, the state of the memory block will remain unchanged and the above
239 commands will fail, for example, via::
240
241         bash: echo: write error: Device or resource busy
242
243 or via::
244
245         bash: echo: write error: Invalid argument
246
247 Observing the State of Memory Blocks
248 ------------------------------------
249
250 The state (online/offline/going-offline) of a memory block can be observed
251 either via::
252
253         % cat /sys/device/system/memory/memoryXXX/state
254
255 Or alternatively (1/0) via::
256
257         % cat /sys/device/system/memory/memoryXXX/online
258
259 For an online memory block, the managing zone can be observed via::
260
261         % cat /sys/device/system/memory/memoryXXX/valid_zones
262
263 Configuring Memory Hot(Un)Plug
264 ==============================
265
266 There are various ways how system administrators can configure memory
267 hot(un)plug and interact with memory blocks, especially, to online them.
268
269 Memory Hot(Un)Plug Configuration via Sysfs
270 ------------------------------------------
271
272 Some memory hot(un)plug properties can be configured or inspected via sysfs in::
273
274         /sys/devices/system/memory/
275
276 The following files are currently defined:
277
278 ====================== =========================================================
279 ``auto_online_blocks`` read-write: set or get the default state of new memory
280                        blocks; configure auto-onlining.
281
282                        The default value depends on the
283                        CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE kernel configuration
284                        option.
285
286                        See the ``state`` property of memory blocks for details.
287 ``block_size_bytes``   read-only: the size in bytes of a memory block.
288 ``probe``              write-only: add (probe) selected memory blocks manually
289                        from user space by supplying the physical start address.
290
291                        Availability depends on the CONFIG_ARCH_MEMORY_PROBE
292                        kernel configuration option.
293 ``uevent``             read-write: generic udev file for device subsystems.
294 ====================== =========================================================
295
296 .. note::
297
298   When the CONFIG_MEMORY_FAILURE kernel configuration option is enabled, two
299   additional files ``hard_offline_page`` and ``soft_offline_page`` are available
300   to trigger hwpoisoning of pages, for example, for testing purposes. Note that
301   this functionality is not really related to memory hot(un)plug or actual
302   offlining of memory blocks.
303
304 Memory Block Configuration via Sysfs
305 ------------------------------------
306
307 Each memory block is represented as a memory block device that can be
308 onlined or offlined. All memory blocks have their device information located in
309 sysfs. Each present memory block is listed under
310 ``/sys/devices/system/memory`` as::
311
312         /sys/devices/system/memory/memoryXXX
313
314 where XXX is the memory block id; the number of digits is variable.
315
316 A present memory block indicates that some memory in the range is present;
317 however, a memory block might span memory holes. A memory block spanning memory
318 holes cannot be offlined.
319
320 For example, assume 1 GiB memory block size. A device for a memory starting at
321 0x100000000 is ``/sys/device/system/memory/memory4``::
322
323         (0x100000000 / 1Gib = 4)
324
325 This device covers address range [0x100000000 ... 0x140000000)
326
327 The following files are currently defined:
328
329 =================== ============================================================
330 ``online``          read-write: simplified interface to trigger onlining /
331                     offlining and to observe the state of a memory block.
332                     When onlining, the zone is selected automatically.
333 ``phys_device``     read-only: legacy interface only ever used on s390x to
334                     expose the covered storage increment.
335 ``phys_index``      read-only: the memory block id (XXX).
336 ``removable``       read-only: legacy interface that indicated whether a memory
337                     block was likely to be offlineable or not. Nowadays, the
338                     kernel return ``1`` if and only if it supports memory
339                     offlining.
340 ``state``           read-write: advanced interface to trigger onlining /
341                     offlining and to observe the state of a memory block.
342
343                     When writing, ``online``, ``offline``, ``online_kernel`` and
344                     ``online_movable`` are supported.
345
346                     ``online_movable`` specifies onlining to ZONE_MOVABLE.
347                     ``online_kernel`` specifies onlining to the default kernel
348                     zone for the memory block, such as ZONE_NORMAL.
349                     ``online`` let's the kernel select the zone automatically.
350
351                     When reading, ``online``, ``offline`` and ``going-offline``
352                     may be returned.
353 ``uevent``          read-write: generic uevent file for devices.
354 ``valid_zones``     read-only: when a block is online, shows the zone it
355                     belongs to; when a block is offline, shows what zone will
356                     manage it when the block will be onlined.
357
358                     For online memory blocks, ``DMA``, ``DMA32``, ``Normal``,
359                     ``Movable`` and ``none`` may be returned. ``none`` indicates
360                     that memory provided by a memory block is managed by
361                     multiple zones or spans multiple nodes; such memory blocks
362                     cannot be offlined. ``Movable`` indicates ZONE_MOVABLE.
363                     Other values indicate a kernel zone.
364
365                     For offline memory blocks, the first column shows the
366                     zone the kernel would select when onlining the memory block
367                     right now without further specifying a zone.
368
369                     Availability depends on the CONFIG_MEMORY_HOTREMOVE
370                     kernel configuration option.
371 =================== ============================================================
372
373 .. note::
374
375   If the CONFIG_NUMA kernel configuration option is enabled, the memoryXXX/
376   directories can also be accessed via symbolic links located in the
377   ``/sys/devices/system/node/node*`` directories.
378
379   For example::
380
381         /sys/devices/system/node/node0/memory9 -> ../../memory/memory9
382
383   A backlink will also be created::
384
385         /sys/devices/system/memory/memory9/node0 -> ../../node/node0
386
387 Command Line Parameters
388 -----------------------
389
390 Some command line parameters affect memory hot(un)plug handling. The following
391 command line parameters are relevant:
392
393 ======================== =======================================================
394 ``memhp_default_state``  configure auto-onlining by essentially setting
395                          ``/sys/devices/system/memory/auto_online_blocks``.
396 ``movablecore``          configure automatic zone selection of the kernel. When
397                          set, the kernel will default to ZONE_MOVABLE, unless
398                          other zones can be kept contiguous.
399 ======================== =======================================================
400
401 Module Parameters
402 ------------------
403
404 Instead of additional command line parameters or sysfs files, the
405 ``memory_hotplug`` subsystem now provides a dedicated namespace for module
406 parameters. Module parameters can be set via the command line by predicating
407 them with ``memory_hotplug.`` such as::
408
409         memory_hotplug.memmap_on_memory=1
410
411 and they can be observed (and some even modified at runtime) via::
412
413         /sys/modules/memory_hotplug/parameters/
414
415 The following module parameters are currently defined:
416
417 ======================== =======================================================
418 ``memmap_on_memory``     read-write: Allocate memory for the memmap from the
419                          added memory block itself. Even if enabled, actual
420                          support depends on various other system properties and
421                          should only be regarded as a hint whether the behavior
422                          would be desired.
423
424                          While allocating the memmap from the memory block
425                          itself makes memory hotplug less likely to fail and
426                          keeps the memmap on the same NUMA node in any case, it
427                          can fragment physical memory in a way that huge pages
428                          in bigger granularity cannot be formed on hotplugged
429                          memory.
430 ======================== =======================================================
431
432 ZONE_MOVABLE
433 ============
434
435 ZONE_MOVABLE is an important mechanism for more reliable memory offlining.
436 Further, having system RAM managed by ZONE_MOVABLE instead of one of the
437 kernel zones can increase the number of possible transparent huge pages and
438 dynamically allocated huge pages.
439
440 Most kernel allocations are unmovable. Important examples include the memory
441 map (usually 1/64ths of memory), page tables, and kmalloc(). Such allocations
442 can only be served from the kernel zones.
443
444 Most user space pages, such as anonymous memory, and page cache pages are
445 movable. Such allocations can be served from ZONE_MOVABLE and the kernel zones.
446
447 Only movable allocations are served from ZONE_MOVABLE, resulting in unmovable
448 allocations being limited to the kernel zones. Without ZONE_MOVABLE, there is
449 absolutely no guarantee whether a memory block can be offlined successfully.
450
451 Zone Imbalances
452 ---------------
453
454 Having too much system RAM managed by ZONE_MOVABLE is called a zone imbalance,
455 which can harm the system or degrade performance. As one example, the kernel
456 might crash because it runs out of free memory for unmovable allocations,
457 although there is still plenty of free memory left in ZONE_MOVABLE.
458
459 Usually, MOVABLE:KERNEL ratios of up to 3:1 or even 4:1 are fine. Ratios of 63:1
460 are definitely impossible due to the overhead for the memory map.
461
462 Actual safe zone ratios depend on the workload. Extreme cases, like excessive
463 long-term pinning of pages, might not be able to deal with ZONE_MOVABLE at all.
464
465 .. note::
466
467   CMA memory part of a kernel zone essentially behaves like memory in
468   ZONE_MOVABLE and similar considerations apply, especially when combining
469   CMA with ZONE_MOVABLE.
470
471 ZONE_MOVABLE Sizing Considerations
472 ----------------------------------
473
474 We usually expect that a large portion of available system RAM will actually
475 be consumed by user space, either directly or indirectly via the page cache. In
476 the normal case, ZONE_MOVABLE can be used when allocating such pages just fine.
477
478 With that in mind, it makes sense that we can have a big portion of system RAM
479 managed by ZONE_MOVABLE. However, there are some things to consider when using
480 ZONE_MOVABLE, especially when fine-tuning zone ratios:
481
482 - Having a lot of offline memory blocks. Even offline memory blocks consume
483   memory for metadata and page tables in the direct map; having a lot of offline
484   memory blocks is not a typical case, though.
485
486 - Memory ballooning without balloon compaction is incompatible with
487   ZONE_MOVABLE. Only some implementations, such as virtio-balloon and
488   pseries CMM, fully support balloon compaction.
489
490   Further, the CONFIG_BALLOON_COMPACTION kernel configuration option might be
491   disabled. In that case, balloon inflation will only perform unmovable
492   allocations and silently create a zone imbalance, usually triggered by
493   inflation requests from the hypervisor.
494
495 - Gigantic pages are unmovable, resulting in user space consuming a
496   lot of unmovable memory.
497
498 - Huge pages are unmovable when an architectures does not support huge
499   page migration, resulting in a similar issue as with gigantic pages.
500
501 - Page tables are unmovable. Excessive swapping, mapping extremely large
502   files or ZONE_DEVICE memory can be problematic, although only really relevant
503   in corner cases. When we manage a lot of user space memory that has been
504   swapped out or is served from a file/persistent memory/... we still need a lot
505   of page tables to manage that memory once user space accessed that memory.
506
507 - In certain DAX configurations the memory map for the device memory will be
508   allocated from the kernel zones.
509
510 - KASAN can have a significant memory overhead, for example, consuming 1/8th of
511   the total system memory size as (unmovable) tracking metadata.
512
513 - Long-term pinning of pages. Techniques that rely on long-term pinnings
514   (especially, RDMA and vfio/mdev) are fundamentally problematic with
515   ZONE_MOVABLE, and therefore, memory offlining. Pinned pages cannot reside
516   on ZONE_MOVABLE as that would turn these pages unmovable. Therefore, they
517   have to be migrated off that zone while pinning. Pinning a page can fail
518   even if there is plenty of free memory in ZONE_MOVABLE.
519
520   In addition, using ZONE_MOVABLE might make page pinning more expensive,
521   because of the page migration overhead.
522
523 By default, all the memory configured at boot time is managed by the kernel
524 zones and ZONE_MOVABLE is not used.
525
526 To enable ZONE_MOVABLE to include the memory present at boot and to control the
527 ratio between movable and kernel zones there are two command line options:
528 ``kernelcore=`` and ``movablecore=``. See
529 Documentation/admin-guide/kernel-parameters.rst for their description.
530
531 Memory Offlining and ZONE_MOVABLE
532 ---------------------------------
533
534 Even with ZONE_MOVABLE, there are some corner cases where offlining a memory
535 block might fail:
536
537 - Memory blocks with memory holes; this applies to memory blocks present during
538   boot and can apply to memory blocks hotplugged via the XEN balloon and the
539   Hyper-V balloon.
540
541 - Mixed NUMA nodes and mixed zones within a single memory block prevent memory
542   offlining; this applies to memory blocks present during boot only.
543
544 - Special memory blocks prevented by the system from getting offlined. Examples
545   include any memory available during boot on arm64 or memory blocks spanning
546   the crashkernel area on s390x; this usually applies to memory blocks present
547   during boot only.
548
549 - Memory blocks overlapping with CMA areas cannot be offlined, this applies to
550   memory blocks present during boot only.
551
552 - Concurrent activity that operates on the same physical memory area, such as
553   allocating gigantic pages, can result in temporary offlining failures.
554
555 - Out of memory when dissolving huge pages, especially when freeing unused
556   vmemmap pages associated with each hugetlb page is enabled.
557
558   Offlining code may be able to migrate huge page contents, but may not be able
559   to dissolve the source huge page because it fails allocating (unmovable) pages
560   for the vmemmap, because the system might not have free memory in the kernel
561   zones left.
562
563   Users that depend on memory offlining to succeed for movable zones should
564   carefully consider whether the memory savings gained from this feature are
565   worth the risk of possibly not being able to offline memory in certain
566   situations.
567
568 Further, when running into out of memory situations while migrating pages, or
569 when still encountering permanently unmovable pages within ZONE_MOVABLE
570 (-> BUG), memory offlining will keep retrying until it eventually succeeds.
571
572 When offlining is triggered from user space, the offlining context can be
573 terminated by sending a fatal signal. A timeout based offlining can easily be
574 implemented via::
575
576         % timeout $TIMEOUT offline_block | failure_handling