[RFC 4/4] docs: add description of debugfs files for SLUB cache

From: glittao
Date: Tue Jun 08 2021 - 04:45:37 EST


From: Oliver Glitta <glittao@xxxxxxxxx>

Add description of debugfs files alloc_traces, free_traces
and all_objects to SLUB cache documentation.

Signed-off-by: Oliver Glitta <glittao@xxxxxxxxx>
---
Documentation/vm/slub.rst | 109 ++++++++++++++++++++++++++++++++++++++
1 file changed, 109 insertions(+)

diff --git a/Documentation/vm/slub.rst b/Documentation/vm/slub.rst
index 03f294a638bd..2280d74d395c 100644
--- a/Documentation/vm/slub.rst
+++ b/Documentation/vm/slub.rst
@@ -384,5 +384,114 @@ c) Execute ``slabinfo-gnuplot.sh`` in '-t' mode, passing all of the
40,60`` range will plot only samples collected between 40th and
60th seconds).

+
+DebugFS files for SLUB
+======================
+
+For more debug information about current state of SLUB caches
+with the user tracking debug option enabled, debugfs files
+are available. There are 3 types of these files
+with different debug information:
+
+1. alloc_traces::
+
+ Prints information about unique allocation traces of
+ the currently allocated objects together with their frequency.
+ Output sorted by frequency of use.
+
+ Information on output:
+ Number of uses, allocating function, minimal/average/maximal jiffies since alloc,
+ pid of the process, allocated by cpu and stack trace.
+
+ Example:::
+
+ 1085 populate_error_injection_list+0x97/0x110 age=166678/166680/166682 pid=1 cpus=1::
+ __slab_alloc+0x6d/0x90
+ kmem_cache_alloc_trace+0x2eb/0x300
+ populate_error_injection_list+0x97/0x110
+ init_error_injection+0x1b/0x71
+ do_one_initcall+0x5f/0x2d0
+ kernel_init_freeable+0x26f/0x2d7
+ kernel_init+0xe/0x118
+ ret_from_fork+0x22/0x30
+
+
+2. free_traces::
+
+ Prints information about unique free traces of
+ the currently free objects together with their frequency.
+ Output sorted by frequency of use.
+
+ Information on output:
+ Number of uses, freeing function, minimal/average/maximal jiffies since free,
+ pid of the process, freed by cpu and stack trace.
+
+ Example:::
+
+ 51 acpi_ut_update_ref_count+0x6a6/0x782 age=236886/237027/237772 pid=1 cpus=1
+ kfree+0x2db/0x420
+ acpi_ut_update_ref_count+0x6a6/0x782
+ acpi_ut_update_object_reference+0x1ad/0x234
+ acpi_ut_remove_reference+0x7d/0x84
+ acpi_rs_get_prt_method_data+0x97/0xd6
+ acpi_get_irq_routing_table+0x82/0xc4
+ acpi_pci_irq_find_prt_entry+0x8e/0x2e0
+ acpi_pci_irq_lookup+0x3a/0x1e0
+ acpi_pci_irq_enable+0x77/0x240
+ pcibios_enable_device+0x39/0x40
+ do_pci_enable_device.part.0+0x5d/0xe0
+ pci_enable_device_flags+0xfc/0x120
+ pci_enable_device+0x13/0x20
+ virtio_pci_probe+0x9e/0x170
+ local_pci_probe+0x48/0x80
+ pci_device_probe+0x105/0x1c0
+
+
+3. all_objects::
+
+ Prints information about all object (both allocated and free)
+ in given SLUB cache.
+
+ Example:::
+
+ Object: 0000000042ee8b00 free
+ Last allocated: ima_queue_key+0x2f/0x1b0 age=247112 pid=1 cpu=1
+ __slab_alloc+0x6d/0x90
+ kmem_cache_alloc_trace+0x2eb/0x300
+ ima_queue_key+0x2f/0x1b0
+ ima_post_key_create_or_update+0x46/0x80
+ key_create_or_update+0x383/0x5b0
+ load_certificate_list+0x75/0xa0
+ load_system_certificate_list+0x2f/0x31
+ do_one_initcall+0x5f/0x2d0
+ kernel_init_freeable+0x26f/0x2d7
+ kernel_init+0xe/0x118
+ ret_from_fork+0x22/0x30
+ Last free: ima_process_queued_keys.part.0+0x84/0xf0 age=170962 pid=137 cpu=1
+ kfree+0x2db/0x420
+ ima_process_queued_keys.part.0+0x84/0xf0
+ ima_keys_handler+0x57/0x60
+ process_one_work+0x2a5/0x590
+ worker_thread+0x52/0x3f0
+ kthread+0x140/0x160
+ ret_from_fork+0x22/0x30
+
+ Information on output:
+
+ a) Object: <address> allocated/free
+ There is address of object and information whether object is
+ allocated or free.
+
+ b) Last allocated: <address os user> age=<jiffies since alloc> pid=<pid of
+ the process> cpu=<allocated by cpu>
+
+ c) Alloc stacktrace
+
+ d) Last free: <address of user> age=<jiffies since freed> pid=<pid of
+ the process> cpu=<freed by cpu>
+
+ e) Free stacktrace
+
+
Christoph Lameter, May 30, 2007
Sergey Senozhatsky, October 23, 2015
--
2.31.1.272.g89b43f80a5