Skip to content
  • Roman Gushchin's avatar
    mm, memcg: partially revert "mm/memcontrol.c: keep local VM counters in sync... · b4c46484
    Roman Gushchin authored
    mm, memcg: partially revert "mm/memcontrol.c: keep local VM counters in sync with the hierarchical ones"
    
    Commit 766a4c19 ("mm/memcontrol.c: keep local VM counters in sync
    with the hierarchical ones") effectively decreased the precision of
    per-memcg vmstats_local and per-memcg-per-node lruvec percpu counters.
    
    That's good for displaying in memory.stat, but brings a serious
    regression into the reclaim process.
    
    One issue I've discovered and debugged is the following:
    lruvec_lru_size() can return 0 instead of the actual number of pages in
    the lru list, preventing the kernel to reclaim last remaining pages.
    Result is yet another dying memory cgroups flooding.  The opposite is
    also happening: scanning an empty lru list is the waste of cpu time.
    
    Also, inactive_list_is_low() can return incorrect values, preventing the
    active lru from being scanned and freed.  It can fail both because the
    size of active and inactive lists are inaccurate, and because the number
    of workingset refaults isn't precise.  In other words, the result is
    pretty random.
    
    I'm not sure, if using the approximate number of slab pages in
    count_shadow_number() is acceptable, but issues described above are
    enough to partially revert the patch.
    
    Let's keep per-memcg vmstat_local batched (they are only used for
    displaying stats to the userspace), but keep lruvec stats precise.  This
    change fixes the dead memcg flooding on my setup.
    
    Link: http://lkml.kernel.org/r/20190817004726.2530670-1-guro@fb.com
    Fixes: 766a4c19
    
     ("mm/memcontrol.c: keep local VM counters in sync with the hierarchical ones")
    Signed-off-by: default avatarRoman Gushchin <guro@fb.com>
    Acked-by: default avatarYafang Shao <laoar.shao@gmail.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b4c46484