• Yosry Ahmed's avatar
    memcg: sleep during flushing stats in safe contexts · 9fad9aee
    Yosry Ahmed authored
    Currently, all contexts that flush memcg stats do so with sleeping not
    allowed.  Some of these contexts are perfectly safe to sleep in, such as
    reading cgroup files from userspace or the background periodic flusher. 
    Flushing is an expensive operation that scales with the number of cpus and
    the number of cgroups in the system, so avoid doing it atomically where
    possible.
    
    Refactor the code to make mem_cgroup_flush_stats() non-atomic (aka
    sleepable), and provide a separate atomic version.  The atomic version is
    used in reclaim, refault, writeback, and in mem_cgroup_usage().  All other
    code paths are left to use the non-atomic version.  This includes
    callbacks for userspace reads and the periodic flusher.
    
    Since refault is the only caller of mem_cgroup_flush_stats_ratelimited(),
    change it to mem_cgroup_flush_stats_atomic_ratelimited().  Reclaim and
    refault code paths are modified to do non-atomic flushing in separate
    later patches -- so it will eventually be changed back to
    mem_cgroup_flush_stats_ratelimited().
    
    Link: https://lkml.kernel.org/r/20230330191801.1967435-6-yosryahmed@google.comSigned-off-by: default avatarYosry Ahmed <yosryahmed@google.com>
    Acked-by: default avatarShakeel Butt <shakeelb@google.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Josef Bacik <josef@toxicpanda.com>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Michal Koutný <mkoutny@suse.com>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Vasily Averin <vasily.averin@linux.dev>
    Cc: Zefan Li <lizefan.x@bytedance.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    9fad9aee
vmscan.c 221 KB