• Tejun Heo's avatar
    memcg: make mem_cgroup_read_{stat|event}() iterate possible cpus instead of online · 733a572e
    Tejun Heo authored
    cpu_possible_mask represents the CPUs which are actually possible
    during that boot instance.  For systems which don't support CPU
    hotplug, this will match cpu_online_mask exactly in most cases.  Even
    for systems which support CPU hotplug, the number of possible CPU
    slots is highly unlikely to diverge greatly from the number of online
    CPUs.  The only cases where the difference between possible and online
    caused problems were when the boot code failed to initialize the
    possible mask and left it fully set at NR_CPUS - 1.
    
    As such, most per-cpu constructs allocate for all possible CPUs and
    often iterate over the possibles, which also has the benefit of
    avoiding the blocking CPU hotplug synchronization.
    
    memcg open codes per-cpu stat counting for mem_cgroup_read_stat() and
    mem_cgroup_read_events(), which iterates over online CPUs and handles
    CPU hotplug operations explicitly.  This complexity doesn't actually
    buy anything.  Switch to iterating over the possibles and drop the
    explicit CPU hotplug handling.
    
    Eventually, we want to convert memcg to use percpu_counter instead of
    its own custom implementation which also benefits from quick access
    w/o summing for cases where larger error margin is acceptable.
    
    This will allow mem_cgroup_read_stat() to be called from non-sleepable
    contexts which will be used by cgroup writeback.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Michal Hocko <mhocko@suse.cz>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    733a572e
memcontrol.c 150 KB