Stats printing: Convert arena large stats to use emitter.
This completes the conversion; we now have only structured text output.
This commit is contained in:
parent
4eed989bbf
commit
4c36cd2cc5
107
src/stats.c
107
src/stats.c
@ -408,21 +408,47 @@ stats_arena_bins_print(emitter_t *emitter, bool mutex, unsigned i) {
|
||||
}
|
||||
|
||||
static void
|
||||
stats_arena_lextents_print(void (*write_cb)(void *, const char *),
|
||||
void *cbopaque, bool json, unsigned i) {
|
||||
stats_arena_lextents_print(emitter_t *emitter, unsigned i) {
|
||||
unsigned nbins, nlextents, j;
|
||||
bool in_gap, in_gap_prev;
|
||||
|
||||
CTL_GET("arenas.nbins", &nbins, unsigned);
|
||||
CTL_GET("arenas.nlextents", &nlextents, unsigned);
|
||||
if (json) {
|
||||
malloc_cprintf(write_cb, cbopaque,
|
||||
"\t\t\t\t\"lextents\": [\n");
|
||||
} else {
|
||||
malloc_cprintf(write_cb, cbopaque,
|
||||
"large: size ind allocated nmalloc"
|
||||
" ndalloc nrequests curlextents\n");
|
||||
}
|
||||
|
||||
emitter_row_t header_row;
|
||||
emitter_row_init(&header_row);
|
||||
emitter_row_t row;
|
||||
emitter_row_init(&row);
|
||||
|
||||
#define COL(name, left_or_right, col_width, etype) \
|
||||
emitter_col_t header_##name; \
|
||||
emitter_col_init(&header_##name, &header_row); \
|
||||
header_##name.justify = emitter_justify_##left_or_right; \
|
||||
header_##name.width = col_width; \
|
||||
header_##name.type = emitter_type_title; \
|
||||
header_##name.str_val = #name; \
|
||||
\
|
||||
emitter_col_t col_##name; \
|
||||
emitter_col_init(&col_##name, &row); \
|
||||
col_##name.justify = emitter_justify_##left_or_right; \
|
||||
col_##name.width = col_width; \
|
||||
col_##name.type = emitter_type_##etype;
|
||||
|
||||
COL(size, right, 20, size)
|
||||
COL(ind, right, 4, unsigned)
|
||||
COL(allocated, right, 13, size)
|
||||
COL(nmalloc, right, 13, uint64)
|
||||
COL(ndalloc, right, 13, uint64)
|
||||
COL(nrequests, right, 13, uint64)
|
||||
COL(curlextents, right, 13, size)
|
||||
#undef COL
|
||||
|
||||
/* As with bins, we label the large extents table. */
|
||||
header_size.width -= 6;
|
||||
emitter_table_printf(emitter, "large:");
|
||||
emitter_table_row(emitter, &header_row);
|
||||
emitter_json_arr_begin(emitter, "lextents");
|
||||
|
||||
for (j = 0, in_gap = false; j < nlextents; j++) {
|
||||
uint64_t nmalloc, ndalloc, nrequests;
|
||||
size_t lextent_size, curlextents;
|
||||
@ -436,38 +462,35 @@ stats_arena_lextents_print(void (*write_cb)(void *, const char *),
|
||||
in_gap_prev = in_gap;
|
||||
in_gap = (nrequests == 0);
|
||||
|
||||
if (!json && in_gap_prev && !in_gap) {
|
||||
malloc_cprintf(write_cb, cbopaque,
|
||||
if (in_gap_prev && !in_gap) {
|
||||
emitter_table_printf(emitter,
|
||||
" ---\n");
|
||||
}
|
||||
|
||||
CTL_M2_GET("arenas.lextent.0.size", j, &lextent_size, size_t);
|
||||
CTL_M2_M4_GET("stats.arenas.0.lextents.0.curlextents", i, j,
|
||||
&curlextents, size_t);
|
||||
if (json) {
|
||||
malloc_cprintf(write_cb, cbopaque,
|
||||
"\t\t\t\t\t{\n"
|
||||
"\t\t\t\t\t\t\"curlextents\": %zu\n"
|
||||
"\t\t\t\t\t}%s\n",
|
||||
curlextents,
|
||||
(j + 1 < nlextents) ? "," : "");
|
||||
} else if (!in_gap) {
|
||||
malloc_cprintf(write_cb, cbopaque,
|
||||
"%20zu %3u %12zu %12"FMTu64" %12"FMTu64
|
||||
" %12"FMTu64" %12zu\n",
|
||||
lextent_size, nbins + j,
|
||||
curlextents * lextent_size, nmalloc, ndalloc,
|
||||
nrequests, curlextents);
|
||||
|
||||
emitter_json_arr_obj_begin(emitter);
|
||||
emitter_json_kv(emitter, "curlextents", emitter_type_size,
|
||||
&curlextents);
|
||||
emitter_json_arr_obj_end(emitter);
|
||||
|
||||
col_size.size_val = lextent_size;
|
||||
col_ind.unsigned_val = nbins + j;
|
||||
col_allocated.size_val = curlextents * lextent_size;
|
||||
col_nmalloc.uint64_val = nmalloc;
|
||||
col_ndalloc.uint64_val = ndalloc;
|
||||
col_nrequests.uint64_val = nrequests;
|
||||
col_curlextents.size_val = curlextents;
|
||||
|
||||
if (!in_gap) {
|
||||
emitter_table_row(emitter, &row);
|
||||
}
|
||||
}
|
||||
if (json) {
|
||||
malloc_cprintf(write_cb, cbopaque,
|
||||
"\t\t\t\t]\n");
|
||||
} else {
|
||||
if (in_gap) {
|
||||
malloc_cprintf(write_cb, cbopaque,
|
||||
" ---\n");
|
||||
}
|
||||
emitter_json_arr_end(emitter); /* Close "lextents". */
|
||||
if (in_gap) {
|
||||
emitter_table_printf(emitter, " ---\n");
|
||||
}
|
||||
}
|
||||
|
||||
@ -513,11 +536,6 @@ stats_arena_print(emitter_t *emitter, unsigned i, bool bins, bool large,
|
||||
size_t tcache_bytes;
|
||||
uint64_t uptime;
|
||||
|
||||
/* These should be removed once the emitter conversion is done. */
|
||||
void (*write_cb)(void *, const char *) = emitter->write_cb;
|
||||
void *cbopaque = emitter->cbopaque;
|
||||
bool json = (emitter->output == emitter_output_json);
|
||||
|
||||
CTL_GET("arenas.page", &page, size_t);
|
||||
|
||||
CTL_M2_GET("stats.arenas.0.nthreads", i, &nthreads, unsigned);
|
||||
@ -799,17 +817,8 @@ stats_arena_print(emitter_t *emitter, unsigned i, bool bins, bool large,
|
||||
if (bins) {
|
||||
stats_arena_bins_print(emitter, mutex, i);
|
||||
}
|
||||
|
||||
/* Emitter conversion point. */
|
||||
if (json) {
|
||||
if (large) {
|
||||
malloc_cprintf(write_cb, cbopaque, ",\n");
|
||||
} else {
|
||||
malloc_cprintf(write_cb, cbopaque, "\n");
|
||||
}
|
||||
}
|
||||
if (large) {
|
||||
stats_arena_lextents_print(write_cb, cbopaque, json, i);
|
||||
stats_arena_lextents_print(emitter, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user