• Nhat Pham's avatar
    memcontrol: add helpers for hugetlb memcg accounting · 4b569387
    Nhat Pham authored
    Patch series "hugetlb memcg accounting", v4.
    
    Currently, hugetlb memory usage is not acounted for in the memory
    controller, which could lead to memory overprotection for cgroups with
    hugetlb-backed memory.  This has been observed in our production system.
    
    For instance, here is one of our usecases: suppose there are two 32G
    containers.  The machine is booted with hugetlb_cma=6G, and each container
    may or may not use up to 3 gigantic page, depending on the workload within
    it.  The rest is anon, cache, slab, etc.  We can set the hugetlb cgroup
    limit of each cgroup to 3G to enforce hugetlb fairness.  But it is very
    difficult to configure memory.max to keep overall consumption, including
    anon, cache, slab etcetera fair.
    
    What we have had to resort to is to constantly poll hugetlb usage and
    readjust memory.max.  Similar procedure is done to other memory limits
    (memory.low for e.g).  However, this is rather cumbersome and buggy. 
    Furthermore, when there is a delay in memory limits correction, (for e.g
    when hugetlb usage changes within consecutive runs of the userspace
    agent), the system could be in an over/underprotected state.
    
    This patch series rectifies this issue by charging the memcg when the
    hugetlb folio is allocated, and uncharging when the folio is freed.  In
    addition, a new selftest is added to demonstrate and verify this new
    behavior.
    
    
    This patch (of 4):
    
    This patch exposes charge committing and cancelling as parts of the memory
    controller interface.  These functionalities are useful when the
    try_charge() and commit_charge() stages have to be separated by other
    actions in between (which can fail).  One such example is the new hugetlb
    accounting behavior in the following patch.
    
    The patch also adds a helper function to obtain a reference to the
    current task's memcg.
    
    Link: https://lkml.kernel.org/r/20231006184629.155543-1-nphamcs@gmail.com
    Link: https://lkml.kernel.org/r/20231006184629.155543-2-nphamcs@gmail.comSigned-off-by: default avatarNhat Pham <nphamcs@gmail.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Cc: Frank van der Linden <fvdl@google.com>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Shakeel Butt <shakeelb@google.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Tejun heo <tj@kernel.org>
    Cc: Yosry Ahmed <yosryahmed@google.com>
    Cc: Zefan Li <lizefan.x@bytedance.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    4b569387
memcontrol.c 205 KB