All of lore.kernel.org
 help / color / mirror / Atom feed
From: Shakeel Butt <shakeelb@google.com>
To: Muchun Song <songmuchun@bytedance.com>
Cc: Roman Gushchin <guro@fb.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Michal Hocko <mhocko@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Vladimir Davydov <vdavydov.dev@gmail.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Linux MM <linux-mm@kvack.org>,
	Xiongchun duan <duanxiongchun@bytedance.com>
Subject: Re: [PATCH v5 5/7] mm: memcontrol: use obj_cgroup APIs to charge kmem pages
Date: Fri, 19 Mar 2021 11:27:54 -0700	[thread overview]
Message-ID: <CALvZod6PbwSm6Jtz-TqfUb=1-ATX6gAmwXVvn3HUcEBAjKt3sQ@mail.gmail.com> (raw)
In-Reply-To: <20210319163821.20704-6-songmuchun@bytedance.com>

On Fri, Mar 19, 2021 at 9:39 AM Muchun Song <songmuchun@bytedance.com> wrote:
>
> Since Roman series "The new cgroup slab memory controller" applied. All
> slab objects are charged via the new APIs of obj_cgroup. The new APIs
> introduce a struct obj_cgroup to charge slab objects. It prevents
> long-living objects from pinning the original memory cgroup in the memory.
> But there are still some corner objects (e.g. allocations larger than
> order-1 page on SLUB) which are not charged via the new APIs. Those
> objects (include the pages which are allocated from buddy allocator
> directly) are charged as kmem pages which still hold a reference to
> the memory cgroup.
>
> We want to reuse the obj_cgroup APIs to charge the kmem pages.
> If we do that, we should store an object cgroup pointer to
> page->memcg_data for the kmem pages.
>
> Finally, page->memcg_data will have 3 different meanings.
>
>   1) For the slab pages, page->memcg_data points to an object cgroups
>      vector.
>
>   2) For the kmem pages (exclude the slab pages), page->memcg_data
>      points to an object cgroup.
>
>   3) For the user pages (e.g. the LRU pages), page->memcg_data points
>      to a memory cgroup.
>
> We do not change the behavior of page_memcg() and page_memcg_rcu().
> They are also suitable for LRU pages and kmem pages. Why?
>
> Because memory allocations pinning memcgs for a long time - it exists
> at a larger scale and is causing recurring problems in the real world:
> page cache doesn't get reclaimed for a long time, or is used by the
> second, third, fourth, ... instance of the same job that was restarted
> into a new cgroup every time. Unreclaimable dying cgroups pile up,
> waste memory, and make page reclaim very inefficient.
>
> We can convert LRU pages and most other raw memcg pins to the objcg
> direction to fix this problem, and then the page->memcg will always
> point to an object cgroup pointer. At that time, LRU pages and kmem
> pages will be treated the same. The implementation of page_memcg()
> will remove the kmem page check.
>
> This patch aims to charge the kmem pages by using the new APIs of
> obj_cgroup. Finally, the page->memcg_data of the kmem page points to
> an object cgroup. We can use the __page_objcg() to get the object
> cgroup associated with a kmem page. Or we can use page_memcg()
> to get the memory cgroup associated with a kmem page, but caller must
> ensure that the returned memcg won't be released (e.g. acquire the
> rcu_read_lock or css_set_lock).
>
> Signed-off-by: Muchun Song <songmuchun@bytedance.com>
> Acked-by: Johannes Weiner <hannes@cmpxchg.org>

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

  reply	other threads:[~2021-03-19 18:28 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-19 16:38 [PATCH v5 0/7] Use obj_cgroup APIs to charge kmem pages Muchun Song
2021-03-19 16:38 ` [PATCH v5 1/7] mm: memcontrol: slab: fix obtain a reference to a freeing memcg Muchun Song
2021-03-19 18:26   ` Shakeel Butt
2021-03-19 18:26     ` Shakeel Butt
2021-03-22 14:46   ` Johannes Weiner
2021-03-23  9:18     ` [External] " Muchun Song
2021-03-23  9:18       ` Muchun Song
2021-03-22 18:17   ` Roman Gushchin
2021-03-19 16:38 ` [PATCH v5 2/7] mm: memcontrol: introduce obj_cgroup_{un}charge_pages Muchun Song
2021-03-19 16:38 ` [PATCH v5 3/7] mm: memcontrol: directly access page->memcg_data in mm/page_alloc.c Muchun Song
2021-03-19 16:38 ` [PATCH v5 4/7] mm: memcontrol: change ug->dummy_page only if memcg changed Muchun Song
2021-03-19 16:38 ` [PATCH v5 5/7] mm: memcontrol: use obj_cgroup APIs to charge kmem pages Muchun Song
2021-03-19 18:27   ` Shakeel Butt [this message]
2021-03-19 18:27     ` Shakeel Butt
2021-03-22 18:13   ` Roman Gushchin
2021-03-19 16:38 ` [PATCH v5 6/7] mm: memcontrol: inline __memcg_kmem_{un}charge() into obj_cgroup_{un}charge_pages() Muchun Song
2021-03-19 18:41   ` Shakeel Butt
2021-03-19 18:41     ` Shakeel Butt
2021-03-22 14:34   ` Johannes Weiner
2021-03-22 18:14   ` Roman Gushchin
2021-03-19 16:38 ` [PATCH v5 7/7] mm: memcontrol: move PageMemcgKmem to the scope of CONFIG_MEMCG_KMEM Muchun Song

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CALvZod6PbwSm6Jtz-TqfUb=1-ATX6gAmwXVvn3HUcEBAjKt3sQ@mail.gmail.com' \
    --to=shakeelb@google.com \
    --cc=akpm@linux-foundation.org \
    --cc=duanxiongchun@bytedance.com \
    --cc=guro@fb.com \
    --cc=hannes@cmpxchg.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=songmuchun@bytedance.com \
    --cc=vdavydov.dev@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.