• T.J. Mercier's avatar
    mm: memcg: use larger batches for proactive reclaim · 287d5fed
    T.J. Mercier authored
    Before 388536ac291 ("mm:vmscan: fix inaccurate reclaim during proactive
    reclaim") we passed the number of pages for the reclaim request directly
    to try_to_free_mem_cgroup_pages, which could lead to significant
    overreclaim.  After 0388536a the number of pages was limited to a
    maximum 32 (SWAP_CLUSTER_MAX) to reduce the amount of overreclaim. 
    However such a small batch size caused a regression in reclaim performance
    due to many more reclaim start/stop cycles inside memory_reclaim.  The
    restart cost is amortized over more pages with larger batch sizes, and
    becomes a significant component of the runtime if the batch size is too
    small.
    
    Reclaim tries to balance nr_to_reclaim fidelity with fairness across nodes
    and cgroups over which the pages are spread.  As such, the bigger the
    request, the bigger the absolute overreclaim error.  Historic in-kernel
    users of reclaim have used fixed, small sized requests to approach an
    appropriate reclaim rate over time.  When we reclaim a user request of
    arbitrary size, use decaying batch sizes to manage error while maintaining
    reasonable throughput.
    
    MGLRU enabled - memcg LRU used
    root - full reclaim       pages/sec   time (sec)
    pre-0388536a      :    68047        10.46
    post-0388536a     :    13742        inf
    (reclaim-reclaimed)/4 :    67352        10.51
    
    MGLRU enabled - memcg LRU not used
    /uid_0 - 1G reclaim       pages/sec   time (sec)  overreclaim (MiB)
    pre-0388536a      :    258822       1.12            107.8
    post-0388536a     :    105174       2.49            3.5
    (reclaim-reclaimed)/4 :    233396       1.12            -7.4
    
    MGLRU enabled - memcg LRU not used
    /uid_0 - full reclaim     pages/sec   time (sec)
    pre-0388536a      :    72334        7.09
    post-0388536a     :    38105        14.45
    (reclaim-reclaimed)/4 :    72914        6.96
    
    [tjmercier@google.com: v4]
      Link: https://lkml.kernel.org/r/20240206175251.3364296-1-tjmercier@google.com
    Link: https://lkml.kernel.org/r/20240202233855.1236422-1-tjmercier@google.com
    Fixes: 0388536a
    
     ("mm:vmscan: fix inaccurate reclaim during proactive reclaim")
    Signed-off-by: default avatarT.J. Mercier <tjmercier@google.com>
    Reviewed-by: default avatarYosry Ahmed <yosryahmed@google.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Reviewed-by: default avatarMichal Koutny <mkoutny@suse.com>
    Acked-by: default avatarShakeel Butt <shakeelb@google.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Shakeel Butt <shakeelb@google.com>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Efly Young <yangyifei03@kuaishou.com>
    Cc: Yu Zhao <yuzhao@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    287d5fed
memcontrol.c 215 KB