54 heap =
vec_elt (memory_heaps_vec, index);
73 for (i = 0; i <= max1; i++)
88 u32 heap_index =
vec_len (memory_heaps_vec) - 1;
135 f64 this_vector_rate;
143 cb[0] = this_vector_rate;
153 f64 vector_rate = 0.0;
157 f64 this_vector_rate;
164 vector_rate += this_vector_rate;
168 vector_rate /= (
f64) (i > 1 ? i - 1 : 1);
169 e->
value = vector_rate;
177 u8 *s =
format (0,
"/sys/vector_rate");
185 s =
format (0,
"/sys/vector_rate_per_worker");
void vlib_stats_register_mem_heap(clib_mem_heap_t *heap)
stat_segment_main_t stat_segment_main
void clib_mem_get_heap_usage(clib_mem_heap_t *heap, clib_mem_usage_t *usage)
uword bytes_free_reclaimed
stat_segment_directory_entry_t * directory_vector
static clib_mem_heap_t * clib_mem_set_heap(clib_mem_heap_t *heap)
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
#define vec_validate_aligned(V, I, A)
Make sure vector is long enough for given index (no header, specified alignment)
void vlib_stats_register_symlink(void *oldheap, u8 *name, u32 index1, u32 index2, u8 lock)
void stat_segment_poll_add(u32 vector_index, stat_segment_update_fn update_fn, u32 caller_index, u32 interval)
uint64_t counter_t
64bit counters
static void stat_provider_vector_rate_per_thread_update_fn(stat_segment_directory_entry_t *e, u32 index)
description fragment has unexpected format
static counter_t ** stat_validate_counter_vector3(counter_t **counters, u32 max1, u32 max2)
void vlib_stat_segment_unlock(void)
clib_mem_heap_t ** memory_heaps_vec
void stat_provider_register_vector_rate(u32 num_workers)
Optimized thread-safe counters.
sll srl srl sll sra u16x4 i
#define vec_free(V)
Free vector's memory (no header).
static void vlib_clear_internal_node_vector_rate(vlib_main_t *vm)
void vlib_stat_segment_lock(void)
static void stat_provider_vector_rate_update_fn(stat_segment_directory_entry_t *e, u32 index)
static u32 vlib_get_n_threads()
#define vec_elt(v, i)
Get vector value at index i.
u32 stat_segment_new_entry(u8 *name, stat_directory_type_t t)
static vlib_main_t * vlib_get_main_by_index(u32 thread_index)
static void stat_provider_mem_usage_update_fn(stat_segment_directory_entry_t *e, u32 index)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
#define CLIB_CACHE_LINE_BYTES
static f64 vlib_internal_node_vector_rate(vlib_main_t *vm)
enum @581 stat_mem_usage_e
CLIB vectors are ubiquitous dynamically resized arrays with by user defined "headers".