|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once |
|
|
#ifndef MIMALLOC_STATS_H |
|
|
#define MIMALLOC_STATS_H |
|
|
|
|
|
#include <mimalloc.h> |
|
|
#include <stdint.h> |
|
|
|
|
|
#define MI_STAT_VERSION 1 |
|
|
|
|
|
|
|
|
typedef struct mi_stat_count_s { |
|
|
int64_t total; |
|
|
int64_t peak; |
|
|
int64_t current; |
|
|
} mi_stat_count_t; |
|
|
|
|
|
|
|
|
typedef struct mi_stat_counter_s { |
|
|
int64_t total; |
|
|
} mi_stat_counter_t; |
|
|
|
|
|
#define MI_STAT_FIELDS() \ |
|
|
MI_STAT_COUNT(pages) \ |
|
|
MI_STAT_COUNT(reserved) \ |
|
|
MI_STAT_COUNT(committed) \ |
|
|
MI_STAT_COUNT(reset) \ |
|
|
MI_STAT_COUNT(purged) \ |
|
|
MI_STAT_COUNT(page_committed) \ |
|
|
MI_STAT_COUNT(pages_abandoned) \ |
|
|
MI_STAT_COUNT(threads) \ |
|
|
MI_STAT_COUNT(malloc_normal) \ |
|
|
MI_STAT_COUNT(malloc_huge) \ |
|
|
MI_STAT_COUNT(malloc_requested) \ |
|
|
\ |
|
|
MI_STAT_COUNTER(mmap_calls) \ |
|
|
MI_STAT_COUNTER(commit_calls) \ |
|
|
MI_STAT_COUNTER(reset_calls) \ |
|
|
MI_STAT_COUNTER(purge_calls) \ |
|
|
MI_STAT_COUNTER(arena_count) \ |
|
|
MI_STAT_COUNTER(malloc_normal_count) \ |
|
|
MI_STAT_COUNTER(malloc_huge_count) \ |
|
|
MI_STAT_COUNTER(malloc_guarded_count) \ |
|
|
\ |
|
|
\ |
|
|
MI_STAT_COUNTER(arena_rollback_count) \ |
|
|
MI_STAT_COUNTER(arena_purges) \ |
|
|
MI_STAT_COUNTER(pages_extended) \ |
|
|
MI_STAT_COUNTER(pages_retire) \ |
|
|
MI_STAT_COUNTER(page_searches) \ |
|
|
\ |
|
|
MI_STAT_COUNT(segments) \ |
|
|
MI_STAT_COUNT(segments_abandoned) \ |
|
|
MI_STAT_COUNT(segments_cache) \ |
|
|
MI_STAT_COUNT(_segments_reserved) \ |
|
|
\ |
|
|
MI_STAT_COUNTER(pages_reclaim_on_alloc) \ |
|
|
MI_STAT_COUNTER(pages_reclaim_on_free) \ |
|
|
MI_STAT_COUNTER(pages_reabandon_full) \ |
|
|
MI_STAT_COUNTER(pages_unabandon_busy_wait) \ |
|
|
|
|
|
|
|
|
|
|
|
#define MI_BIN_HUGE (73U) |
|
|
#define MI_STAT_COUNT(stat) mi_stat_count_t stat; |
|
|
#define MI_STAT_COUNTER(stat) mi_stat_counter_t stat; |
|
|
|
|
|
typedef struct mi_stats_s |
|
|
{ |
|
|
int version; |
|
|
|
|
|
MI_STAT_FIELDS() |
|
|
|
|
|
|
|
|
mi_stat_count_t _stat_reserved[4]; |
|
|
mi_stat_counter_t _stat_counter_reserved[4]; |
|
|
|
|
|
|
|
|
mi_stat_count_t malloc_bins[MI_BIN_HUGE+1]; |
|
|
mi_stat_count_t page_bins[MI_BIN_HUGE+1]; |
|
|
} mi_stats_t; |
|
|
|
|
|
#undef MI_STAT_COUNT |
|
|
#undef MI_STAT_COUNTER |
|
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
extern "C" { |
|
|
#endif |
|
|
|
|
|
mi_decl_export void mi_stats_get( size_t stats_size, mi_stats_t* stats ) mi_attr_noexcept; |
|
|
mi_decl_export char* mi_stats_get_json( size_t buf_size, char* buf ) mi_attr_noexcept; |
|
|
|
|
|
#ifdef __cplusplus |
|
|
} |
|
|
#endif |
|
|
|
|
|
#endif |
|
|
|