• Roman Gushchin's avatar
    mm: memcg: prepare for byte-sized vmstat items · ea426c2a
    Roman Gushchin authored
    To implement per-object slab memory accounting, we need to convert slab
    vmstat counters to bytes.  Actually, out of 4 levels of counters: global,
    per-node, per-memcg and per-lruvec only two last levels will require
    byte-sized counters.  It's because global and per-node counters will be
    counting the number of slab pages, and per-memcg and per-lruvec will be
    counting the amount of memory taken by charged slab objects.
    
    Converting all vmstat counters to bytes or even all slab counters to bytes
    would introduce an additional overhead.  So instead let's store global and
    per-node counters in pages, and memcg and lruvec counters in bytes.
    
    To make the API clean all access helpers (both on the read and write
    sides) are dealing with bytes.
    
    To avoid back-and-forth conversions a new flavor of read-side helpers is
    introduced, which always returns values in pages: node_page_state_pages()
    and global_node_page_state_pages().
    
    Actually new helpers are just reading raw values.  Old helpers are simple
    wrappers, which will complain on an attempt to read byte value, because at
    the moment no one actually needs bytes.
    
    Thanks to Johannes Weiner for the idea of having the byte-sized API on top
    of the page-sized internal storage.
    Signed-off-by: default avatarRoman Gushchin <guro@fb.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Reviewed-by: default avatarShakeel Butt <shakeelb@google.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Tejun Heo <tj@kernel.org>
    Link: http://lkml.kernel.org/r/20200623174037.3951353-3-guro@fb.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    ea426c2a
memcontrol.c 186 KB