Commit 48d9f335 authored by Mike Rapoport's avatar Mike Rapoport Committed by Linus Torvalds

docs: remove description of DISCONTIGMEM

Remove description of DISCONTIGMEM from the "Memory Models" document and
update VM sysctl description so that it won't mention DISCONIGMEM.

Link: https://lkml.kernel.org/r/20210608091316.3622-8-rppt@kernel.orgSigned-off-by: default avatarMike Rapoport <rppt@linux.ibm.com>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Matt Turner <mattst88@gmail.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent d3c251ab
...@@ -938,12 +938,12 @@ allocations, THP and hugetlbfs pages. ...@@ -938,12 +938,12 @@ allocations, THP and hugetlbfs pages.
To make it sensible with respect to the watermark_scale_factor To make it sensible with respect to the watermark_scale_factor
parameter, the unit is in fractions of 10,000. The default value of parameter, the unit is in fractions of 10,000. The default value of
15,000 on !DISCONTIGMEM configurations means that up to 150% of the high 15,000 means that up to 150% of the high watermark will be reclaimed in the
watermark will be reclaimed in the event of a pageblock being mixed due event of a pageblock being mixed due to fragmentation. The level of reclaim
to fragmentation. The level of reclaim is determined by the number of is determined by the number of fragmentation events that occurred in the
fragmentation events that occurred in the recent past. If this value is recent past. If this value is smaller than a pageblock then a pageblocks
smaller than a pageblock then a pageblocks worth of pages will be reclaimed worth of pages will be reclaimed (e.g. 2MB on 64-bit x86). A boost factor
(e.g. 2MB on 64-bit x86). A boost factor of 0 will disable the feature. of 0 will disable the feature.
watermark_scale_factor watermark_scale_factor
......
...@@ -14,15 +14,11 @@ for the CPU. Then there could be several contiguous ranges at ...@@ -14,15 +14,11 @@ for the CPU. Then there could be several contiguous ranges at
completely distinct addresses. And, don't forget about NUMA, where completely distinct addresses. And, don't forget about NUMA, where
different memory banks are attached to different CPUs. different memory banks are attached to different CPUs.
Linux abstracts this diversity using one of the three memory models: Linux abstracts this diversity using one of the two memory models:
FLATMEM, DISCONTIGMEM and SPARSEMEM. Each architecture defines what FLATMEM and SPARSEMEM. Each architecture defines what
memory models it supports, what the default memory model is and memory models it supports, what the default memory model is and
whether it is possible to manually override that default. whether it is possible to manually override that default.
.. note::
At time of this writing, DISCONTIGMEM is considered deprecated,
although it is still in use by several architectures.
All the memory models track the status of physical page frames using All the memory models track the status of physical page frames using
struct page arranged in one or more arrays. struct page arranged in one or more arrays.
...@@ -63,43 +59,6 @@ straightforward: `PFN - ARCH_PFN_OFFSET` is an index to the ...@@ -63,43 +59,6 @@ straightforward: `PFN - ARCH_PFN_OFFSET` is an index to the
The `ARCH_PFN_OFFSET` defines the first page frame number for The `ARCH_PFN_OFFSET` defines the first page frame number for
systems with physical memory starting at address different from 0. systems with physical memory starting at address different from 0.
DISCONTIGMEM
============
The DISCONTIGMEM model treats the physical memory as a collection of
`nodes` similarly to how Linux NUMA support does. For each node Linux
constructs an independent memory management subsystem represented by
`struct pglist_data` (or `pg_data_t` for short). Among other
things, `pg_data_t` holds the `node_mem_map` array that maps
physical pages belonging to that node. The `node_start_pfn` field of
`pg_data_t` is the number of the first page frame belonging to that
node.
The architecture setup code should call :c:func:`free_area_init_node` for
each node in the system to initialize the `pg_data_t` object and its
`node_mem_map`.
Every `node_mem_map` behaves exactly as FLATMEM's `mem_map` -
every physical page frame in a node has a `struct page` entry in the
`node_mem_map` array. When DISCONTIGMEM is enabled, a portion of the
`flags` field of the `struct page` encodes the node number of the
node hosting that page.
The conversion between a PFN and the `struct page` in the
DISCONTIGMEM model became slightly more complex as it has to determine
which node hosts the physical page and which `pg_data_t` object
holds the `struct page`.
Architectures that support DISCONTIGMEM provide :c:func:`pfn_to_nid`
to convert PFN to the node number. The opposite conversion helper
:c:func:`page_to_nid` is generic as it uses the node number encoded in
page->flags.
Once the node number is known, the PFN can be used to index
appropriate `node_mem_map` array to access the `struct page` and
the offset of the `struct page` from the `node_mem_map` plus
`node_start_pfn` is the PFN of that page.
SPARSEMEM SPARSEMEM
========= =========
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment