• Shakeel Butt's avatar
    memcg: synchronously enforce memory.high for large overcharges · c9afe31e
    Shakeel Butt authored
    The high limit is used to throttle the workload without invoking the
    oom-killer.  Recently we tried to use the high limit to right size our
    internal workloads.  More specifically dynamically adjusting the limits
    of the workload without letting the workload get oom-killed.  However
    due to the limitation of the implementation of high limit enforcement,
    we observed the mechanism fails for some real workloads.
    
    The high limit is enforced on return-to-userspace i.e.  the kernel let
    the usage goes over the limit and when the execution returns to
    userspace, the high reclaim is triggered and the process can get
    throttled as well.  However this mechanism fails for workloads which do
    large allocations in a single kernel entry e.g.  applications that
    mlock() a large chunk of memory in a single syscall.  Such applications
    bypass the high limit and can trigger the oom-killer.
    
    To make high limit enforcement more robust, this patch makes the limit
    enforcement synchronous only if the accumulated overcharge becomes
    larger than MEMCG_CHARGE_BATCH.  So, most of the allocations would still
    be throttled on the return-to-userspace path but only the extreme
    allocations which accumulates large amount of overcharge without
    returning to the userspace will be throttled synchronously.  The value
    MEMCG_CHARGE_BATCH is a bit arbitrary but most of other places in the
    memcg codebase uses this constant therefore for now uses the same one.
    
    Link: https://lkml.kernel.org/r/20220211064917.2028469-5-shakeelb@google.comSigned-off-by: default avatarShakeel Butt <shakeelb@google.com>
    Reviewed-by: default avatarRoman Gushchin <guro@fb.com>
    Acked-by: default avatarChris Down <chris@chrisdown.name>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c9afe31e
memcontrol.c 192 KB