10 VPP supports memory traces to help debug (suspected) memory leaks. Each
11 allocation/deallocation is instrumented so that the number of allocations and
12 current global allocated size is maintained for each unique allocation stack
15 Looking at a memory trace can help diagnose where memory is (over-)used, and
16 comparing memory traces at different point in time can help diagnose if and
17 where memory leaks happen.
19 To enable memory traces on main-heap:
21 .. code-block:: console
22 $ vppctl memory-trace on main-heap
24 To dump memory traces for analysis:
26 .. code-block:: console
27 $ vppctl show memory-trace on main-heap
29 base 0x7fffb6422000, size 1g, locked, unmap-on-destroy, name 'main heap'
30 page stats: page-size 4K, total 262144, mapped 30343, not-mapped 231801
31 numa 0: 30343 pages, 118.53m bytes
32 total: 1023.99M, used: 115.49M, free: 908.50M, trimmable: 908.48M
33 free chunks 451 free fastbin blks 0
34 max total allocated 1023.99M
36 Bytes Count Sample Traceback
37 31457440 1 0x7fffbb31ad00 clib_mem_alloc_aligned_at_offset + 0x80
38 clib_mem_alloc_aligned + 0x26
39 alloc_aligned_8_8 + 0xe1
40 clib_bihash_instantiate_8_8 + 0x76
41 clib_bihash_init2_8_8 + 0x2ec
42 clib_bihash_init_8_8 + 0x6a
43 l2fib_table_init + 0x54
44 set_int_l2_mode + 0x89
46 vlib_cli_dispatch_sub_commands + 0xeee
47 vlib_cli_dispatch_sub_commands + 0xc62
48 vlib_cli_dispatch_sub_commands + 0xc62
49 266768 5222 0x7fffbd79f978 clib_mem_alloc_aligned_at_offset + 0x80
50 vec_resize_allocate_memory + 0xa8
51 _vec_resize_inline + 0x240
52 unix_cli_file_add + 0x83d
53 unix_cli_listen_read_ready + 0x10b
54 linux_epoll_input_inline + 0x943
55 linux_epoll_input + 0x39
57 vlib_main_or_worker_loop + 0xbf1
66 Internal VPP memory allocations rely on VPP main-heap, however when using
67 external libraries, esp. in plugins (eg. OpenSSL library used by the IKEv2
68 plugin), those external libraries usually manages memory using the standard
69 libc malloc()/free()/... calls. This, in turn, makes use of the default
72 VPP has no knowledge of this heap and tools such as memory traces cannot be
75 In order to enable the use of standard VPP debugging tools, this library
76 replaces standard libc memory management calls with version using VPP
79 To use it, you need to use the `LD_PRELOAD` mechanism, eg.
81 .. code-block:: console
82 ~# LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libvppmem_preload.so /usr/bin/vpp -c /etc/vpp/startup.conf
84 You can then use tools such as memory traces as usual.