LCOV - code coverage report
Current view: top level - vlib/stats - provider_mem.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 25 25 100.0 %
Date: 2023-07-05 22:20:52 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: Apache-2.0
       2             :  * Copyright(c) 2022 Cisco Systems, Inc.
       3             :  */
       4             : 
       5             : #include <vlib/vlib.h>
       6             : #include <vlib/unix/unix.h>
       7             : #include <vlib/stats/stats.h>
       8             : 
       9             : static clib_mem_heap_t **memory_heaps_vec;
      10             : 
      11             : enum
      12             : {
      13             :   STAT_MEM_TOTAL = 0,
      14             :   STAT_MEM_USED,
      15             :   STAT_MEM_FREE,
      16             :   STAT_MEM_USED_MMAP,
      17             :   STAT_MEM_TOTAL_ALLOC,
      18             :   STAT_MEM_FREE_CHUNKS,
      19             :   STAT_MEM_RELEASABLE,
      20             : } stat_mem_usage_e;
      21             : 
      22             : /*
      23             :  * Called from the stats periodic process to update memory counters.
      24             :  */
      25             : static void
      26        2406 : stat_provider_mem_usage_update_fn (vlib_stats_collector_data_t *d)
      27             : {
      28             :   clib_mem_usage_t usage;
      29             :   clib_mem_heap_t *heap;
      30        2406 :   counter_t **counters = d->entry->data;
      31             :   counter_t *cb;
      32             : 
      33        2406 :   heap = vec_elt (memory_heaps_vec, d->private_data);
      34        2406 :   clib_mem_get_heap_usage (heap, &usage);
      35        2406 :   cb = counters[0];
      36        2406 :   cb[STAT_MEM_TOTAL] = usage.bytes_total;
      37        2406 :   cb[STAT_MEM_USED] = usage.bytes_used;
      38        2406 :   cb[STAT_MEM_FREE] = usage.bytes_free;
      39        2406 :   cb[STAT_MEM_USED_MMAP] = usage.bytes_used_mmap;
      40        2406 :   cb[STAT_MEM_TOTAL_ALLOC] = usage.bytes_max;
      41        2406 :   cb[STAT_MEM_FREE_CHUNKS] = usage.bytes_free_reclaimed;
      42        2406 :   cb[STAT_MEM_RELEASABLE] = usage.bytes_overhead;
      43        2406 : }
      44             : 
      45             : /*
      46             :  * Provide memory heap counters.
      47             :  * Two dimensional array of heap index and per-heap gauges.
      48             :  */
      49             : void
      50        1118 : vlib_stats_register_mem_heap (clib_mem_heap_t *heap)
      51             : {
      52        1118 :   vlib_stats_collector_reg_t r = {};
      53             :   u32 idx;
      54             : 
      55        1118 :   vec_add1 (memory_heaps_vec, heap);
      56             : 
      57        1118 :   r.entry_index = idx = vlib_stats_add_counter_vector ("/mem/%s", heap->name);
      58        1118 :   vlib_stats_validate (idx, 0, STAT_MEM_RELEASABLE);
      59             : 
      60             :   /* Create symlink */
      61        1118 :   vlib_stats_add_symlink (idx, STAT_MEM_USED, "/mem/%s/used", heap->name);
      62        1118 :   vlib_stats_add_symlink (idx, STAT_MEM_TOTAL, "/mem/%s/total", heap->name);
      63        1118 :   vlib_stats_add_symlink (idx, STAT_MEM_FREE, "/mem/%s/free", heap->name);
      64             : 
      65        1118 :   r.private_data = vec_len (memory_heaps_vec) - 1;
      66        1118 :   r.collect_fn = stat_provider_mem_usage_update_fn;
      67        1118 :   vlib_stats_register_collector_fn (&r);
      68        1118 : }

Generated by: LCOV version 1.14