1ee65728eSMike Rapoport.. SPDX-License-Identifier: GPL-2.0 2ee65728eSMike Rapoport 3ee65728eSMike Rapoport=============== 4ee65728eSMike RapoportPhysical Memory 5ee65728eSMike Rapoport=============== 65d8c5e43SMike Rapoport (IBM) 75d8c5e43SMike Rapoport (IBM)Linux is available for a wide range of architectures so there is a need for an 85d8c5e43SMike Rapoport (IBM)architecture-independent abstraction to represent the physical memory. This 95d8c5e43SMike Rapoport (IBM)chapter describes the structures used to manage physical memory in a running 105d8c5e43SMike Rapoport (IBM)system. 115d8c5e43SMike Rapoport (IBM) 125d8c5e43SMike Rapoport (IBM)The first principal concept prevalent in the memory management is 135d8c5e43SMike Rapoport (IBM)`Non-Uniform Memory Access (NUMA) 145d8c5e43SMike Rapoport (IBM)<https://en.wikipedia.org/wiki/Non-uniform_memory_access>`_. 155d8c5e43SMike Rapoport (IBM)With multi-core and multi-socket machines, memory may be arranged into banks 165d8c5e43SMike Rapoport (IBM)that incur a different cost to access depending on the “distance” from the 175d8c5e43SMike Rapoport (IBM)processor. For example, there might be a bank of memory assigned to each CPU or 185d8c5e43SMike Rapoport (IBM)a bank of memory very suitable for DMA near peripheral devices. 195d8c5e43SMike Rapoport (IBM) 205d8c5e43SMike Rapoport (IBM)Each bank is called a node and the concept is represented under Linux by a 215d8c5e43SMike Rapoport (IBM)``struct pglist_data`` even if the architecture is UMA. This structure is 22*7332f9e4SKim Phillipsalways referenced by its typedef ``pg_data_t``. A ``pg_data_t`` structure 235d8c5e43SMike Rapoport (IBM)for a particular node can be referenced by ``NODE_DATA(nid)`` macro where 245d8c5e43SMike Rapoport (IBM)``nid`` is the ID of that node. 255d8c5e43SMike Rapoport (IBM) 265d8c5e43SMike Rapoport (IBM)For NUMA architectures, the node structures are allocated by the architecture 275d8c5e43SMike Rapoport (IBM)specific code early during boot. Usually, these structures are allocated 285d8c5e43SMike Rapoport (IBM)locally on the memory bank they represent. For UMA architectures, only one 295d8c5e43SMike Rapoport (IBM)static ``pg_data_t`` structure called ``contig_page_data`` is used. Nodes will 305d8c5e43SMike Rapoport (IBM)be discussed further in Section :ref:`Nodes <nodes>` 315d8c5e43SMike Rapoport (IBM) 325d8c5e43SMike Rapoport (IBM)The entire physical address space is partitioned into one or more blocks 335d8c5e43SMike Rapoport (IBM)called zones which represent ranges within memory. These ranges are usually 345d8c5e43SMike Rapoport (IBM)determined by architectural constraints for accessing the physical memory. 355d8c5e43SMike Rapoport (IBM)The memory range within a node that corresponds to a particular zone is 365d8c5e43SMike Rapoport (IBM)described by a ``struct zone``, typedeffed to ``zone_t``. Each zone has 375d8c5e43SMike Rapoport (IBM)one of the types described below. 385d8c5e43SMike Rapoport (IBM) 395d8c5e43SMike Rapoport (IBM)* ``ZONE_DMA`` and ``ZONE_DMA32`` historically represented memory suitable for 405d8c5e43SMike Rapoport (IBM) DMA by peripheral devices that cannot access all of the addressable 415d8c5e43SMike Rapoport (IBM) memory. For many years there are better more and robust interfaces to get 42353c7dd6SMike Rapoport (IBM) memory with DMA specific requirements (Documentation/core-api/dma-api.rst), 43353c7dd6SMike Rapoport (IBM) but ``ZONE_DMA`` and ``ZONE_DMA32`` still represent memory ranges that have 445d8c5e43SMike Rapoport (IBM) restrictions on how they can be accessed. 455d8c5e43SMike Rapoport (IBM) Depending on the architecture, either of these zone types or even they both 465d8c5e43SMike Rapoport (IBM) can be disabled at build time using ``CONFIG_ZONE_DMA`` and 475d8c5e43SMike Rapoport (IBM) ``CONFIG_ZONE_DMA32`` configuration options. Some 64-bit platforms may need 485d8c5e43SMike Rapoport (IBM) both zones as they support peripherals with different DMA addressing 495d8c5e43SMike Rapoport (IBM) limitations. 505d8c5e43SMike Rapoport (IBM) 515d8c5e43SMike Rapoport (IBM)* ``ZONE_NORMAL`` is for normal memory that can be accessed by the kernel all 525d8c5e43SMike Rapoport (IBM) the time. DMA operations can be performed on pages in this zone if the DMA 535d8c5e43SMike Rapoport (IBM) devices support transfers to all addressable memory. ``ZONE_NORMAL`` is 545d8c5e43SMike Rapoport (IBM) always enabled. 555d8c5e43SMike Rapoport (IBM) 565d8c5e43SMike Rapoport (IBM)* ``ZONE_HIGHMEM`` is the part of the physical memory that is not covered by a 575d8c5e43SMike Rapoport (IBM) permanent mapping in the kernel page tables. The memory in this zone is only 585d8c5e43SMike Rapoport (IBM) accessible to the kernel using temporary mappings. This zone is available 595d8c5e43SMike Rapoport (IBM) only on some 32-bit architectures and is enabled with ``CONFIG_HIGHMEM``. 605d8c5e43SMike Rapoport (IBM) 615d8c5e43SMike Rapoport (IBM)* ``ZONE_MOVABLE`` is for normal accessible memory, just like ``ZONE_NORMAL``. 625d8c5e43SMike Rapoport (IBM) The difference is that the contents of most pages in ``ZONE_MOVABLE`` is 635d8c5e43SMike Rapoport (IBM) movable. That means that while virtual addresses of these pages do not 645d8c5e43SMike Rapoport (IBM) change, their content may move between different physical pages. Often 655d8c5e43SMike Rapoport (IBM) ``ZONE_MOVABLE`` is populated during memory hotplug, but it may be 665d8c5e43SMike Rapoport (IBM) also populated on boot using one of ``kernelcore``, ``movablecore`` and 67353c7dd6SMike Rapoport (IBM) ``movable_node`` kernel command line parameters. See 68353c7dd6SMike Rapoport (IBM) Documentation/mm/page_migration.rst and 693b80a03dSMike Rapoport (IBM) Documentation/admin-guide/mm/memory-hotplug.rst for additional details. 705d8c5e43SMike Rapoport (IBM) 715d8c5e43SMike Rapoport (IBM)* ``ZONE_DEVICE`` represents memory residing on devices such as PMEM and GPU. 725d8c5e43SMike Rapoport (IBM) It has different characteristics than RAM zone types and it exists to provide 735d8c5e43SMike Rapoport (IBM) :ref:`struct page <Pages>` and memory map services for device driver 745d8c5e43SMike Rapoport (IBM) identified physical address ranges. ``ZONE_DEVICE`` is enabled with 755d8c5e43SMike Rapoport (IBM) configuration option ``CONFIG_ZONE_DEVICE``. 765d8c5e43SMike Rapoport (IBM) 775d8c5e43SMike Rapoport (IBM)It is important to note that many kernel operations can only take place using 785d8c5e43SMike Rapoport (IBM)``ZONE_NORMAL`` so it is the most performance critical zone. Zones are 795d8c5e43SMike Rapoport (IBM)discussed further in Section :ref:`Zones <zones>`. 805d8c5e43SMike Rapoport (IBM) 815d8c5e43SMike Rapoport (IBM)The relation between node and zone extents is determined by the physical memory 825d8c5e43SMike Rapoport (IBM)map reported by the firmware, architectural constraints for memory addressing 835d8c5e43SMike Rapoport (IBM)and certain parameters in the kernel command line. 845d8c5e43SMike Rapoport (IBM) 855d8c5e43SMike Rapoport (IBM)For example, with 32-bit kernel on an x86 UMA machine with 2 Gbytes of RAM the 865d8c5e43SMike Rapoport (IBM)entire memory will be on node 0 and there will be three zones: ``ZONE_DMA``, 875d8c5e43SMike Rapoport (IBM)``ZONE_NORMAL`` and ``ZONE_HIGHMEM``:: 885d8c5e43SMike Rapoport (IBM) 895d8c5e43SMike Rapoport (IBM) 0 2G 905d8c5e43SMike Rapoport (IBM) +-------------------------------------------------------------+ 915d8c5e43SMike Rapoport (IBM) | node 0 | 925d8c5e43SMike Rapoport (IBM) +-------------------------------------------------------------+ 935d8c5e43SMike Rapoport (IBM) 945d8c5e43SMike Rapoport (IBM) 0 16M 896M 2G 955d8c5e43SMike Rapoport (IBM) +----------+-----------------------+--------------------------+ 965d8c5e43SMike Rapoport (IBM) | ZONE_DMA | ZONE_NORMAL | ZONE_HIGHMEM | 975d8c5e43SMike Rapoport (IBM) +----------+-----------------------+--------------------------+ 985d8c5e43SMike Rapoport (IBM) 995d8c5e43SMike Rapoport (IBM) 1005d8c5e43SMike Rapoport (IBM)With a kernel built with ``ZONE_DMA`` disabled and ``ZONE_DMA32`` enabled and 1015d8c5e43SMike Rapoport (IBM)booted with ``movablecore=80%`` parameter on an arm64 machine with 16 Gbytes of 1025d8c5e43SMike Rapoport (IBM)RAM equally split between two nodes, there will be ``ZONE_DMA32``, 1035d8c5e43SMike Rapoport (IBM)``ZONE_NORMAL`` and ``ZONE_MOVABLE`` on node 0, and ``ZONE_NORMAL`` and 1045d8c5e43SMike Rapoport (IBM)``ZONE_MOVABLE`` on node 1:: 1055d8c5e43SMike Rapoport (IBM) 1065d8c5e43SMike Rapoport (IBM) 1075d8c5e43SMike Rapoport (IBM) 1G 9G 17G 1085d8c5e43SMike Rapoport (IBM) +--------------------------------+ +--------------------------+ 1095d8c5e43SMike Rapoport (IBM) | node 0 | | node 1 | 1105d8c5e43SMike Rapoport (IBM) +--------------------------------+ +--------------------------+ 1115d8c5e43SMike Rapoport (IBM) 1125d8c5e43SMike Rapoport (IBM) 1G 4G 4200M 9G 9320M 17G 1135d8c5e43SMike Rapoport (IBM) +---------+----------+-----------+ +------------+-------------+ 1145d8c5e43SMike Rapoport (IBM) | DMA32 | NORMAL | MOVABLE | | NORMAL | MOVABLE | 1155d8c5e43SMike Rapoport (IBM) +---------+----------+-----------+ +------------+-------------+ 1165d8c5e43SMike Rapoport (IBM) 11710d18135SMike Rapoport (IBM) 11810d18135SMike Rapoport (IBM)Memory banks may belong to interleaving nodes. In the example below an x86 11910d18135SMike Rapoport (IBM)machine has 16 Gbytes of RAM in 4 memory banks, even banks belong to node 0 12010d18135SMike Rapoport (IBM)and odd banks belong to node 1:: 12110d18135SMike Rapoport (IBM) 12210d18135SMike Rapoport (IBM) 12310d18135SMike Rapoport (IBM) 0 4G 8G 12G 16G 12410d18135SMike Rapoport (IBM) +-------------+ +-------------+ +-------------+ +-------------+ 12510d18135SMike Rapoport (IBM) | node 0 | | node 1 | | node 0 | | node 1 | 12610d18135SMike Rapoport (IBM) +-------------+ +-------------+ +-------------+ +-------------+ 12710d18135SMike Rapoport (IBM) 12810d18135SMike Rapoport (IBM) 0 16M 4G 12910d18135SMike Rapoport (IBM) +-----+-------+ +-------------+ +-------------+ +-------------+ 13010d18135SMike Rapoport (IBM) | DMA | DMA32 | | NORMAL | | NORMAL | | NORMAL | 13110d18135SMike Rapoport (IBM) +-----+-------+ +-------------+ +-------------+ +-------------+ 13210d18135SMike Rapoport (IBM) 13310d18135SMike Rapoport (IBM)In this case node 0 will span from 0 to 12 Gbytes and node 1 will span from 13410d18135SMike Rapoport (IBM)4 to 16 Gbytes. 13510d18135SMike Rapoport (IBM) 1365d8c5e43SMike Rapoport (IBM).. _nodes: 1375d8c5e43SMike Rapoport (IBM) 1385d8c5e43SMike Rapoport (IBM)Nodes 1395d8c5e43SMike Rapoport (IBM)===== 1405d8c5e43SMike Rapoport (IBM) 1415d8c5e43SMike Rapoport (IBM)As we have mentioned, each node in memory is described by a ``pg_data_t`` which 1425d8c5e43SMike Rapoport (IBM)is a typedef for a ``struct pglist_data``. When allocating a page, by default 1435d8c5e43SMike Rapoport (IBM)Linux uses a node-local allocation policy to allocate memory from the node 1445d8c5e43SMike Rapoport (IBM)closest to the running CPU. As processes tend to run on the same CPU, it is 1455d8c5e43SMike Rapoport (IBM)likely the memory from the current node will be used. The allocation policy can 1465d8c5e43SMike Rapoport (IBM)be controlled by users as described in 1475d8c5e43SMike Rapoport (IBM)Documentation/admin-guide/mm/numa_memory_policy.rst. 1485d8c5e43SMike Rapoport (IBM) 1495d8c5e43SMike Rapoport (IBM)Most NUMA architectures maintain an array of pointers to the node 1505d8c5e43SMike Rapoport (IBM)structures. The actual structures are allocated early during boot when 1515d8c5e43SMike Rapoport (IBM)architecture specific code parses the physical memory map reported by the 1525d8c5e43SMike Rapoport (IBM)firmware. The bulk of the node initialization happens slightly later in the 1535d8c5e43SMike Rapoport (IBM)boot process by free_area_init() function, described later in Section 1545d8c5e43SMike Rapoport (IBM):ref:`Initialization <initialization>`. 1555d8c5e43SMike Rapoport (IBM) 1565d8c5e43SMike Rapoport (IBM) 1575d8c5e43SMike Rapoport (IBM)Along with the node structures, kernel maintains an array of ``nodemask_t`` 1585d8c5e43SMike Rapoport (IBM)bitmasks called ``node_states``. Each bitmask in this array represents a set of 1595d8c5e43SMike Rapoport (IBM)nodes with particular properties as defined by ``enum node_states``: 1605d8c5e43SMike Rapoport (IBM) 1615d8c5e43SMike Rapoport (IBM)``N_POSSIBLE`` 1625d8c5e43SMike Rapoport (IBM) The node could become online at some point. 1635d8c5e43SMike Rapoport (IBM)``N_ONLINE`` 1645d8c5e43SMike Rapoport (IBM) The node is online. 1655d8c5e43SMike Rapoport (IBM)``N_NORMAL_MEMORY`` 1665d8c5e43SMike Rapoport (IBM) The node has regular memory. 1675d8c5e43SMike Rapoport (IBM)``N_HIGH_MEMORY`` 1685d8c5e43SMike Rapoport (IBM) The node has regular or high memory. When ``CONFIG_HIGHMEM`` is disabled 1695d8c5e43SMike Rapoport (IBM) aliased to ``N_NORMAL_MEMORY``. 1705d8c5e43SMike Rapoport (IBM)``N_MEMORY`` 1715d8c5e43SMike Rapoport (IBM) The node has memory(regular, high, movable) 1725d8c5e43SMike Rapoport (IBM)``N_CPU`` 1735d8c5e43SMike Rapoport (IBM) The node has one or more CPUs 1745d8c5e43SMike Rapoport (IBM) 1755d8c5e43SMike Rapoport (IBM)For each node that has a property described above, the bit corresponding to the 1765d8c5e43SMike Rapoport (IBM)node ID in the ``node_states[<property>]`` bitmask is set. 1775d8c5e43SMike Rapoport (IBM) 1785d8c5e43SMike Rapoport (IBM)For example, for node 2 with normal memory and CPUs, bit 2 will be set in :: 1795d8c5e43SMike Rapoport (IBM) 1805d8c5e43SMike Rapoport (IBM) node_states[N_POSSIBLE] 1815d8c5e43SMike Rapoport (IBM) node_states[N_ONLINE] 1825d8c5e43SMike Rapoport (IBM) node_states[N_NORMAL_MEMORY] 1835d8c5e43SMike Rapoport (IBM) node_states[N_HIGH_MEMORY] 1845d8c5e43SMike Rapoport (IBM) node_states[N_MEMORY] 1855d8c5e43SMike Rapoport (IBM) node_states[N_CPU] 1865d8c5e43SMike Rapoport (IBM) 1875d8c5e43SMike Rapoport (IBM)For various operations possible with nodemasks please refer to 1885d8c5e43SMike Rapoport (IBM)``include/linux/nodemask.h``. 1895d8c5e43SMike Rapoport (IBM) 1905d8c5e43SMike Rapoport (IBM)Among other things, nodemasks are used to provide macros for node traversal, 1915d8c5e43SMike Rapoport (IBM)namely ``for_each_node()`` and ``for_each_online_node()``. 1925d8c5e43SMike Rapoport (IBM) 1935d8c5e43SMike Rapoport (IBM)For instance, to call a function foo() for each online node:: 1945d8c5e43SMike Rapoport (IBM) 1955d8c5e43SMike Rapoport (IBM) for_each_online_node(nid) { 1965d8c5e43SMike Rapoport (IBM) pg_data_t *pgdat = NODE_DATA(nid); 1975d8c5e43SMike Rapoport (IBM) 1985d8c5e43SMike Rapoport (IBM) foo(pgdat); 1995d8c5e43SMike Rapoport (IBM) } 2005d8c5e43SMike Rapoport (IBM) 2015d8c5e43SMike Rapoport (IBM)Node structure 2025d8c5e43SMike Rapoport (IBM)-------------- 2035d8c5e43SMike Rapoport (IBM) 2045d8c5e43SMike Rapoport (IBM)The nodes structure ``struct pglist_data`` is declared in 2055d8c5e43SMike Rapoport (IBM)``include/linux/mmzone.h``. Here we briefly describe fields of this 2065d8c5e43SMike Rapoport (IBM)structure: 2075d8c5e43SMike Rapoport (IBM) 2085d8c5e43SMike Rapoport (IBM)General 2095d8c5e43SMike Rapoport (IBM)~~~~~~~ 2105d8c5e43SMike Rapoport (IBM) 2115d8c5e43SMike Rapoport (IBM)``node_zones`` 2125d8c5e43SMike Rapoport (IBM) The zones for this node. Not all of the zones may be populated, but it is 2135d8c5e43SMike Rapoport (IBM) the full list. It is referenced by this node's node_zonelists as well as 2145d8c5e43SMike Rapoport (IBM) other node's node_zonelists. 2155d8c5e43SMike Rapoport (IBM) 2165d8c5e43SMike Rapoport (IBM)``node_zonelists`` 2175d8c5e43SMike Rapoport (IBM) The list of all zones in all nodes. This list defines the order of zones 2185d8c5e43SMike Rapoport (IBM) that allocations are preferred from. The ``node_zonelists`` is set up by 2195d8c5e43SMike Rapoport (IBM) ``build_zonelists()`` in ``mm/page_alloc.c`` during the initialization of 2205d8c5e43SMike Rapoport (IBM) core memory management structures. 2215d8c5e43SMike Rapoport (IBM) 2225d8c5e43SMike Rapoport (IBM)``nr_zones`` 2235d8c5e43SMike Rapoport (IBM) Number of populated zones in this node. 2245d8c5e43SMike Rapoport (IBM) 2255d8c5e43SMike Rapoport (IBM)``node_mem_map`` 2265d8c5e43SMike Rapoport (IBM) For UMA systems that use FLATMEM memory model the 0's node 2275d8c5e43SMike Rapoport (IBM) ``node_mem_map`` is array of struct pages representing each physical frame. 2285d8c5e43SMike Rapoport (IBM) 2295d8c5e43SMike Rapoport (IBM)``node_page_ext`` 2305d8c5e43SMike Rapoport (IBM) For UMA systems that use FLATMEM memory model the 0's node 2315d8c5e43SMike Rapoport (IBM) ``node_page_ext`` is array of extensions of struct pages. Available only 2325ea8937eSLukas Bulwahn in the kernels built with ``CONFIG_PAGE_EXTENSION`` enabled. 2335d8c5e43SMike Rapoport (IBM) 2345d8c5e43SMike Rapoport (IBM)``node_start_pfn`` 2355d8c5e43SMike Rapoport (IBM) The page frame number of the starting page frame in this node. 2365d8c5e43SMike Rapoport (IBM) 2375d8c5e43SMike Rapoport (IBM)``node_present_pages`` 2385d8c5e43SMike Rapoport (IBM) Total number of physical pages present in this node. 2395d8c5e43SMike Rapoport (IBM) 2405d8c5e43SMike Rapoport (IBM)``node_spanned_pages`` 2415d8c5e43SMike Rapoport (IBM) Total size of physical page range, including holes. 2425d8c5e43SMike Rapoport (IBM) 2435d8c5e43SMike Rapoport (IBM)``node_size_lock`` 2445d8c5e43SMike Rapoport (IBM) A lock that protects the fields defining the node extents. Only defined when 2455d8c5e43SMike Rapoport (IBM) at least one of ``CONFIG_MEMORY_HOTPLUG`` or 2465d8c5e43SMike Rapoport (IBM) ``CONFIG_DEFERRED_STRUCT_PAGE_INIT`` configuration options are enabled. 2475d8c5e43SMike Rapoport (IBM) ``pgdat_resize_lock()`` and ``pgdat_resize_unlock()`` are provided to 2485d8c5e43SMike Rapoport (IBM) manipulate ``node_size_lock`` without checking for ``CONFIG_MEMORY_HOTPLUG`` 2495d8c5e43SMike Rapoport (IBM) or ``CONFIG_DEFERRED_STRUCT_PAGE_INIT``. 2505d8c5e43SMike Rapoport (IBM) 2515d8c5e43SMike Rapoport (IBM)``node_id`` 2525d8c5e43SMike Rapoport (IBM) The Node ID (NID) of the node, starts at 0. 2535d8c5e43SMike Rapoport (IBM) 2545d8c5e43SMike Rapoport (IBM)``totalreserve_pages`` 2555d8c5e43SMike Rapoport (IBM) This is a per-node reserve of pages that are not available to userspace 2565d8c5e43SMike Rapoport (IBM) allocations. 2575d8c5e43SMike Rapoport (IBM) 2585d8c5e43SMike Rapoport (IBM)``first_deferred_pfn`` 2595d8c5e43SMike Rapoport (IBM) If memory initialization on large machines is deferred then this is the first 2605d8c5e43SMike Rapoport (IBM) PFN that needs to be initialized. Defined only when 2615d8c5e43SMike Rapoport (IBM) ``CONFIG_DEFERRED_STRUCT_PAGE_INIT`` is enabled 2625d8c5e43SMike Rapoport (IBM) 2635d8c5e43SMike Rapoport (IBM)``deferred_split_queue`` 2645d8c5e43SMike Rapoport (IBM) Per-node queue of huge pages that their split was deferred. Defined only when ``CONFIG_TRANSPARENT_HUGEPAGE`` is enabled. 2655d8c5e43SMike Rapoport (IBM) 2665d8c5e43SMike Rapoport (IBM)``__lruvec`` 2675d8c5e43SMike Rapoport (IBM) Per-node lruvec holding LRU lists and related parameters. Used only when 2685d8c5e43SMike Rapoport (IBM) memory cgroups are disabled. It should not be accessed directly, use 2695d8c5e43SMike Rapoport (IBM) ``mem_cgroup_lruvec()`` to look up lruvecs instead. 2705d8c5e43SMike Rapoport (IBM) 2715d8c5e43SMike Rapoport (IBM)Reclaim control 2725d8c5e43SMike Rapoport (IBM)~~~~~~~~~~~~~~~ 2735d8c5e43SMike Rapoport (IBM) 274353c7dd6SMike Rapoport (IBM)See also Documentation/mm/page_reclaim.rst. 2755d8c5e43SMike Rapoport (IBM) 2765d8c5e43SMike Rapoport (IBM)``kswapd`` 2775d8c5e43SMike Rapoport (IBM) Per-node instance of kswapd kernel thread. 2785d8c5e43SMike Rapoport (IBM) 2795d8c5e43SMike Rapoport (IBM)``kswapd_wait``, ``pfmemalloc_wait``, ``reclaim_wait`` 2805d8c5e43SMike Rapoport (IBM) Workqueues used to synchronize memory reclaim tasks 2815d8c5e43SMike Rapoport (IBM) 2825d8c5e43SMike Rapoport (IBM)``nr_writeback_throttled`` 2835d8c5e43SMike Rapoport (IBM) Number of tasks that are throttled waiting on dirty pages to clean. 2845d8c5e43SMike Rapoport (IBM) 2855d8c5e43SMike Rapoport (IBM)``nr_reclaim_start`` 2865d8c5e43SMike Rapoport (IBM) Number of pages written while reclaim is throttled waiting for writeback. 2875d8c5e43SMike Rapoport (IBM) 2885d8c5e43SMike Rapoport (IBM)``kswapd_order`` 2895d8c5e43SMike Rapoport (IBM) Controls the order kswapd tries to reclaim 2905d8c5e43SMike Rapoport (IBM) 2915d8c5e43SMike Rapoport (IBM)``kswapd_highest_zoneidx`` 2925d8c5e43SMike Rapoport (IBM) The highest zone index to be reclaimed by kswapd 2935d8c5e43SMike Rapoport (IBM) 2945d8c5e43SMike Rapoport (IBM)``kswapd_failures`` 2955d8c5e43SMike Rapoport (IBM) Number of runs kswapd was unable to reclaim any pages 2965d8c5e43SMike Rapoport (IBM) 2975d8c5e43SMike Rapoport (IBM)``min_unmapped_pages`` 2985d8c5e43SMike Rapoport (IBM) Minimal number of unmapped file backed pages that cannot be reclaimed. 2995d8c5e43SMike Rapoport (IBM) Determined by ``vm.min_unmapped_ratio`` sysctl. Only defined when 3005d8c5e43SMike Rapoport (IBM) ``CONFIG_NUMA`` is enabled. 3015d8c5e43SMike Rapoport (IBM) 3025d8c5e43SMike Rapoport (IBM)``min_slab_pages`` 3035d8c5e43SMike Rapoport (IBM) Minimal number of SLAB pages that cannot be reclaimed. Determined by 3045d8c5e43SMike Rapoport (IBM) ``vm.min_slab_ratio sysctl``. Only defined when ``CONFIG_NUMA`` is enabled 3055d8c5e43SMike Rapoport (IBM) 3065d8c5e43SMike Rapoport (IBM)``flags`` 3075d8c5e43SMike Rapoport (IBM) Flags controlling reclaim behavior. 3085d8c5e43SMike Rapoport (IBM) 3095d8c5e43SMike Rapoport (IBM)Compaction control 3105d8c5e43SMike Rapoport (IBM)~~~~~~~~~~~~~~~~~~ 3115d8c5e43SMike Rapoport (IBM) 3125d8c5e43SMike Rapoport (IBM)``kcompactd_max_order`` 3135d8c5e43SMike Rapoport (IBM) Page order that kcompactd should try to achieve. 3145d8c5e43SMike Rapoport (IBM) 3155d8c5e43SMike Rapoport (IBM)``kcompactd_highest_zoneidx`` 3165d8c5e43SMike Rapoport (IBM) The highest zone index to be compacted by kcompactd. 3175d8c5e43SMike Rapoport (IBM) 3185d8c5e43SMike Rapoport (IBM)``kcompactd_wait`` 3195d8c5e43SMike Rapoport (IBM) Workqueue used to synchronize memory compaction tasks. 3205d8c5e43SMike Rapoport (IBM) 3215d8c5e43SMike Rapoport (IBM)``kcompactd`` 3225d8c5e43SMike Rapoport (IBM) Per-node instance of kcompactd kernel thread. 3235d8c5e43SMike Rapoport (IBM) 3245d8c5e43SMike Rapoport (IBM)``proactive_compact_trigger`` 3255d8c5e43SMike Rapoport (IBM) Determines if proactive compaction is enabled. Controlled by 3265d8c5e43SMike Rapoport (IBM) ``vm.compaction_proactiveness`` sysctl. 3275d8c5e43SMike Rapoport (IBM) 3285d8c5e43SMike Rapoport (IBM)Statistics 3295d8c5e43SMike Rapoport (IBM)~~~~~~~~~~ 3305d8c5e43SMike Rapoport (IBM) 3315d8c5e43SMike Rapoport (IBM)``per_cpu_nodestats`` 3325d8c5e43SMike Rapoport (IBM) Per-CPU VM statistics for the node 3335d8c5e43SMike Rapoport (IBM) 3345d8c5e43SMike Rapoport (IBM)``vm_stat`` 3355d8c5e43SMike Rapoport (IBM) VM statistics for the node. 3365d8c5e43SMike Rapoport (IBM) 3375d8c5e43SMike Rapoport (IBM).. _zones: 3385d8c5e43SMike Rapoport (IBM) 3395d8c5e43SMike Rapoport (IBM)Zones 3405d8c5e43SMike Rapoport (IBM)===== 3415d8c5e43SMike Rapoport (IBM) 3425d8c5e43SMike Rapoport (IBM).. admonition:: Stub 3435d8c5e43SMike Rapoport (IBM) 3445d8c5e43SMike Rapoport (IBM) This section is incomplete. Please list and describe the appropriate fields. 3455d8c5e43SMike Rapoport (IBM) 3465d8c5e43SMike Rapoport (IBM).. _pages: 3475d8c5e43SMike Rapoport (IBM) 3485d8c5e43SMike Rapoport (IBM)Pages 3495d8c5e43SMike Rapoport (IBM)===== 3505d8c5e43SMike Rapoport (IBM) 3515d8c5e43SMike Rapoport (IBM).. admonition:: Stub 3525d8c5e43SMike Rapoport (IBM) 3535d8c5e43SMike Rapoport (IBM) This section is incomplete. Please list and describe the appropriate fields. 3545d8c5e43SMike Rapoport (IBM) 3555d8c5e43SMike Rapoport (IBM).. _folios: 3565d8c5e43SMike Rapoport (IBM) 3575d8c5e43SMike Rapoport (IBM)Folios 3585d8c5e43SMike Rapoport (IBM)====== 3595d8c5e43SMike Rapoport (IBM) 3605d8c5e43SMike Rapoport (IBM).. admonition:: Stub 3615d8c5e43SMike Rapoport (IBM) 3625d8c5e43SMike Rapoport (IBM) This section is incomplete. Please list and describe the appropriate fields. 3635d8c5e43SMike Rapoport (IBM) 3645d8c5e43SMike Rapoport (IBM).. _initialization: 3655d8c5e43SMike Rapoport (IBM) 3665d8c5e43SMike Rapoport (IBM)Initialization 3675d8c5e43SMike Rapoport (IBM)============== 3685d8c5e43SMike Rapoport (IBM) 3695d8c5e43SMike Rapoport (IBM).. admonition:: Stub 3705d8c5e43SMike Rapoport (IBM) 3715d8c5e43SMike Rapoport (IBM) This section is incomplete. Please list and describe the appropriate fields. 372