• W
    mm/memcg: cache vmstat data in percpu memcg_stock_pcp · 68ac5b3c
    Waiman Long 提交于
    Before the new slab memory controller with per object byte charging,
    charging and vmstat data update happen only when new slab pages are
    allocated or freed.  Now they are done with every kmem_cache_alloc() and
    kmem_cache_free().  This causes additional overhead for workloads that
    generate a lot of alloc and free calls.
    
    The memcg_stock_pcp is used to cache byte charge for a specific obj_cgroup
    to reduce that overhead.  To further reducing it, this patch makes the
    vmstat data cached in the memcg_stock_pcp structure as well until it
    accumulates a page size worth of update or when other cached data change.
    Caching the vmstat data in the per-cpu stock eliminates two writes to
    non-hot cachelines for memcg specific as well as memcg-lruvecs specific
    vmstat data by a write to a hot local stock cacheline.
    
    On a 2-socket Cascade Lake server with instrumentation enabled and this
    patch applied, it was found that about 20% (634400 out of 3243830) of the
    time when mod_objcg_state() is called leads to an actual call to
    __mod_objcg_state() after initial boot.  When doing parallel kernel build,
    the figure was about 17% (24329265 out of 142512465).  So caching the
    vmstat data reduces the number of calls to __mod_objcg_state() by more
    than 80%.
    
    Link: https://lkml.kernel.org/r/20210506150007.16288-3-longman@redhat.comSigned-off-by: NWaiman Long <longman@redhat.com>
    Reviewed-by: NShakeel Butt <shakeelb@google.com>
    Cc: Alex Shi <alex.shi@linux.alibaba.com>
    Cc: Chris Down <chris@chrisdown.name>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Masayoshi Mizuma <msys.mizuma@gmail.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Roman Gushchin <guro@fb.com>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Wei Yang <richard.weiyang@gmail.com>
    Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com>
    Cc: Yafang Shao <laoar.shao@gmail.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    68ac5b3c
memcontrol.c 189.6 KB