Skip to content
  • Huang Ying's avatar
    autonuma: fix watermark checking in migrate_balanced_pgdat() · bfe9d006
    Huang Ying authored
    When zone_watermark_ok() is called in migrate_balanced_pgdat() to check
    migration target node, the parameter classzone_idx (for requested zone)
    is specified as 0 (ZONE_DMA).  But when allocating memory for autonuma
    in alloc_misplaced_dst_page(), the requested zone from GFP flags is
    ZONE_MOVABLE.  That is, the requested zone is different.  The size of
    lowmem_reserve for the different requested zone is different.  And this
    may cause some issues.
    
    For example, in the zoneinfo of a test machine as below,
    
    Node 0, zone    DMA32
      pages free     61592
            min      29
            low      454
            high     879
            spanned  1044480
            present  442306
            managed  425921
            protection: (0, 0, 62457, 62457, 62457)
    
    The free page number of ZONE_DMA32 is greater than "high watermark +
    lowmem_reserve[ZONE_DMA]", but less than "high watermark +
    lowmem_reserve[ZONE_MOVABLE]".  And because __alloc_pages_node() in
    alloc_misplaced_dst_page() requests ZONE_MOVABLE, the
    zone_watermark_ok() on ZONE_DMA32 in migrate_balanced_pgdat() may always
    return true.  So, autonuma may not stop even when memory pressure in
    node 0 is heavy.
    
    To fix the issue, ZONE_MOVABLE is used as parameter to call
    zone_watermark_ok() in migrate_balanced_pgdat().  This makes it same as
    requested zone in alloc_misplaced_dst_page().  So that
    migrate_balanced_pgdat() returns false when memory pressure is heavy.
    
    Link: http://lkml.kernel.org/r/20191101075727.26683-2-ying.huang@intel.com
    
    
    Signed-off-by: default avatar"Huang, Ying" <ying.huang@intel.com>
    Acked-by: default avatarMel Gorman <mgorman@suse.de>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Fengguang Wu <fengguang.wu@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    bfe9d006