• Muchun Song's avatar
    mm: list_lru: allocate list_lru_one only when needed · 5abc1e37
    Muchun Song authored
    In our server, we found a suspected memory leak problem.  The kmalloc-32
    consumes more than 6GB of memory.  Other kmem_caches consume less than
    2GB memory.
    
    After our in-depth analysis, the memory consumption of kmalloc-32 slab
    cache is the cause of list_lru_one allocation.
    
      crash> p memcg_nr_cache_ids
      memcg_nr_cache_ids = $2 = 24574
    
    memcg_nr_cache_ids is very large and memory consumption of each list_lru
    can be calculated with the following formula.
    
      num_numa_node * memcg_nr_cache_ids * 32 (kmalloc-32)
    
    There are 4 numa nodes in our system, so each list_lru consumes ~3MB.
    
      crash> list super_blocks | wc -l
      952
    
    Every mount will register 2 list lrus, one is for inode, another is for
    dentry.  There are 952 super_blocks.  So the total memory is 952 * 2 * 3
    MB (~5.6GB).  But the number of memory cgroup is less than 500.  So I
    guess more than 12286 containers have been deployed on this machine (I do
    not know why there are so many containers, it may be a user's bug or the
    user really want to do that).  And memcg_nr_cache_ids has not been reduced
    to a suitable value.  This can waste a lot of memory.
    
    Now the infrastructure for dynamic list_lru_one allocation is ready, so
    remove statically allocated memory code to save memory.
    
    Link: https://lkml.kernel.org/r/20220228122126.37293-11-songmuchun@bytedance.com
    
    Signed-off-by: default avatarMuchun Song <songmuchun@bytedance.com>
    Cc: Alex Shi <alexs@kernel.org>
    Cc: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Cc: Chao Yu <chao@kernel.org>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Fam Zheng <fam.zheng@bytedance.com>
    Cc: Jaegeuk Kim <jaegeuk@kernel.org>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Kari Argillander <kari.argillander@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Qi Zheng <zhengqi.arch@bytedance.com>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Shakeel Butt <shakeelb@google.com>
    Cc: Theodore Ts'o <tytso@mit.edu>
    Cc: Trond Myklebust <trond.myklebust@hammerspace.com>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Wei Yang <richard.weiyang@gmail.com>
    Cc: Xiongchun Duan <duanxiongchun@bytedance.com>
    Cc: Yang Shi <shy828301@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    5abc1e37
memcontrol.c 193 KB