Re: [PATCH v3] alloc_tag: expose profiling and compression states
Abhishek Bapat <[email protected]> Tue, 4 Aug 2026 12:59:10 -0700
| Newsgroups | org.kvack.linux-mm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAL41Mv4aBfcNtDCA=s1saJSrK+e_FiNEin79U9WQu-Ww-g9aPA@mail.gmail.com> |
On Tue, Aug 4, 2026 at 10:28 AM Abhishek Bapat <[email protected]> wrote: > > On Mon, Aug 3, 2026 at 9:14 PM Hao Ge <[email protected]> wrote: > > > > > > On 2026/8/4 10:15, Hao Ge wrote: > > > Hi Abhishek > > > > > > > > > Subject says "profiling and compression states", but this > > > > > > patch only adds the compression sysctl. The profiling state was > > > > > > already exposed via mem_profiling and is untouched here. > > > > > > I think we should make this more precise, like: > > > > > > alloc_tag: expose boot-time compression configuration > > > > > > > > > On 2026/8/4 05:54, Abhishek Bapat wrote: > > >> Currently, userspace has limited visibility into the exact active > > >> runtime state of memory allocation profiling and its page extension > > >> compression ('sysctl.vm.mem_profiling={0|1|never}[,compressed]'). > > > > > > > > > Profiling state is already readable via mem_profiling. The gap is > > > > > > only compression. Also, as we discussed, this sysctl reports > > > > > > what the user requested at boot rather than the actual runtime state. > > > > > > > > >> While reading the sysctl provides basic on/off status, it is currently > > >> impossible for userspace to natively determine whether page-tag > > >> compression was successfully enabled without scraping dmesg boot logs. > > >> > > >> Resolve this ambiguity by exposing the active compression state by > > >> adding a new read-only sysctl `vm.mem_profiling_compressed` to output > > >> the > > >> state. > > >> > > >> v3 change: > > >> - Added documentation about the behaviour details of the new sysctl. > > >> > > >> v2 change: > > >> - Moved from displaying the state in /proc/allocinfo to a new read-only > > >> sysctl. > > > > > > > > > As this is a standalone patch, please put the v2/v3 changelog below > > > the --- line > > > > > > instead of inside the commit message. > > > > > > > > > Thanks > > > > > > Best Regards > > > > > > Hao > > > > > > > > >> Signed-off-by: Abhishek Bapat <[email protected]> > > >> --- > > >> Documentation/mm/allocation-profiling.rst | 13 +++++++++++++ > > >> mm/alloc_tag.c | 6 ++++++ > > >> 2 files changed, 19 insertions(+) > > >> > > >> diff --git a/Documentation/mm/allocation-profiling.rst > > >> b/Documentation/mm/allocation-profiling.rst > > >> index c3a28467955f..3ad1e9aacb9a 100644 > > >> --- a/Documentation/mm/allocation-profiling.rst > > >> +++ b/Documentation/mm/allocation-profiling.rst > > >> @@ -43,6 +43,19 @@ sysctl: > > >> warnings produced by allocations made while profiling is disabled > > >> and freed > > >> when it's enabled. > > >> + /proc/sys/vm/mem_profiling_compressed > > >> + > > >> + 1: Page extension compression is enabled. > > >> + > > >> + 0: Page extension compression is disabled. > > >> + > > >> + This control is read-only and reflects the compression status > > >> initialized at boot. > > >> + Note that, unlike `mem_profiling`, which represents the current > > >> state of profiling, > > >> + `mem_profiling_compressed` represents the state configured at boot > > >> time. > > > > > > Sorry, I forgot to mention this earlier. > > > > I wonder if we could remove this section: > > > > > > >> Turning off > > >> + profiling at runtime will implicitly make this sysctl effectively > > >> dormant. However, if > > >> + profiling is toggled off and then toggled on again, it will resume > > >> with compression > > >> + still enabled as long as the value of `mem_profiling_compressed` > > >> is 1. > > > > > > mem_profiling_compressed only selects the tag storage format (page flags > > vs page_ext). > > > > mem_profiling controls whether allocations are tagged at runtime. > > > > The two are independent: toggling mem_profiling on/off has no effect on > > > > compression. Only shutdown_mem_profiling() tears it down, but by then > > > > the entire allocation profiling subsystem is disabled anyway. There is > > > > no resume path. > > > > > > I added this based on Suren's comment on the previous version asking > me to explicitly describe the behaviour in the Documentation. The > original version did not contain it. But personally I do think keeping > this here makes sense. > I checked in with Suren offline and he suggested I reword the description to make it simpler to understand. I'll shortly send out a v4 patch with updated documentation. Thanks! > > >> + > > >> Runtime info: > > >> /proc/allocinfo > > >> diff --git a/mm/alloc_tag.c b/mm/alloc_tag.c > > >> index 52aece27b00e..877068241f06 100644 > > >> --- a/mm/alloc_tag.c > > >> +++ b/mm/alloc_tag.c > > >> @@ -1303,6 +1303,12 @@ static const struct ctl_table > > >> memory_allocation_profiling_sysctls[] = { > > >> .mode = 0644, > > >> .proc_handler = proc_mem_profiling_handler, > > >> }, > > >> + { > > >> + .procname = "mem_profiling_compressed", > > >> + .data = &mem_profiling_compressed, > > >> + .mode = 0444, > > >> + .proc_handler = proc_do_static_key, > > >> + }, > > >> }; > > >> static void __init sysctl_init(void) > > >> > > >> base-commit: 94f9b3980dd446b56acf1dfed649e9b32a9f3813