• Johannes Weiner's avatar
    mm: vmscan: compaction works against zones, not lruvecs · 9b4f98cd
    Johannes Weiner authored
    The restart logic for when reclaim operates back to back with compaction
    is currently applied on the lruvec level.  But this does not make sense,
    because the container of interest for compaction is a zone as a whole,
    not the zone pages that are part of a certain memory cgroup.
    
    Negative impact is bounded.  For one, the code checks that the lruvec
    has enough reclaim candidates, so it does not risk getting stuck on a
    condition that can not be fulfilled.  And the unfairness of hammering on
    one particular memory cgroup to make progress in a zone will be
    amortized by the round robin manner in which reclaim goes through the
    memory cgroups.  Still, this can lead to unnecessary allocation
    latencies when the code elects to restart on a hard to reclaim or small
    group when there are other, more reclaimable groups in the zone.
    
    Move this logic to the zone level and restart reclaim for all memory
    cgroups in a zone when compaction requires more free pages from it.
    
    [akpm@linux-foundation.org: no need for min_t]
    Signed-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Reviewed-by: default avatarRik van Riel <riel@redhat.com>
    Acked-by: default avatarMel Gorman <mgorman@suse.de>
    Reviewed-by: default avatarMichal Hocko <mhocko@suse.cz>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Satoru Moriya <satoru.moriya@hds.com>
    Cc: Simon Jeons <simon.jeons@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9b4f98cd
vmscan.c 101 KB