Documentation/mm/allocation-profiling.rst

Source file repositories/reference/linux-study-clean/Documentation/mm/allocation-profiling.rst

File Facts

System
Linux kernel
Corpus path
Documentation/mm/allocation-profiling.rst
Extension
.rst
Size
4651 bytes
Lines
115
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: documentation
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

.. SPDX-License-Identifier: GPL-2.0

===========================
MEMORY ALLOCATION PROFILING
===========================

Low overhead (suitable for production) accounting of all memory allocations,
tracked by file and line number.

Usage:
kconfig options:
- CONFIG_MEM_ALLOC_PROFILING

- CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT

- CONFIG_MEM_ALLOC_PROFILING_DEBUG
  adds warnings for allocations that weren't accounted because of a
  missing annotation

Boot parameter:
  sysctl.vm.mem_profiling={0|1|never}[,compressed]

  When set to "never", memory allocation profiling overhead is minimized and it
  cannot be enabled at runtime (sysctl becomes read-only).
  When CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT=y, default value is "1".
  When CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT=n, default value is "never".
  "compressed" optional parameter will try to store page tag references in a
  compact format, avoiding page extensions. This results in improved performance
  and memory consumption, however it might fail depending on system configuration.
  If compression fails, a warning is issued and memory allocation profiling gets
  disabled.

sysctl:
  /proc/sys/vm/mem_profiling

  1: Enable memory profiling.

  0: Disable memory profiling.

  The default value depends on CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT.

  When CONFIG_MEM_ALLOC_PROFILING_DEBUG=y, this control is read-only to avoid
  warnings produced by allocations made while profiling is disabled and freed
  when it's enabled.

Runtime info:
  /proc/allocinfo

Example output::

  root@moria-kvm:~# sort -g /proc/allocinfo|tail|numfmt --to=iec
        2.8M    22648 fs/kernfs/dir.c:615 func:__kernfs_new_node
        3.8M      953 mm/memory.c:4214 func:alloc_anon_folio
        4.0M     1010 drivers/staging/ctagmod/ctagmod.c:20 [ctagmod] func:ctagmod_start
        4.1M        4 net/netfilter/nf_conntrack_core.c:2567 func:nf_ct_alloc_hashtable
        6.0M     1532 mm/filemap.c:1919 func:__filemap_get_folio
        8.8M     2785 kernel/fork.c:307 func:alloc_thread_stack_node
         13M      234 block/blk-mq.c:3421 func:blk_mq_alloc_rqs
         14M     3520 mm/mm_init.c:2530 func:alloc_large_system_hash
         15M     3656 mm/readahead.c:247 func:page_cache_ra_unbounded
         55M     4887 mm/slub.c:2259 func:alloc_slab_page
        122M    31168 mm/page_ext.c:270 func:alloc_page_ext

Theory of operation
===================

Memory allocation profiling builds off of code tagging, which is a library for
declaring static structs (that typically describe a file and line number in
some way, hence code tagging) and then finding and operating on them at runtime,
- i.e. iterating over them to print them in debugfs/procfs.

Annotation

Implementation Notes