From: "David Hildenbrand (Arm)" <david@kernel.org>
To: Xiang Gao <gxxa03070307@gmail.com>, Andrii Nakryiko <andrii@kernel.org>
Cc: Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrew Morton <akpm@linux-foundation.org>,
yinchuang1@xiaomi.com, bpf@vger.kernel.org, linux-mm@kvack.org,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
Xiang Gao <gaoxiang17@xiaomi.com>,
"Lorenzo Stoakes (Arm)" <ljs@kernel.org>,
Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [RFC] bpf: account ring buffer backing pages separately from Lost RAM
Date: Mon, 17 Aug 2026 20:10:26 +0200 [thread overview]
Message-ID: <04f3ce2f-67f5-4829-9551-a69b9df29854@kernel.org> (raw)
In-Reply-To: <20260815091819.3651099-1-gaoxiang17@xiaomi.com>
On 8/15/26 11:18, Xiang Gao wrote:
> Hi,
Hi,
>
> I would like to discuss accounting BPF ring buffer backing pages in
> system-wide memory reports.
>
> BPF ring buffers allocate their data and metadata as order-0 pages directly
> from the buddy allocator, and then map those pages with vmap().
I assume there is a reason the slab isn't used, right? Are these pages mapped
into user space such that page->mapcount would get used?
Can you point me at relevant code?
>
> Because vmap() maps caller-owned pages, these backing pages are not counted
> by VmallocUsed. They are also not slab pages. As a result, most BPF ring
> buffer memory is not represented by an existing named /proc/meminfo category
> and appears as Lost RAM in Android memory reports.
>
> We measured this on an Android 6.18 kernel.
>
> Test case:
>
> 32 BPF ring buffer maps
> 16 MiB data area per map
> 512 MiB total data area
>
> Observed changes:
>
> Lost RAM: approximately +529 MiB
> VmallocUsed: approximately +2 MiB
> Slab: approximately unchanged
>
> After destroying all maps, the values returned close to baseline.
>
> The question is whether the kernel should expose the unique physical backing
> pages of live BPF ring buffers through a dedicated global counter and a
> /proc/meminfo entry, for example:
>
> BpfRingbuf: <value in kB>
This looks a bit too specific for my taste. And I think we should try to no
inflate these statistics here too much.
>
> The proposed counter would include:
>
> * ring buffer data pages;
> * metadata pages;
> * consumer and producer position pages.
>
> It would exclude:
>
> * the second virtual mapping of data pages;
> * the pages[] pointer array;
> * map metadata allocations;
> * vmap page tables.
>
> The goal is to account for the currently unclassified direct backing pages.
> Slab- and vmalloc-backed auxiliary allocations are already represented by
> existing memory categories and should not be counted again.
>
> A possible implementation is an NR_BPF_RINGBUF vmstat counter maintained by
> the ring buffer allocation and free paths, with the aggregate exposed through
> /proc/meminfo.
>
> Questions:
>
> 1. Is a dedicated BPF ring buffer counter appropriate?
I don't think so.
See [1] where we just had the same discussion for tracing buffers. For them,
Steve [2] had an idea on how to expose them more fine-grained and tracing specific.
[1] https://lore.kernel.org/r/20260810094025.136705-1-gaoxiang17@xiaomi.com
[2] https://lore.kernel.org/r/20260810105710.6ee5e493@gandalf.local.home
> 2. Should this be represented as an NR_* vmstat counter?
I don't think so.
> 3. Is /proc/meminfo an acceptable interface for this information?
Again, I don't think so. "Lost RAM" really is just "excessive memory allocated
by some other subsystem".
I agree that some users might want to figure out what is consuming that much
memory, but I don't think growing /proc/meminfo in that way is really what we want.
> 4. Is counting only unique physical backing pages the correct accounting unit?
I'd assume the "It would exclude" part above should not be accounted there, if
that's what you mean.
--
Cheers,
David
next prev parent reply other threads:[~2026-08-17 18:10 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-15 9:18 [RFC] bpf: account ring buffer backing pages separately from Lost RAM Xiang Gao
2026-08-17 18:10 ` David Hildenbrand (Arm) [this message]
2026-08-17 18:22 ` Andrii Nakryiko
[not found] ` <8d2e20842c24460296e4c83e6dc0dde3@xiaomi.com>
2026-08-19 17:24 ` [External Mail]Re: " Andrii Nakryiko
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=04f3ce2f-67f5-4829-9551-a69b9df29854@kernel.org \
--to=david@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=gaoxiang17@xiaomi.com \
--cc=gxxa03070307@gmail.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=rostedt@goodmis.org \
--cc=yinchuang1@xiaomi.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox