mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-07-24 05:33: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
@@ -1002,6 +1002,63 @@ TEST_BEGIN(test_stats_arenas) {
|
||||
}
|
||||
TEST_END
|
||||
|
||||
TEST_BEGIN(test_stats_arenas_hpa_shard_counters) {
|
||||
test_skip_if(!config_stats);
|
||||
|
||||
#define TEST_STATS_ARENAS_HPA_SHARD_COUNTERS(t, name) do { \
|
||||
t name; \
|
||||
size_t sz = sizeof(t); \
|
||||
expect_d_eq(mallctl("stats.arenas.0.hpa_shard."#name, \
|
||||
(void *)&name, &sz, \
|
||||
NULL, 0), 0, "Unexpected mallctl() failure"); \
|
||||
} while (0)
|
||||
|
||||
TEST_STATS_ARENAS_HPA_SHARD_COUNTERS(size_t, npageslabs);
|
||||
TEST_STATS_ARENAS_HPA_SHARD_COUNTERS(size_t, nactive);
|
||||
TEST_STATS_ARENAS_HPA_SHARD_COUNTERS(size_t, ndirty);
|
||||
TEST_STATS_ARENAS_HPA_SHARD_COUNTERS(uint64_t, npurge_passes);
|
||||
TEST_STATS_ARENAS_HPA_SHARD_COUNTERS(uint64_t, npurges);
|
||||
TEST_STATS_ARENAS_HPA_SHARD_COUNTERS(uint64_t, nhugifies);
|
||||
TEST_STATS_ARENAS_HPA_SHARD_COUNTERS(uint64_t, ndehugifies);
|
||||
|
||||
#undef TEST_STATS_ARENAS_HPA_SHARD_COUNTERS
|
||||
}
|
||||
TEST_END
|
||||
|
||||
TEST_BEGIN(test_stats_arenas_hpa_shard_slabs) {
|
||||
test_skip_if(!config_stats);
|
||||
|
||||
#define TEST_STATS_ARENAS_HPA_SHARD_SLABS_GEN(t, slab, name) do { \
|
||||
t slab##_##name; \
|
||||
size_t sz = sizeof(t); \
|
||||
expect_d_eq(mallctl("stats.arenas.0.hpa_shard."#slab"."#name, \
|
||||
(void *)&slab##_##name, &sz, \
|
||||
NULL, 0), 0, "Unexpected mallctl() failure"); \
|
||||
} while (0)
|
||||
|
||||
#define TEST_STATS_ARENAS_HPA_SHARD_SLABS(t, slab, name) do { \
|
||||
TEST_STATS_ARENAS_HPA_SHARD_SLABS_GEN(t, slab, \
|
||||
name##_##nonhuge); \
|
||||
TEST_STATS_ARENAS_HPA_SHARD_SLABS_GEN(t, slab, name##_##huge); \
|
||||
} while (0)
|
||||
|
||||
TEST_STATS_ARENAS_HPA_SHARD_SLABS(size_t, slabs, npageslabs);
|
||||
TEST_STATS_ARENAS_HPA_SHARD_SLABS(size_t, slabs, nactive);
|
||||
TEST_STATS_ARENAS_HPA_SHARD_SLABS(size_t, slabs, ndirty);
|
||||
|
||||
TEST_STATS_ARENAS_HPA_SHARD_SLABS(size_t, full_slabs, npageslabs);
|
||||
TEST_STATS_ARENAS_HPA_SHARD_SLABS(size_t, full_slabs, nactive);
|
||||
TEST_STATS_ARENAS_HPA_SHARD_SLABS(size_t, full_slabs, ndirty);
|
||||
|
||||
TEST_STATS_ARENAS_HPA_SHARD_SLABS(size_t, empty_slabs, npageslabs);
|
||||
TEST_STATS_ARENAS_HPA_SHARD_SLABS(size_t, empty_slabs, nactive);
|
||||
TEST_STATS_ARENAS_HPA_SHARD_SLABS(size_t, empty_slabs, ndirty);
|
||||
|
||||
#undef TEST_STATS_ARENAS_HPA_SHARD_SLABS
|
||||
#undef TEST_STATS_ARENAS_HPA_SHARD_SLABS_GEN
|
||||
}
|
||||
TEST_END
|
||||
|
||||
static void
|
||||
alloc_hook(void *extra, UNUSED hook_alloc_t type, UNUSED void *result,
|
||||
UNUSED uintptr_t result_raw, UNUSED uintptr_t args_raw[3]) {
|
||||
@@ -1321,6 +1378,8 @@ main(void) {
|
||||
test_arenas_lookup,
|
||||
test_prof_active,
|
||||
test_stats_arenas,
|
||||
test_stats_arenas_hpa_shard_counters,
|
||||
test_stats_arenas_hpa_shard_slabs,
|
||||
test_hooks,
|
||||
test_hooks_exhaustion,
|
||||
test_thread_idle,
|
||||
|
||||
Reference in New Issue
Block a user