On 3/6/24 19:24, Suren Baghdasaryan wrote: > The highest memory overhead from memory allocation profiling comes from > page_ext objects. This overhead exists even if the feature is disabled > but compiled-in. To avoid it, introduce an early boot parameter that > prevents page_ext object creation. The new boot parameter is a tri-state > with possible values of 0|1|never. When it is set to "never" the > memory allocation profiling support is disabled, and overhead is minimized > (currently no page_ext objects are allocated, in the future more overhead > might be eliminated). As a result we also lose ability to enable memory > allocation profiling at runtime (because there is no space to store > alloctag references). Runtime sysctrl becomes read-only if the early boot > parameter was set to "never". Note that the default value of this boot > parameter depends on the CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT > configuration. When CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT=n > the boot parameter is set to "never", therefore eliminating any overhead. > CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT=y results in boot parameter > being set to 1 (enabled). This allows distributions to avoid any overhead > by setting CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT=n config and > with no changes to the kernel command line. > We reuse sysctl.vm.mem_profiling boot parameter name in order to avoid > introducing yet another control. This change turns it into a tri-state > early boot parameter. > > Signed-off-by: Suren Baghdasaryan <surenb@xxxxxxxxxx> Reviewed-by: Vlastimil Babka <vbabka@xxxxxxx>