CTL, Stats: report HPA empty slab stats.
This commit is contained in:
parent
bf64557ed6
commit
0ea3d6307c
50
src/ctl.c
50
src/ctl.c
@ -230,18 +230,34 @@ CTL_PROTO(stats_arenas_i_hpa_shard_npurge_passes)
|
|||||||
CTL_PROTO(stats_arenas_i_hpa_shard_npurges)
|
CTL_PROTO(stats_arenas_i_hpa_shard_npurges)
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_nhugifies)
|
CTL_PROTO(stats_arenas_i_hpa_shard_nhugifies)
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_ndehugifies)
|
CTL_PROTO(stats_arenas_i_hpa_shard_ndehugifies)
|
||||||
|
|
||||||
|
/* We have a set of stats for full slabs. */
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_full_slabs_npageslabs_nonhuge)
|
CTL_PROTO(stats_arenas_i_hpa_shard_full_slabs_npageslabs_nonhuge)
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_full_slabs_npageslabs_huge)
|
CTL_PROTO(stats_arenas_i_hpa_shard_full_slabs_npageslabs_huge)
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_full_slabs_nactive_nonhuge)
|
CTL_PROTO(stats_arenas_i_hpa_shard_full_slabs_nactive_nonhuge)
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_full_slabs_nactive_huge)
|
CTL_PROTO(stats_arenas_i_hpa_shard_full_slabs_nactive_huge)
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_full_slabs_ndirty_nonhuge)
|
CTL_PROTO(stats_arenas_i_hpa_shard_full_slabs_ndirty_nonhuge)
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_full_slabs_ndirty_huge)
|
CTL_PROTO(stats_arenas_i_hpa_shard_full_slabs_ndirty_huge)
|
||||||
|
|
||||||
|
/* A parallel set for the empty slabs. */
|
||||||
|
CTL_PROTO(stats_arenas_i_hpa_shard_empty_slabs_npageslabs_nonhuge)
|
||||||
|
CTL_PROTO(stats_arenas_i_hpa_shard_empty_slabs_npageslabs_huge)
|
||||||
|
CTL_PROTO(stats_arenas_i_hpa_shard_empty_slabs_nactive_nonhuge)
|
||||||
|
CTL_PROTO(stats_arenas_i_hpa_shard_empty_slabs_nactive_huge)
|
||||||
|
CTL_PROTO(stats_arenas_i_hpa_shard_empty_slabs_ndirty_nonhuge)
|
||||||
|
CTL_PROTO(stats_arenas_i_hpa_shard_empty_slabs_ndirty_huge)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* And one for the slabs that are neither empty nor full, but indexed by how
|
||||||
|
* full they are.
|
||||||
|
*/
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j_npageslabs_nonhuge)
|
CTL_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j_npageslabs_nonhuge)
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j_npageslabs_huge)
|
CTL_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j_npageslabs_huge)
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j_nactive_nonhuge)
|
CTL_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j_nactive_nonhuge)
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j_nactive_huge)
|
CTL_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j_nactive_huge)
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j_ndirty_nonhuge)
|
CTL_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j_ndirty_nonhuge)
|
||||||
CTL_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j_ndirty_huge)
|
CTL_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j_ndirty_huge)
|
||||||
|
|
||||||
INDEX_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j)
|
INDEX_PROTO(stats_arenas_i_hpa_shard_nonfull_slabs_j)
|
||||||
CTL_PROTO(stats_arenas_i_nthreads)
|
CTL_PROTO(stats_arenas_i_nthreads)
|
||||||
CTL_PROTO(stats_arenas_i_uptime)
|
CTL_PROTO(stats_arenas_i_uptime)
|
||||||
@ -668,6 +684,21 @@ static const ctl_named_node_t stats_arenas_i_hpa_shard_full_slabs_node[] = {
|
|||||||
CTL(stats_arenas_i_hpa_shard_full_slabs_ndirty_huge)}
|
CTL(stats_arenas_i_hpa_shard_full_slabs_ndirty_huge)}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const ctl_named_node_t stats_arenas_i_hpa_shard_empty_slabs_node[] = {
|
||||||
|
{NAME("npageslabs_nonhuge"),
|
||||||
|
CTL(stats_arenas_i_hpa_shard_empty_slabs_npageslabs_nonhuge)},
|
||||||
|
{NAME("npageslabs_huge"),
|
||||||
|
CTL(stats_arenas_i_hpa_shard_empty_slabs_npageslabs_huge)},
|
||||||
|
{NAME("nactive_nonhuge"),
|
||||||
|
CTL(stats_arenas_i_hpa_shard_empty_slabs_nactive_nonhuge)},
|
||||||
|
{NAME("nactive_huge"),
|
||||||
|
CTL(stats_arenas_i_hpa_shard_empty_slabs_nactive_huge)},
|
||||||
|
{NAME("ndirty_nonhuge"),
|
||||||
|
CTL(stats_arenas_i_hpa_shard_empty_slabs_ndirty_nonhuge)},
|
||||||
|
{NAME("ndirty_huge"),
|
||||||
|
CTL(stats_arenas_i_hpa_shard_empty_slabs_ndirty_huge)}
|
||||||
|
};
|
||||||
|
|
||||||
static const ctl_named_node_t stats_arenas_i_hpa_shard_nonfull_slabs_j_node[] = {
|
static const ctl_named_node_t stats_arenas_i_hpa_shard_nonfull_slabs_j_node[] = {
|
||||||
{NAME("npageslabs_nonhuge"),
|
{NAME("npageslabs_nonhuge"),
|
||||||
CTL(stats_arenas_i_hpa_shard_nonfull_slabs_j_npageslabs_nonhuge)},
|
CTL(stats_arenas_i_hpa_shard_nonfull_slabs_j_npageslabs_nonhuge)},
|
||||||
@ -696,6 +727,8 @@ static const ctl_indexed_node_t stats_arenas_i_hpa_shard_nonfull_slabs_node[] =
|
|||||||
static const ctl_named_node_t stats_arenas_i_hpa_shard_node[] = {
|
static const ctl_named_node_t stats_arenas_i_hpa_shard_node[] = {
|
||||||
{NAME("full_slabs"), CHILD(named,
|
{NAME("full_slabs"), CHILD(named,
|
||||||
stats_arenas_i_hpa_shard_full_slabs)},
|
stats_arenas_i_hpa_shard_full_slabs)},
|
||||||
|
{NAME("empty_slabs"), CHILD(named,
|
||||||
|
stats_arenas_i_hpa_shard_empty_slabs)},
|
||||||
{NAME("nonfull_slabs"), CHILD(indexed,
|
{NAME("nonfull_slabs"), CHILD(indexed,
|
||||||
stats_arenas_i_hpa_shard_nonfull_slabs)},
|
stats_arenas_i_hpa_shard_nonfull_slabs)},
|
||||||
|
|
||||||
@ -3539,6 +3572,23 @@ CTL_RO_CGEN(config_stats, stats_arenas_i_hpa_shard_full_slabs_nactive_huge,
|
|||||||
CTL_RO_CGEN(config_stats, stats_arenas_i_hpa_shard_full_slabs_ndirty_huge,
|
CTL_RO_CGEN(config_stats, stats_arenas_i_hpa_shard_full_slabs_ndirty_huge,
|
||||||
arenas_i(mib[2])->astats->hpastats.psset_stats.full_slabs[1].ndirty, size_t);
|
arenas_i(mib[2])->astats->hpastats.psset_stats.full_slabs[1].ndirty, size_t);
|
||||||
|
|
||||||
|
/* Empty, nonhuge */
|
||||||
|
CTL_RO_CGEN(config_stats, stats_arenas_i_hpa_shard_empty_slabs_npageslabs_nonhuge,
|
||||||
|
arenas_i(mib[2])->astats->hpastats.psset_stats.empty_slabs[0].npageslabs,
|
||||||
|
size_t);
|
||||||
|
CTL_RO_CGEN(config_stats, stats_arenas_i_hpa_shard_empty_slabs_nactive_nonhuge,
|
||||||
|
arenas_i(mib[2])->astats->hpastats.psset_stats.empty_slabs[0].nactive, size_t);
|
||||||
|
CTL_RO_CGEN(config_stats, stats_arenas_i_hpa_shard_empty_slabs_ndirty_nonhuge,
|
||||||
|
arenas_i(mib[2])->astats->hpastats.psset_stats.empty_slabs[0].ndirty, size_t);
|
||||||
|
|
||||||
|
/* Empty, huge */
|
||||||
|
CTL_RO_CGEN(config_stats, stats_arenas_i_hpa_shard_empty_slabs_npageslabs_huge,
|
||||||
|
arenas_i(mib[2])->astats->hpastats.psset_stats.empty_slabs[1].npageslabs,
|
||||||
|
size_t);
|
||||||
|
CTL_RO_CGEN(config_stats, stats_arenas_i_hpa_shard_empty_slabs_nactive_huge,
|
||||||
|
arenas_i(mib[2])->astats->hpastats.psset_stats.empty_slabs[1].nactive, size_t);
|
||||||
|
CTL_RO_CGEN(config_stats, stats_arenas_i_hpa_shard_empty_slabs_ndirty_huge,
|
||||||
|
arenas_i(mib[2])->astats->hpastats.psset_stats.empty_slabs[1].ndirty, size_t);
|
||||||
|
|
||||||
/* Nonfull, nonhuge */
|
/* Nonfull, nonhuge */
|
||||||
CTL_RO_CGEN(config_stats, stats_arenas_i_hpa_shard_nonfull_slabs_j_npageslabs_nonhuge,
|
CTL_RO_CGEN(config_stats, stats_arenas_i_hpa_shard_nonfull_slabs_j_npageslabs_nonhuge,
|
||||||
|
98
src/stats.c
98
src/stats.c
@ -813,6 +813,35 @@ stats_arena_hpa_shard_print(emitter_t *emitter, unsigned i, uint64_t uptime) {
|
|||||||
size_t ndirty_nonhuge;
|
size_t ndirty_nonhuge;
|
||||||
size_t nretained_nonhuge;
|
size_t nretained_nonhuge;
|
||||||
|
|
||||||
|
size_t sec_bytes;
|
||||||
|
CTL_M2_GET("stats.arenas.0.hpa_sec_bytes", i, &sec_bytes, size_t);
|
||||||
|
emitter_kv(emitter, "sec_bytes", "Bytes in small extent cache",
|
||||||
|
emitter_type_size, &sec_bytes);
|
||||||
|
|
||||||
|
/* First, global stats. */
|
||||||
|
emitter_table_printf(emitter,
|
||||||
|
"HPA shard stats:\n"
|
||||||
|
" Purge passes: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
||||||
|
" Purges: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
||||||
|
" Hugeifies: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
||||||
|
" Dehugifies: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
||||||
|
"\n",
|
||||||
|
npurge_passes, rate_per_second(npurge_passes, uptime),
|
||||||
|
npurges, rate_per_second(npurges, uptime),
|
||||||
|
nhugifies, rate_per_second(nhugifies, uptime),
|
||||||
|
ndehugifies, rate_per_second(ndehugifies, uptime));
|
||||||
|
|
||||||
|
emitter_json_object_kv_begin(emitter, "hpa_shard");
|
||||||
|
emitter_json_kv(emitter, "npurge_passes", emitter_type_uint64,
|
||||||
|
&npurge_passes);
|
||||||
|
emitter_json_kv(emitter, "npurges", emitter_type_uint64,
|
||||||
|
&npurges);
|
||||||
|
emitter_json_kv(emitter, "nhugifies", emitter_type_uint64,
|
||||||
|
&nhugifies);
|
||||||
|
emitter_json_kv(emitter, "ndehugifies", emitter_type_uint64,
|
||||||
|
&ndehugifies);
|
||||||
|
|
||||||
|
/* Next, full slab stats. */
|
||||||
CTL_M2_GET("stats.arenas.0.hpa_shard.full_slabs.npageslabs_huge",
|
CTL_M2_GET("stats.arenas.0.hpa_shard.full_slabs.npageslabs_huge",
|
||||||
i, &npageslabs_huge, size_t);
|
i, &npageslabs_huge, size_t);
|
||||||
CTL_M2_GET("stats.arenas.0.hpa_shard.full_slabs.nactive_huge",
|
CTL_M2_GET("stats.arenas.0.hpa_shard.full_slabs.nactive_huge",
|
||||||
@ -829,42 +858,17 @@ stats_arena_hpa_shard_print(emitter_t *emitter, unsigned i, uint64_t uptime) {
|
|||||||
nretained_nonhuge = npageslabs_nonhuge * HUGEPAGE_PAGES
|
nretained_nonhuge = npageslabs_nonhuge * HUGEPAGE_PAGES
|
||||||
- nactive_nonhuge - ndirty_nonhuge;
|
- nactive_nonhuge - ndirty_nonhuge;
|
||||||
|
|
||||||
size_t sec_bytes;
|
|
||||||
CTL_M2_GET("stats.arenas.0.hpa_sec_bytes", i, &sec_bytes, size_t);
|
|
||||||
emitter_kv(emitter, "sec_bytes", "Bytes in small extent cache",
|
|
||||||
emitter_type_size, &sec_bytes);
|
|
||||||
|
|
||||||
emitter_table_printf(emitter,
|
emitter_table_printf(emitter,
|
||||||
"HPA shard stats:\n"
|
|
||||||
" Purge passes: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
|
||||||
" Purges: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
|
||||||
" Hugeifies: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
|
||||||
" Dehugifies: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
|
||||||
"\n"
|
|
||||||
" In full slabs:\n"
|
" In full slabs:\n"
|
||||||
" npageslabs: %zu huge, %zu nonhuge\n"
|
" npageslabs: %zu huge, %zu nonhuge\n"
|
||||||
" nactive: %zu huge, %zu nonhuge \n"
|
" nactive: %zu huge, %zu nonhuge \n"
|
||||||
" ndirty: %zu huge, %zu nonhuge \n"
|
" ndirty: %zu huge, %zu nonhuge \n"
|
||||||
" nretained: 0 huge, %zu nonhuge \n",
|
" nretained: 0 huge, %zu nonhuge \n",
|
||||||
npurge_passes, rate_per_second(npurge_passes, uptime),
|
|
||||||
npurges, rate_per_second(npurges, uptime),
|
|
||||||
nhugifies, rate_per_second(nhugifies, uptime),
|
|
||||||
ndehugifies, rate_per_second(ndehugifies, uptime),
|
|
||||||
npageslabs_huge, npageslabs_nonhuge,
|
npageslabs_huge, npageslabs_nonhuge,
|
||||||
nactive_huge, nactive_nonhuge,
|
nactive_huge, nactive_nonhuge,
|
||||||
ndirty_huge, ndirty_nonhuge,
|
ndirty_huge, ndirty_nonhuge,
|
||||||
nretained_nonhuge);
|
nretained_nonhuge);
|
||||||
|
|
||||||
emitter_json_object_kv_begin(emitter, "hpa_shard");
|
|
||||||
emitter_json_kv(emitter, "npurge_passes", emitter_type_uint64,
|
|
||||||
&npurge_passes);
|
|
||||||
emitter_json_kv(emitter, "npurges", emitter_type_uint64,
|
|
||||||
&npurges);
|
|
||||||
emitter_json_kv(emitter, "nhugifies", emitter_type_uint64,
|
|
||||||
&nhugifies);
|
|
||||||
emitter_json_kv(emitter, "ndehugifies", emitter_type_uint64,
|
|
||||||
&ndehugifies);
|
|
||||||
|
|
||||||
emitter_json_object_kv_begin(emitter, "full_slabs");
|
emitter_json_object_kv_begin(emitter, "full_slabs");
|
||||||
emitter_json_kv(emitter, "npageslabs_huge", emitter_type_size,
|
emitter_json_kv(emitter, "npageslabs_huge", emitter_type_size,
|
||||||
&npageslabs_huge);
|
&npageslabs_huge);
|
||||||
@ -880,6 +884,50 @@ stats_arena_hpa_shard_print(emitter_t *emitter, unsigned i, uint64_t uptime) {
|
|||||||
&ndirty_nonhuge);
|
&ndirty_nonhuge);
|
||||||
emitter_json_object_end(emitter); /* End "full_slabs" */
|
emitter_json_object_end(emitter); /* End "full_slabs" */
|
||||||
|
|
||||||
|
/* Next, empty slab stats. */
|
||||||
|
CTL_M2_GET("stats.arenas.0.hpa_shard.empty_slabs.npageslabs_huge",
|
||||||
|
i, &npageslabs_huge, size_t);
|
||||||
|
CTL_M2_GET("stats.arenas.0.hpa_shard.empty_slabs.nactive_huge",
|
||||||
|
i, &nactive_huge, size_t);
|
||||||
|
CTL_M2_GET("stats.arenas.0.hpa_shard.empty_slabs.ndirty_huge",
|
||||||
|
i, &ndirty_huge, size_t);
|
||||||
|
|
||||||
|
CTL_M2_GET("stats.arenas.0.hpa_shard.empty_slabs.npageslabs_nonhuge",
|
||||||
|
i, &npageslabs_nonhuge, size_t);
|
||||||
|
CTL_M2_GET("stats.arenas.0.hpa_shard.empty_slabs.nactive_nonhuge",
|
||||||
|
i, &nactive_nonhuge, size_t);
|
||||||
|
CTL_M2_GET("stats.arenas.0.hpa_shard.empty_slabs.ndirty_nonhuge",
|
||||||
|
i, &ndirty_nonhuge, size_t);
|
||||||
|
nretained_nonhuge = npageslabs_nonhuge * HUGEPAGE_PAGES
|
||||||
|
- nactive_nonhuge - ndirty_nonhuge;
|
||||||
|
|
||||||
|
emitter_table_printf(emitter,
|
||||||
|
" In empty slabs:\n"
|
||||||
|
" npageslabs: %zu huge, %zu nonhuge\n"
|
||||||
|
" nactive: %zu huge, %zu nonhuge \n"
|
||||||
|
" ndirty: %zu huge, %zu nonhuge \n"
|
||||||
|
" nretained: 0 huge, %zu nonhuge \n"
|
||||||
|
"\n",
|
||||||
|
npageslabs_huge, npageslabs_nonhuge,
|
||||||
|
nactive_huge, nactive_nonhuge,
|
||||||
|
ndirty_huge, ndirty_nonhuge,
|
||||||
|
nretained_nonhuge);
|
||||||
|
|
||||||
|
emitter_json_object_kv_begin(emitter, "empty_slabs");
|
||||||
|
emitter_json_kv(emitter, "npageslabs_huge", emitter_type_size,
|
||||||
|
&npageslabs_huge);
|
||||||
|
emitter_json_kv(emitter, "nactive_huge", emitter_type_size,
|
||||||
|
&nactive_huge);
|
||||||
|
emitter_json_kv(emitter, "nactive_huge", emitter_type_size,
|
||||||
|
&nactive_huge);
|
||||||
|
emitter_json_kv(emitter, "npageslabs_nonhuge", emitter_type_size,
|
||||||
|
&npageslabs_nonhuge);
|
||||||
|
emitter_json_kv(emitter, "nactive_nonhuge", emitter_type_size,
|
||||||
|
&nactive_nonhuge);
|
||||||
|
emitter_json_kv(emitter, "ndirty_nonhuge", emitter_type_size,
|
||||||
|
&ndirty_nonhuge);
|
||||||
|
emitter_json_object_end(emitter); /* End "empty_slabs" */
|
||||||
|
|
||||||
COL_HDR(row, size, NULL, right, 20, size)
|
COL_HDR(row, size, NULL, right, 20, size)
|
||||||
COL_HDR(row, ind, NULL, right, 4, unsigned)
|
COL_HDR(row, ind, NULL, right, 4, unsigned)
|
||||||
COL_HDR(row, npageslabs_huge, NULL, right, 16, size)
|
COL_HDR(row, npageslabs_huge, NULL, right, 16, size)
|
||||||
|
Loading…
Reference in New Issue
Block a user