From 9545c2cd36e758f41857b93b8cb55355cf0bc508 Mon Sep 17 00:00:00 2001 From: Yinan Zhang Date: Fri, 13 Nov 2020 11:28:37 -0800 Subject: [PATCH] Add sample interval to prof last-N dump --- src/prof_recent.c | 3 +++ test/unit/prof_recent.c | 18 +++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/prof_recent.c b/src/prof_recent.c index b1aeef32..ff876783 100644 --- a/src/prof_recent.c +++ b/src/prof_recent.c @@ -540,6 +540,9 @@ prof_recent_alloc_dump(tsd_t *tsd, write_cb_t *write_cb, void *cbopaque) { malloc_mutex_unlock(tsd_tsdn(tsd), &prof_recent_alloc_mtx); emitter_begin(&emitter); + uint64_t sample_interval = (uint64_t)1U << lg_prof_sample; + emitter_json_kv(&emitter, "sample_interval", emitter_type_uint64, + &sample_interval); emitter_json_kv(&emitter, "recent_alloc_max", emitter_type_ssize, &dump_max); emitter_json_array_kv_begin(&emitter, "recent_alloc"); diff --git a/test/unit/prof_recent.c b/test/unit/prof_recent.c index 180f13fc..e16a849a 100644 --- a/test/unit/prof_recent.c +++ b/test/unit/prof_recent.c @@ -370,16 +370,16 @@ typedef struct { #define DUMP_ERROR "Dump output is wrong" static void -confirm_record(const char *template, - const confirm_record_t *records, const size_t n_records) { +confirm_record(const char *template, const confirm_record_t *records, + const size_t n_records) { static const char *types[2] = {"alloc", "dalloc"}; static char buf[64]; /* * The template string would be in the form of: - * "{\"recent_alloc_max\":XYZ,\"recent_alloc\":[]}", + * "{...,\"recent_alloc\":[]}", * and dump_out would be in the form of: - * "{\"recent_alloc_max\":XYZ,\"recent_alloc\":[...]}". + * "{...,\"recent_alloc\":[...]}". * Using "- 2" serves to cut right before the ending "]}". */ assert_d_eq(memcmp(dump_out, template, strlen(template) - 2), 0, @@ -489,18 +489,22 @@ TEST_BEGIN(test_prof_recent_alloc_dump) { void *p, *q; confirm_record_t records[2]; + assert_zu_eq(lg_prof_sample, (size_t)0, + "lg_prof_sample not set correctly"); + future = 0; assert_d_eq(mallctl("experimental.prof_recent.alloc_max", NULL, NULL, &future, sizeof(ssize_t)), 0, "Write error"); call_dump(); - expect_str_eq(dump_out, "{\"recent_alloc_max\":0,\"recent_alloc\":[]}", - DUMP_ERROR); + expect_str_eq(dump_out, "{\"sample_interval\":1," + "\"recent_alloc_max\":0,\"recent_alloc\":[]}", DUMP_ERROR); future = 2; assert_d_eq(mallctl("experimental.prof_recent.alloc_max", NULL, NULL, &future, sizeof(ssize_t)), 0, "Write error"); call_dump(); - const char *template = "{\"recent_alloc_max\":2,\"recent_alloc\":[]}"; + const char *template = "{\"sample_interval\":1," + "\"recent_alloc_max\":2,\"recent_alloc\":[]}"; expect_str_eq(dump_out, template, DUMP_ERROR); p = malloc(7);