• S
    Revert "memcg: cleanup racy sum avoidance code" · dbb16df6
    Shakeel Butt 提交于
    This reverts commit 96e51ccf.
    
    Recently we started running the kernel with rstat infrastructure on
    production traffic and begin to see negative memcg stats values. 
    Particularly the 'sock' stat is the one which we observed having negative
    value.
    
    $ grep "sock " /mnt/memory/job/memory.stat
    sock 253952
    total_sock 18446744073708724224
    
    Re-run after couple of seconds
    
    $ grep "sock " /mnt/memory/job/memory.stat
    sock 253952
    total_sock 53248
    
    For now we are only seeing this issue on large machines (256 CPUs) and
    only with 'sock' stat.  I think the networking stack increase the stat on
    one cpu and decrease it on another cpu much more often.  So, this negative
    sock is due to rstat flusher flushing the stats on the CPU that has seen
    the decrement of sock but missed the CPU that has increments.  A typical
    race condition.
    
    For easy stable backport, revert is the most simple solution.  For long
    term solution, I am thinking of two directions.  First is just reduce the
    race window by optimizing the rstat flusher.  Second is if the reader sees
    a negative stat value, force flush and restart the stat collection. 
    Basically retry but limited.
    
    Link: https://lkml.kernel.org/r/20220817172139.3141101-1-shakeelb@google.com
    Fixes: 96e51ccf ("memcg: cleanup racy sum avoidance code")
    Signed-off-by: NShakeel Butt <shakeelb@google.com>
    Cc: "Michal Koutný" <mkoutny@suse.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Yosry Ahmed <yosryahmed@google.com>
    Cc: Greg Thelen <gthelen@google.com>
    Cc: <stable@vger.kernel.org>	[5.15]
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    dbb16df6
memcontrol.h 46.6 KB