• Baoquan He's avatar
    mm/page_alloc.c: don't show protection in zone's ->lowmem_reserve[] for empty zone · 96a5c186
    Baoquan He authored
    On one node, for lower zone's ->lowmem_reserve[], it will show how much
    memory is reserved in this lower zone to avoid excessive page allocation
    from the relevant higher zone's fallback allocation.
    
    However, currently lower zone's lowmem_reserve[] element will be filled
    even though the relevant higher zone is empty.  That doesnt' make sense
    and can cause confusion.
    
    E.g on node 0 of one system as below, it has zone
    DMA/DMA32/NORMAL/MOVABLE/DEVICE, among them zone MOVABLE/DEVICE are the
    highest and both are empty.  In zone DMA/DMA32's protection array, we can
    see that it has value for zone MOVABLE and DEVICE.
    
    Node 0, zone      DMA
      ......
      pages free     2816
            boost    0
            min      7
            low      10
            high     13
            spanned  4095
            present  3998
            managed  3840
            cma      0
            protection: (0, 1582, 23716, 23716, 23716)
       ......
    Node 0, zone    DMA32
      pages free     403269
            boost    0
            min      753
            low      1158
            high     1563
            spanned  1044480
            present  487039
            managed  405070
            cma      0
            protection: (0, 0, 22134, 22134, 22134)
       ......
    Node 0, zone   Normal
      pages free     5423879
            boost    0
            min      10539
            low      16205
            high     21871
            spanned  5767168
            present  5767168
            managed  5666438
            cma      0
            protection: (0, 0, 0, 0, 0)
       ......
    Node 0, zone  Movable
      pages free     0
            boost    0
            min      32
            low      32
            high     32
            spanned  0
            present  0
            managed  0
            cma      0
            protection: (0, 0, 0, 0, 0)
    Node 0, zone   Device
      pages free     0
            boost    0
            min      0
            low      0
            high     0
            spanned  0
            present  0
            managed  0
            cma      0
            protection: (0, 0, 0, 0, 0)
    
    Here, clear out the element value in lower zone's ->lowmem_reserve[] if the
    relevant higher zone is empty.
    
    And also replace space with tab in _deferred_grow_zone()
    
    Link: https://lkml.kernel.org/r/20240326061134.1055295-7-bhe@redhat.comSigned-off-by: default avatarBaoquan He <bhe@redhat.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: "Mike Rapoport (IBM)" <rppt@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    96a5c186
page_alloc.c 194 KB