5 This document describes generic Linux support for memory hot(un)plug with
6 a focus on System RAM, including ZONE_MOVABLE support.
13 Memory hot(un)plug allows for increasing and decreasing the size of physical
14 memory available to a machine at runtime. In the simplest case, it consists of
15 physically plugging or unplugging a DIMM at runtime, coordinated with the
18 Memory hot(un)plug is used for various purposes:
20 - The physical memory available to a machine can be adjusted at runtime, up- or
21 downgrading the memory capacity. This dynamic memory resizing, sometimes
22 referred to as "capacity on demand", is frequently used with virtual machines
23 and logical partitions.
25 - Replacing hardware, such as DIMMs or whole NUMA nodes, without downtime. One
26 example is replacing failing memory modules.
28 - Reducing energy consumption either by physically unplugging memory modules or
29 by logically unplugging (parts of) memory modules from Linux.
31 Further, the basic memory hot(un)plug infrastructure in Linux is nowadays also
32 used to expose persistent memory, other performance-differentiated memory and
33 reserved memory regions as ordinary system RAM to Linux.
35 Linux only supports memory hot(un)plug on selected 64 bit architectures, such as
36 x86_64, arm64, ppc64, s390x and ia64.
38 Memory Hot(Un)Plug Granularity
39 ------------------------------
41 Memory hot(un)plug in Linux uses the SPARSEMEM memory model, which divides the
42 physical memory address space into chunks of the same size: memory sections. The
43 size of a memory section is architecture dependent. For example, x86_64 uses
44 128 MiB and ppc64 uses 16 MiB.
46 Memory sections are combined into chunks referred to as "memory blocks". The
47 size of a memory block is architecture dependent and corresponds to the smallest
48 granularity that can be hot(un)plugged. The default size of a memory block is
49 the same as memory section size, unless an architecture specifies otherwise.
51 All memory blocks have the same size.
53 Phases of Memory Hotplug
54 ------------------------
56 Memory hotplug consists of two phases:
58 (1) Adding the memory to Linux
59 (2) Onlining memory blocks
61 In the first phase, metadata, such as the memory map ("memmap") and page tables
62 for the direct mapping, is allocated and initialized, and memory blocks are
63 created; the latter also creates sysfs files for managing newly created memory
66 In the second phase, added memory is exposed to the page allocator. After this
67 phase, the memory is visible in memory statistics, such as free and total
68 memory, of the system.
70 Phases of Memory Hotunplug
71 --------------------------
73 Memory hotunplug consists of two phases:
75 (1) Offlining memory blocks
76 (2) Removing the memory from Linux
78 In the fist phase, memory is "hidden" from the page allocator again, for
79 example, by migrating busy memory to other memory locations and removing all
80 relevant free pages from the page allocator After this phase, the memory is no
81 longer visible in memory statistics of the system.
83 In the second phase, the memory blocks are removed and metadata is freed.
85 Memory Hotplug Notifications
86 ============================
88 There are various ways how Linux is notified about memory hotplug events such
89 that it can start adding hotplugged memory. This description is limited to
90 systems that support ACPI; mechanisms specific to other firmware interfaces or
91 virtual machines are not described.
96 Platforms that support ACPI, such as x86_64, can support memory hotplug
97 notifications via ACPI.
99 In general, a firmware supporting memory hotplug defines a memory class object
100 HID "PNP0C80". When notified about hotplug of a new memory device, the ACPI
101 driver will hotplug the memory to Linux.
103 If the firmware supports hotplug of NUMA nodes, it defines an object _HID
104 "ACPI0004", "PNP0A05", or "PNP0A06". When notified about an hotplug event, all
105 assigned memory devices are added to Linux by the ACPI driver.
107 Similarly, Linux can be notified about requests to hotunplug a memory device or
108 a NUMA node via ACPI. The ACPI driver will try offlining all relevant memory
109 blocks, and, if successful, hotunplug the memory from Linux.
114 On some architectures, the firmware may not be able to notify the operating
115 system about a memory hotplug event. Instead, the memory has to be manually
116 probed from user space.
118 The probe interface is located at::
120 /sys/devices/system/memory/probe
122 Only complete memory blocks can be probed. Individual memory blocks are probed
123 by providing the physical start address of the memory block::
125 % echo addr > /sys/devices/system/memory/probe
127 Which results in a memory block for the range [addr, addr + memory_block_size)
132 Using the probe interface is discouraged as it is easy to crash the kernel,
133 because Linux cannot validate user input; this interface might be removed in
136 Onlining and Offlining Memory Blocks
137 ====================================
139 After a memory block has been created, Linux has to be instructed to actually
140 make use of that memory: the memory block has to be "online".
142 Before a memory block can be removed, Linux has to stop using any memory part of
143 the memory block: the memory block has to be "offlined".
145 The Linux kernel can be configured to automatically online added memory blocks
146 and drivers automatically trigger offlining of memory blocks when trying
147 hotunplug of memory. Memory blocks can only be removed once offlining succeeded
148 and drivers may trigger offlining of memory blocks when attempting hotunplug of
151 Onlining Memory Blocks Manually
152 -------------------------------
154 If auto-onlining of memory blocks isn't enabled, user-space has to manually
155 trigger onlining of memory blocks. Often, udev rules are used to automate this
158 Onlining of a memory block can be triggered via::
160 % echo online > /sys/devices/system/memory/memoryXXX/state
164 % echo 1 > /sys/devices/system/memory/memoryXXX/online
166 The kernel will select the target zone automatically, depending on the
167 configured ``online_policy``.
169 One can explicitly request to associate an offline memory block with
172 % echo online_movable > /sys/devices/system/memory/memoryXXX/state
174 Or one can explicitly request a kernel zone (usually ZONE_NORMAL) by::
176 % echo online_kernel > /sys/devices/system/memory/memoryXXX/state
178 In any case, if onlining succeeds, the state of the memory block is changed to
179 be "online". If it fails, the state of the memory block will remain unchanged
180 and the above commands will fail.
182 Onlining Memory Blocks Automatically
183 ------------------------------------
185 The kernel can be configured to try auto-onlining of newly added memory blocks.
186 If this feature is disabled, the memory blocks will stay offline until
187 explicitly onlined from user space.
189 The configured auto-online behavior can be observed via::
191 % cat /sys/devices/system/memory/auto_online_blocks
193 Auto-onlining can be enabled by writing ``online``, ``online_kernel`` or
194 ``online_movable`` to that file, like::
196 % echo online > /sys/devices/system/memory/auto_online_blocks
198 Similarly to manual onlining, with ``online`` the kernel will select the
199 target zone automatically, depending on the configured ``online_policy``.
201 Modifying the auto-online behavior will only affect all subsequently added
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.
211 DLPAR on ppc64 ignores the ``offline`` setting and will still online added
212 memory blocks; if onlining fails, memory blocks are removed again.
214 Offlining Memory Blocks
215 -----------------------
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.
222 Having the memory provided by memory block managed by ZONE_MOVABLE significantly
223 increases memory offlining reliability; still, memory offlining can fail in
226 Further, memory offlining might retry for a long time (or even forever), until
229 Offlining of a memory block can be triggered via::
231 % echo offline > /sys/devices/system/memory/memoryXXX/state
235 % echo 0 > /sys/devices/system/memory/memoryXXX/online
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::
241 bash: echo: write error: Device or resource busy
245 bash: echo: write error: Invalid argument
247 Observing the State of Memory Blocks
248 ------------------------------------
250 The state (online/offline/going-offline) of a memory block can be observed
253 % cat /sys/device/system/memory/memoryXXX/state
255 Or alternatively (1/0) via::
257 % cat /sys/device/system/memory/memoryXXX/online
259 For an online memory block, the managing zone can be observed via::
261 % cat /sys/device/system/memory/memoryXXX/valid_zones
263 Configuring Memory Hot(Un)Plug
264 ==============================
266 There are various ways how system administrators can configure memory
267 hot(un)plug and interact with memory blocks, especially, to online them.
269 Memory Hot(Un)Plug Configuration via Sysfs
270 ------------------------------------------
272 Some memory hot(un)plug properties can be configured or inspected via sysfs in::
274 /sys/devices/system/memory/
276 The following files are currently defined:
278 ====================== =========================================================
279 ``auto_online_blocks`` read-write: set or get the default state of new memory
280 blocks; configure auto-onlining.
282 The default value depends on the
283 CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE kernel configuration
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.
291 Availability depends on the CONFIG_ARCH_MEMORY_PROBE
292 kernel configuration option.
293 ``uevent`` read-write: generic udev file for device subsystems.
294 ====================== =========================================================
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.
304 Memory Block Configuration via Sysfs
305 ------------------------------------
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::
312 /sys/devices/system/memory/memoryXXX
314 where XXX is the memory block id; the number of digits is variable.
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.
320 For example, assume 1 GiB memory block size. A device for a memory starting at
321 0x100000000 is ``/sys/device/system/memory/memory4``::
323 (0x100000000 / 1Gib = 4)
325 This device covers address range [0x100000000 ... 0x140000000)
327 The following files are currently defined:
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
340 ``state`` read-write: advanced interface to trigger onlining /
341 offlining and to observe the state of a memory block.
343 When writing, ``online``, ``offline``, ``online_kernel`` and
344 ``online_movable`` are supported.
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.
351 When reading, ``online``, ``offline`` and ``going-offline``
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.
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.
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.
369 Availability depends on the CONFIG_MEMORY_HOTREMOVE
370 kernel configuration option.
371 =================== ============================================================
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.
381 /sys/devices/system/node/node0/memory9 -> ../../memory/memory9
383 A backlink will also be created::
385 /sys/devices/system/memory/memory9/node0 -> ../../node/node0
387 Command Line Parameters
388 -----------------------
390 Some command line parameters affect memory hot(un)plug handling. The following
391 command line parameters are relevant:
393 ======================== =======================================================
394 ``memhp_default_state`` configure auto-onlining by essentially setting
395 ``/sys/devices/system/memory/auto_online_blocks``.
396 ``movable_node`` configure automatic zone selection in the kernel when
397 using the ``contig-zones`` online policy. When
398 set, the kernel will default to ZONE_MOVABLE when
399 onlining a memory block, unless other zones can be kept
401 ======================== =======================================================
403 See Documentation/admin-guide/kernel-parameters.txt for a more generic
404 description of these command line parameters.
409 Instead of additional command line parameters or sysfs files, the
410 ``memory_hotplug`` subsystem now provides a dedicated namespace for module
411 parameters. Module parameters can be set via the command line by predicating
412 them with ``memory_hotplug.`` such as::
414 memory_hotplug.memmap_on_memory=1
416 and they can be observed (and some even modified at runtime) via::
418 /sys/module/memory_hotplug/parameters/
420 The following module parameters are currently defined:
422 ================================ ===============================================
423 ``memmap_on_memory`` read-write: Allocate memory for the memmap from
424 the added memory block itself. Even if enabled,
425 actual support depends on various other system
426 properties and should only be regarded as a
427 hint whether the behavior would be desired.
429 While allocating the memmap from the memory
430 block itself makes memory hotplug less likely
431 to fail and keeps the memmap on the same NUMA
432 node in any case, it can fragment physical
433 memory in a way that huge pages in bigger
434 granularity cannot be formed on hotplugged
436 ``online_policy`` read-write: Set the basic policy used for
437 automatic zone selection when onlining memory
438 blocks without specifying a target zone.
439 ``contig-zones`` has been the kernel default
440 before this parameter was added. After an
441 online policy was configured and memory was
442 online, the policy should not be changed
445 When set to ``contig-zones``, the kernel will
446 try keeping zones contiguous. If a memory block
447 intersects multiple zones or no zone, the
448 behavior depends on the ``movable_node`` kernel
449 command line parameter: default to ZONE_MOVABLE
450 if set, default to the applicable kernel zone
451 (usually ZONE_NORMAL) if not set.
453 When set to ``auto-movable``, the kernel will
454 try onlining memory blocks to ZONE_MOVABLE if
455 possible according to the configuration and
456 memory device details. With this policy, one
457 can avoid zone imbalances when eventually
458 hotplugging a lot of memory later and still
459 wanting to be able to hotunplug as much as
460 possible reliably, very desirable in
461 virtualized environments. This policy ignores
462 the ``movable_node`` kernel command line
463 parameter and isn't really applicable in
464 environments that require it (e.g., bare metal
465 with hotunpluggable nodes) where hotplugged
466 memory might be exposed via the
467 firmware-provided memory map early during boot
468 to the system instead of getting detected,
469 added and onlined later during boot (such as
470 done by virtio-mem or by some hypervisors
471 implementing emulated DIMMs). As one example, a
472 hotplugged DIMM will be onlined either
473 completely to ZONE_MOVABLE or completely to
474 ZONE_NORMAL, not a mixture.
475 As another example, as many memory blocks
476 belonging to a virtio-mem device will be
477 onlined to ZONE_MOVABLE as possible,
478 special-casing units of memory blocks that can
479 only get hotunplugged together. *This policy
480 does not protect from setups that are
481 problematic with ZONE_MOVABLE and does not
482 change the zone of memory blocks dynamically
483 after they were onlined.*
484 ``auto_movable_ratio`` read-write: Set the maximum MOVABLE:KERNEL
485 memory ratio in % for the ``auto-movable``
486 online policy. Whether the ratio applies only
487 for the system across all NUMA nodes or also
488 per NUMA nodes depends on the
489 ``auto_movable_numa_aware`` configuration.
491 All accounting is based on present memory pages
492 in the zones combined with accounting per
493 memory device. Memory dedicated to the CMA
494 allocator is accounted as MOVABLE, although
495 residing on one of the kernel zones. The
496 possible ratio depends on the actual workload.
497 The kernel default is "301" %, for example,
498 allowing for hotplugging 24 GiB to a 8 GiB VM
499 and automatically onlining all hotplugged
500 memory to ZONE_MOVABLE in many setups. The
501 additional 1% deals with some pages being not
502 present, for example, because of some firmware
505 Note that ZONE_NORMAL memory provided by one
506 memory device does not allow for more
507 ZONE_MOVABLE memory for a different memory
508 device. As one example, onlining memory of a
509 hotplugged DIMM to ZONE_NORMAL will not allow
510 for another hotplugged DIMM to get onlined to
511 ZONE_MOVABLE automatically. In contrast, memory
512 hotplugged by a virtio-mem device that got
513 onlined to ZONE_NORMAL will allow for more
514 ZONE_MOVABLE memory within *the same*
516 ``auto_movable_numa_aware`` read-write: Configure whether the
517 ``auto_movable_ratio`` in the ``auto-movable``
518 online policy also applies per NUMA
519 node in addition to the whole system across all
520 NUMA nodes. The kernel default is "Y".
522 Disabling NUMA awareness can be helpful when
523 dealing with NUMA nodes that should be
524 completely hotunpluggable, onlining the memory
525 completely to ZONE_MOVABLE automatically if
528 Parameter availability depends on CONFIG_NUMA.
529 ================================ ===============================================
534 ZONE_MOVABLE is an important mechanism for more reliable memory offlining.
535 Further, having system RAM managed by ZONE_MOVABLE instead of one of the
536 kernel zones can increase the number of possible transparent huge pages and
537 dynamically allocated huge pages.
539 Most kernel allocations are unmovable. Important examples include the memory
540 map (usually 1/64ths of memory), page tables, and kmalloc(). Such allocations
541 can only be served from the kernel zones.
543 Most user space pages, such as anonymous memory, and page cache pages are
544 movable. Such allocations can be served from ZONE_MOVABLE and the kernel zones.
546 Only movable allocations are served from ZONE_MOVABLE, resulting in unmovable
547 allocations being limited to the kernel zones. Without ZONE_MOVABLE, there is
548 absolutely no guarantee whether a memory block can be offlined successfully.
553 Having too much system RAM managed by ZONE_MOVABLE is called a zone imbalance,
554 which can harm the system or degrade performance. As one example, the kernel
555 might crash because it runs out of free memory for unmovable allocations,
556 although there is still plenty of free memory left in ZONE_MOVABLE.
558 Usually, MOVABLE:KERNEL ratios of up to 3:1 or even 4:1 are fine. Ratios of 63:1
559 are definitely impossible due to the overhead for the memory map.
561 Actual safe zone ratios depend on the workload. Extreme cases, like excessive
562 long-term pinning of pages, might not be able to deal with ZONE_MOVABLE at all.
566 CMA memory part of a kernel zone essentially behaves like memory in
567 ZONE_MOVABLE and similar considerations apply, especially when combining
568 CMA with ZONE_MOVABLE.
570 ZONE_MOVABLE Sizing Considerations
571 ----------------------------------
573 We usually expect that a large portion of available system RAM will actually
574 be consumed by user space, either directly or indirectly via the page cache. In
575 the normal case, ZONE_MOVABLE can be used when allocating such pages just fine.
577 With that in mind, it makes sense that we can have a big portion of system RAM
578 managed by ZONE_MOVABLE. However, there are some things to consider when using
579 ZONE_MOVABLE, especially when fine-tuning zone ratios:
581 - Having a lot of offline memory blocks. Even offline memory blocks consume
582 memory for metadata and page tables in the direct map; having a lot of offline
583 memory blocks is not a typical case, though.
585 - Memory ballooning without balloon compaction is incompatible with
586 ZONE_MOVABLE. Only some implementations, such as virtio-balloon and
587 pseries CMM, fully support balloon compaction.
589 Further, the CONFIG_BALLOON_COMPACTION kernel configuration option might be
590 disabled. In that case, balloon inflation will only perform unmovable
591 allocations and silently create a zone imbalance, usually triggered by
592 inflation requests from the hypervisor.
594 - Gigantic pages are unmovable, resulting in user space consuming a
595 lot of unmovable memory.
597 - Huge pages are unmovable when an architectures does not support huge
598 page migration, resulting in a similar issue as with gigantic pages.
600 - Page tables are unmovable. Excessive swapping, mapping extremely large
601 files or ZONE_DEVICE memory can be problematic, although only really relevant
602 in corner cases. When we manage a lot of user space memory that has been
603 swapped out or is served from a file/persistent memory/... we still need a lot
604 of page tables to manage that memory once user space accessed that memory.
606 - In certain DAX configurations the memory map for the device memory will be
607 allocated from the kernel zones.
609 - KASAN can have a significant memory overhead, for example, consuming 1/8th of
610 the total system memory size as (unmovable) tracking metadata.
612 - Long-term pinning of pages. Techniques that rely on long-term pinnings
613 (especially, RDMA and vfio/mdev) are fundamentally problematic with
614 ZONE_MOVABLE, and therefore, memory offlining. Pinned pages cannot reside
615 on ZONE_MOVABLE as that would turn these pages unmovable. Therefore, they
616 have to be migrated off that zone while pinning. Pinning a page can fail
617 even if there is plenty of free memory in ZONE_MOVABLE.
619 In addition, using ZONE_MOVABLE might make page pinning more expensive,
620 because of the page migration overhead.
622 By default, all the memory configured at boot time is managed by the kernel
623 zones and ZONE_MOVABLE is not used.
625 To enable ZONE_MOVABLE to include the memory present at boot and to control the
626 ratio between movable and kernel zones there are two command line options:
627 ``kernelcore=`` and ``movablecore=``. See
628 Documentation/admin-guide/kernel-parameters.rst for their description.
630 Memory Offlining and ZONE_MOVABLE
631 ---------------------------------
633 Even with ZONE_MOVABLE, there are some corner cases where offlining a memory
636 - Memory blocks with memory holes; this applies to memory blocks present during
637 boot and can apply to memory blocks hotplugged via the XEN balloon and the
640 - Mixed NUMA nodes and mixed zones within a single memory block prevent memory
641 offlining; this applies to memory blocks present during boot only.
643 - Special memory blocks prevented by the system from getting offlined. Examples
644 include any memory available during boot on arm64 or memory blocks spanning
645 the crashkernel area on s390x; this usually applies to memory blocks present
648 - Memory blocks overlapping with CMA areas cannot be offlined, this applies to
649 memory blocks present during boot only.
651 - Concurrent activity that operates on the same physical memory area, such as
652 allocating gigantic pages, can result in temporary offlining failures.
654 - Out of memory when dissolving huge pages, especially when HugeTLB Vmemmap
655 Optimization (HVO) is enabled.
657 Offlining code may be able to migrate huge page contents, but may not be able
658 to dissolve the source huge page because it fails allocating (unmovable) pages
659 for the vmemmap, because the system might not have free memory in the kernel
662 Users that depend on memory offlining to succeed for movable zones should
663 carefully consider whether the memory savings gained from this feature are
664 worth the risk of possibly not being able to offline memory in certain
667 Further, when running into out of memory situations while migrating pages, or
668 when still encountering permanently unmovable pages within ZONE_MOVABLE
669 (-> BUG), memory offlining will keep retrying until it eventually succeeds.
671 When offlining is triggered from user space, the offlining context can be
672 terminated by sending a fatal signal. A timeout based offlining can easily be
675 % timeout $TIMEOUT offline_block | failure_handling