• Michal Hocko's avatar
    memcg,vmscan: do not break out targeted reclaim without reclaimed pages · a394cb8e
    Michal Hocko authored
    Targeted (hard resp soft) reclaim has traditionally tried to scan one
    group with decreasing priority until nr_to_reclaim (SWAP_CLUSTER_MAX
    pages) is reclaimed or all priorities are exhausted.  The reclaim is
    then retried until the limit is met.
    
    This approach, however, doesn't work well with deeper hierarchies where
    groups higher in the hierarchy do not have any or only very few pages
    (this usually happens if those groups do not have any tasks and they
    have only re-parented pages after some of their children is removed).
    Those groups are reclaimed with decreasing priority pointlessly as there
    is nothing to reclaim from them.
    
    An easiest fix is to break out of the memcg iteration loop in
    shrink_zone only if the whole hierarchy has been visited or sufficient
    pages have been reclaimed.  This is also more natural because the
    reclaimer expects that the hierarchy under the given root is reclaimed.
    As a result we can simplify the soft limit reclaim which does its own
    iteration.
    
    [yinghan@google.com: break out of the hierarchy loop only if nr_reclaimed exceeded nr_to_reclaim]
    [akpm@linux-foundation.org: use conventional comparison order]
    Signed-off-by: default avatarMichal Hocko <mhocko@suse.cz>
    Reported-by: default avatarYing Han <yinghan@google.com>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Tejun Heo <htejun@gmail.com>
    Cc: Glauber Costa <glommer@parallels.com>
    Cc: Li Zefan <lizefan@huawei.com>
    Signed-off-by: default avatarYing Han <yinghan@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a394cb8e
vmscan.c 101 KB