lkml.org 
[lkml]   [2020]   [Jun]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v6 05/19] mm: memcontrol: decouple reference counting from page accounting
    On Mon, Jun 8, 2020 at 4:07 PM Roman Gushchin <guro@fb.com> wrote:
    >
    > From: Johannes Weiner <hannes@cmpxchg.org>
    >
    > The reference counting of a memcg is currently coupled directly to how
    > many 4k pages are charged to it. This doesn't work well with Roman's
    > new slab controller, which maintains pools of objects and doesn't want
    > to keep an extra balance sheet for the pages backing those objects.
    >
    > This unusual refcounting design (reference counts usually track
    > pointers to an object) is only for historical reasons: memcg used to
    > not take any css references and simply stalled offlining until all
    > charges had been reparented and the page counters had dropped to
    > zero. When we got rid of the reparenting requirement, the simple
    > mechanical translation was to take a reference for every charge.
    >
    > More historical context can be found in commit e8ea14cc6ead ("mm:
    > memcontrol: take a css reference for each charged page"),
    > commit 64f219938941 ("mm: memcontrol: remove obsolete kmemcg pinning
    > tricks") and commit b2052564e66d ("mm: memcontrol: continue cache
    > reclaim from offlined groups").
    >
    > The new slab controller exposes the limitations in this scheme, so
    > let's switch it to a more idiomatic reference counting model based on
    > actual kernel pointers to the memcg:
    >
    > - The per-cpu stock holds a reference to the memcg its caching
    >
    > - User pages hold a reference for their page->mem_cgroup. Transparent
    > huge pages will no longer acquire tail references in advance, we'll
    > get them if needed during the split.
    >
    > - Kernel pages hold a reference for their page->mem_cgroup
    >
    > - Pages allocated in the root cgroup will acquire and release css
    > references for simplicity. css_get() and css_put() optimize that.
    >
    > - The current memcg_charge_slab() already hacked around the per-charge
    > references; this change gets rid of that as well.
    >
    > Roman:
    > 1) Rebased on top of the current mm tree: added css_get() in
    > mem_cgroup_charge(), dropped mem_cgroup_try_charge() part
    > 2) I've reformatted commit references in the commit log to make
    > checkpatch.pl happy.
    >
    > Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
    > Signed-off-by: Roman Gushchin <guro@fb.com>
    > Acked-by: Roman Gushchin <guro@fb.com>

    Reviewed-by: Shakeel Butt <shakeelb@google.com>

    \
     
     \ /
      Last update: 2020-06-19 03:32    [W:4.142 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site