mm: document semantics of ZONE_MOVABLE
Let's document what ZONE_MOVABLE means, how it's used, and which special cases we have regarding unmovable pages (memory offlining vs. migration / allocations). Signed-off-by: David Hildenbrand <david@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Acked-by: Mike Rapoport <rppt@linux.ibm.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Michael S. Tsirkin <mst@redhat.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Cc: Baoquan He <bhe@redhat.com> Cc: Jason Wang <jasowang@redhat.com> Cc: Qian Cai <cai@lca.pw> Link: http://lkml.kernel.org/r/20200816125333.7434-7-david@redhat.com Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
27f852795a
commit
9181a98062
|
@ -396,6 +396,41 @@ enum zone_type {
|
|||
*/
|
||||
ZONE_HIGHMEM,
|
||||
#endif
|
||||
/*
|
||||
* ZONE_MOVABLE is similar to ZONE_NORMAL, except that it contains
|
||||
* movable pages with few exceptional cases described below. Main use
|
||||
* cases for ZONE_MOVABLE are to make memory offlining/unplug more
|
||||
* likely to succeed, and to locally limit unmovable allocations - e.g.,
|
||||
* to increase the number of THP/huge pages. Notable special cases are:
|
||||
*
|
||||
* 1. Pinned pages: (long-term) pinning of movable pages might
|
||||
* essentially turn such pages unmovable. Memory offlining might
|
||||
* retry a long time.
|
||||
* 2. memblock allocations: kernelcore/movablecore setups might create
|
||||
* situations where ZONE_MOVABLE contains unmovable allocations
|
||||
* after boot. Memory offlining and allocations fail early.
|
||||
* 3. Memory holes: kernelcore/movablecore setups might create very rare
|
||||
* situations where ZONE_MOVABLE contains memory holes after boot,
|
||||
* for example, if we have sections that are only partially
|
||||
* populated. Memory offlining and allocations fail early.
|
||||
* 4. PG_hwpoison pages: while poisoned pages can be skipped during
|
||||
* memory offlining, such pages cannot be allocated.
|
||||
* 5. Unmovable PG_offline pages: in paravirtualized environments,
|
||||
* hotplugged memory blocks might only partially be managed by the
|
||||
* buddy (e.g., via XEN-balloon, Hyper-V balloon, virtio-mem). The
|
||||
* parts not manged by the buddy are unmovable PG_offline pages. In
|
||||
* some cases (virtio-mem), such pages can be skipped during
|
||||
* memory offlining, however, cannot be moved/allocated. These
|
||||
* techniques might use alloc_contig_range() to hide previously
|
||||
* exposed pages from the buddy again (e.g., to implement some sort
|
||||
* of memory unplug in virtio-mem).
|
||||
*
|
||||
* In general, no unmovable allocations that degrade memory offlining
|
||||
* should end up in ZONE_MOVABLE. Allocators (like alloc_contig_range())
|
||||
* have to expect that migrating pages in ZONE_MOVABLE can fail (even
|
||||
* if has_unmovable_pages() states that there are no unmovable pages,
|
||||
* there can be false negatives).
|
||||
*/
|
||||
ZONE_MOVABLE,
|
||||
#ifdef CONFIG_ZONE_DEVICE
|
||||
ZONE_DEVICE,
|
||||
|
|
Loading…
Reference in a new issue