From: Johannes Weiner <hannes@cmpxchg.org>
To: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Christoph Hellwig <hch@lst.de>,
linux-mm@kvack.org, Michal Hocko <mhocko@kernel.org>,
Roman Gushchin <roman.gushchin@linux.dev>,
Shakeel Butt <shakeel.butt@linux.dev>,
Muchun Song <muchun.song@linux.dev>,
cgroups@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH 2/2] vmalloc: Account memcg per vmalloc
Date: Wed, 11 Dec 2024 11:09:56 -0500 [thread overview]
Message-ID: <20241211160956.GB3136251@cmpxchg.org> (raw)
In-Reply-To: <20241211043252.3295947-2-willy@infradead.org>
On Wed, Dec 11, 2024 at 04:32:50AM +0000, Matthew Wilcox (Oracle) wrote:
> Today we account each page individually to the memcg, which works well
> enough, if a little inefficiently (N atomic operations per page instead
> of N per allocation). Unfortunately, the stats can get out of sync when
> i915 calls vmap() with VM_MAP_PUT_PAGES. The pages being passed were not
> allocated by vmalloc, so the MEMCG_VMALLOC counter was never incremented.
> But it is decremented when the pages are freed with vfree().
>
> Solve all of this by tracking the memcg at the vm_struct level.
> This logic has to live in the memcontrol file as it calls several
> functions which are currently static.
>
> Fixes: b944afc9d64d (mm: add a VM_MAP_PUT_PAGES flag for vmap)
> Cc: stable@vger.kernel.org
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
> include/linux/memcontrol.h | 7 ++++++
> include/linux/vmalloc.h | 3 +++
> mm/memcontrol.c | 46 ++++++++++++++++++++++++++++++++++++++
> mm/vmalloc.c | 14 ++++++------
> 4 files changed, 63 insertions(+), 7 deletions(-)
This would work, but it seems somewhat complicated. The atomics in
memcg charging and the vmstat updates are batched, and the per-page
overhead is for the most part cheap per-cpu ops. Not an issue per se.
You could do for MEMCG_VMALLOC what you did for nr_vmalloc_pages:
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 634162271c00..a889bb04405c 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -3353,7 +3353,11 @@ void vfree(const void *addr)
struct page *page = vm->pages[i];
BUG_ON(!page);
- mod_memcg_page_state(page, MEMCG_VMALLOC, -1);
+
+ /* Pages were allocated elsewhere */
+ if (!(vm->flags & VM_MAP_PUT_PAGES))
+ mod_memcg_page_state(page, MEMCG_VMALLOC, -1);
+
/*
* High-order allocs for huge vmallocs are split, so
* can be freed as an array of order-0 allocations
next prev parent reply other threads:[~2024-12-11 16:10 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-11 4:32 [PATCH 1/2] vmalloc: Fix accounting of VmallocUsed with i915 Matthew Wilcox (Oracle)
2024-12-11 4:32 ` [PATCH 2/2] vmalloc: Account memcg per vmalloc Matthew Wilcox (Oracle)
2024-12-11 5:06 ` Shakeel Butt
2024-12-11 16:09 ` Johannes Weiner [this message]
2024-12-11 16:50 ` Matthew Wilcox
2024-12-11 19:32 ` Shakeel Butt
2024-12-11 20:20 ` Matthew Wilcox
2024-12-11 20:58 ` Shakeel Butt
2024-12-11 21:08 ` Matthew Wilcox
2024-12-11 22:17 ` kernel test robot
2024-12-11 23:36 ` kernel test robot
2024-12-11 15:32 ` [PATCH 1/2] vmalloc: Fix accounting of VmallocUsed with i915 Johannes Weiner
2024-12-11 20:45 ` Shakeel Butt
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=20241211160956.GB3136251@cmpxchg.org \
--to=hannes@cmpxchg.org \
--cc=akpm@linux-foundation.org \
--cc=cgroups@vger.kernel.org \
--cc=hch@lst.de \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=muchun.song@linux.dev \
--cc=roman.gushchin@linux.dev \
--cc=shakeel.butt@linux.dev \
--cc=stable@vger.kernel.org \
--cc=willy@infradead.org \
/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.