Re: [PATCH v2 6/6] alloc_tag: config to store page allocation tag refs in page flags

From: Andrew Morton
Date: Mon Sep 02 2024 - 01:16:49 EST


On Sun, 1 Sep 2024 21:41:28 -0700 Suren Baghdasaryan <surenb@xxxxxxxxxx> wrote:

> Add CONFIG_PGALLOC_TAG_USE_PAGEFLAGS to store allocation tag
> references directly in the page flags. This removes dependency on
> page_ext and results in better performance for page allocations as
> well as reduced page_ext memory overhead.
> CONFIG_PGALLOC_TAG_REF_BITS controls the number of bits required
> to be available in the page flags to store the references. If the
> number of page flag bits is insufficient, the build will fail and
> either CONFIG_PGALLOC_TAG_REF_BITS would have to be lowered or
> CONFIG_PGALLOC_TAG_USE_PAGEFLAGS should be disabled.
>
> ...
>
> +config PGALLOC_TAG_USE_PAGEFLAGS
> + bool "Use pageflags to encode page allocation tag reference"
> + default n
> + depends on MEM_ALLOC_PROFILING
> + help
> + When set, page allocation tag references are encoded inside page
> + flags, otherwise they are encoded in page extensions.
> +
> + Setting this flag reduces memory and performance overhead of memory
> + allocation profiling but also limits how many allocations can be
> + tagged. The number of bits is set by PGALLOC_TAG_USE_PAGEFLAGS and
> + they must fit in the page flags field.

Again. Please put yourself in the position of one of the all-minus-two
people in this world who aren't kernel-memory-profiling-developers.
How the heck are they to decide whether or not to enable this? OK, 59%
of them are likely to say "yes" because reasons. But then what? How
are they to determine whether it was the correct choice for them? If
we don't tell them, who will?

> config PGALLOC_TAG_REF_BITS
> int "Number of bits for page allocation tag reference (10-64)"
> range 10 64
> - default "64"
> + default "16" if PGALLOC_TAG_USE_PAGEFLAGS
> + default "64" if !PGALLOC_TAG_USE_PAGEFLAGS
> depends on MEM_ALLOC_PROFILING
> help
> Number of bits used to encode a page allocation tag reference.
> @@ -1011,6 +1027,13 @@ config PGALLOC_TAG_REF_BITS
> Smaller number results in less memory overhead but limits the number of
> allocations which can be tagged (including allocations from modules).
>
> + If PGALLOC_TAG_USE_PAGEFLAGS is set, the number of requested bits should
> + fit inside the page flags.

What does "should fit" mean? "It is your responsibility to make it
fit"? "We think it will fit but we aren't really sure"?

> + If PGALLOC_TAG_USE_PAGEFLAGS is not set, the number of bits used to store
> + a reference is rounded up to the closest basic type. If set higher than 32,
> + a direct pointer to the allocation tag is stored for performance reasons.
> +

We shouldn't be offering things like this to our users. If we cannot decide, how
can they?