mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-07-23 21:23:06 +00:00
Expose psset state stats
When evaluating changes in HPA logic, it is useful to know internal `hpa_shard` state. Great deal of this state is `psset`. Some of the `psset` stats was available, but in disaggregated form, which is not very convenient. This commit exposed `psset` counters to `mallctl` and malloc stats dumps. Example of how malloc stats dump will look like after the change. HPA shard stats: Pageslabs: 14899 (4354 huge, 10545 nonhuge) Active pages: 6708166 (2228917 huge, 4479249 nonhuge) Dirty pages: 233816 (331 huge, 233485 nonhuge) Retained pages: 686306 Purge passes: 8730 (10 / sec) Purges: 127501 (146 / sec) Hugeifies: 4358 (5 / sec) Dehugifies: 4 (0 / sec) Pageslabs, active pages, dirty pages and retained pages are rows added by this change.
This commit is contained in:
committed by
stanjo74
parent
3820e38dc1
commit
6092c980a6
69
src/stats.c
69
src/stats.c
@@ -841,12 +841,48 @@ stats_arena_hpa_shard_sec_print(emitter_t *emitter, unsigned i) {
|
||||
static void
|
||||
stats_arena_hpa_shard_counters_print(emitter_t *emitter, unsigned i,
|
||||
uint64_t uptime) {
|
||||
size_t npageslabs;
|
||||
size_t nactive;
|
||||
size_t ndirty;
|
||||
|
||||
size_t npageslabs_nonhuge;
|
||||
size_t nactive_nonhuge;
|
||||
size_t ndirty_nonhuge;
|
||||
size_t nretained_nonhuge;
|
||||
|
||||
size_t npageslabs_huge;
|
||||
size_t nactive_huge;
|
||||
size_t ndirty_huge;
|
||||
|
||||
uint64_t npurge_passes;
|
||||
uint64_t npurges;
|
||||
uint64_t nhugifies;
|
||||
uint64_t nhugify_failures;
|
||||
uint64_t ndehugifies;
|
||||
|
||||
CTL_M2_GET("stats.arenas.0.hpa_shard.npageslabs",
|
||||
i, &npageslabs, size_t);
|
||||
CTL_M2_GET("stats.arenas.0.hpa_shard.nactive",
|
||||
i, &nactive, size_t);
|
||||
CTL_M2_GET("stats.arenas.0.hpa_shard.ndirty",
|
||||
i, &ndirty, size_t);
|
||||
|
||||
CTL_M2_GET("stats.arenas.0.hpa_shard.slabs.npageslabs_nonhuge",
|
||||
i, &npageslabs_nonhuge, size_t);
|
||||
CTL_M2_GET("stats.arenas.0.hpa_shard.slabs.nactive_nonhuge",
|
||||
i, &nactive_nonhuge, size_t);
|
||||
CTL_M2_GET("stats.arenas.0.hpa_shard.slabs.ndirty_nonhuge",
|
||||
i, &ndirty_nonhuge, size_t);
|
||||
nretained_nonhuge = npageslabs_nonhuge * HUGEPAGE_PAGES
|
||||
- nactive_nonhuge - ndirty_nonhuge;
|
||||
|
||||
CTL_M2_GET("stats.arenas.0.hpa_shard.slabs.npageslabs_huge",
|
||||
i, &npageslabs_huge, size_t);
|
||||
CTL_M2_GET("stats.arenas.0.hpa_shard.slabs.nactive_huge",
|
||||
i, &nactive_huge, size_t);
|
||||
CTL_M2_GET("stats.arenas.0.hpa_shard.slabs.ndirty_huge",
|
||||
i, &ndirty_huge, size_t);
|
||||
|
||||
CTL_M2_GET("stats.arenas.0.hpa_shard.npurge_passes",
|
||||
i, &npurge_passes, uint64_t);
|
||||
CTL_M2_GET("stats.arenas.0.hpa_shard.npurges",
|
||||
@@ -860,18 +896,33 @@ stats_arena_hpa_shard_counters_print(emitter_t *emitter, unsigned i,
|
||||
|
||||
emitter_table_printf(emitter,
|
||||
"HPA shard stats:\n"
|
||||
" Pageslabs: %zu (%zu huge, %zu nonhuge)\n"
|
||||
" Active pages: %zu (%zu huge, %zu nonhuge)\n"
|
||||
" Dirty pages: %zu (%zu huge, %zu nonhuge)\n"
|
||||
" Retained pages: %zu\n"
|
||||
" Purge passes: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
||||
" Purges: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
||||
" Hugeifies: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
||||
" Hugify failures: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
||||
" Dehugifies: %" FMTu64 " (%" FMTu64 " / sec)\n"
|
||||
"\n",
|
||||
npageslabs, npageslabs_huge, npageslabs_nonhuge,
|
||||
nactive, nactive_huge, nactive_nonhuge,
|
||||
ndirty, ndirty_huge, ndirty_nonhuge,
|
||||
nretained_nonhuge,
|
||||
npurge_passes, rate_per_second(npurge_passes, uptime),
|
||||
npurges, rate_per_second(npurges, uptime),
|
||||
nhugifies, rate_per_second(nhugifies, uptime),
|
||||
nhugify_failures, rate_per_second(nhugify_failures, uptime),
|
||||
ndehugifies, rate_per_second(ndehugifies, uptime));
|
||||
|
||||
emitter_json_kv(emitter, "npageslabs", emitter_type_size,
|
||||
&npageslabs);
|
||||
emitter_json_kv(emitter, "nactive", emitter_type_size,
|
||||
&nactive);
|
||||
emitter_json_kv(emitter, "ndirty", emitter_type_size,
|
||||
&ndirty);
|
||||
|
||||
emitter_json_kv(emitter, "npurge_passes", emitter_type_uint64,
|
||||
&npurge_passes);
|
||||
emitter_json_kv(emitter, "npurges", emitter_type_uint64,
|
||||
@@ -882,6 +933,24 @@ stats_arena_hpa_shard_counters_print(emitter_t *emitter, unsigned i,
|
||||
&nhugify_failures);
|
||||
emitter_json_kv(emitter, "ndehugifies", emitter_type_uint64,
|
||||
&ndehugifies);
|
||||
|
||||
emitter_json_object_kv_begin(emitter, "slabs");
|
||||
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_kv(emitter, "nretained_nonhuge", emitter_type_size,
|
||||
&nretained_nonhuge);
|
||||
|
||||
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, "ndirty_huge", emitter_type_size,
|
||||
&ndirty_huge);
|
||||
emitter_json_object_end(emitter); /* End "slabs" */
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user