diff --git a/ChangeLog b/ChangeLog
index 1db47d8c..1fed914f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -34,6 +34,7 @@ found in the git revision history:
- Add the --with-mangling option.
- Add the --disable-experimental option.
- Add the "thread.tcache.enabled" mallctl.
+ - Add the "opt.prof_final" mallctl.
- Update pprof (from gperftools 2.0).
Incompatible changes:
@@ -42,6 +43,8 @@ found in the git revision history:
- Disable lazy locking by default.
- Rename the "tcache.flush" mallctl to "thread.tcache.flush".
- Rename the "arenas.pagesize" mallctl to "arenas.page".
+ - Change the "opt.lg_prof_sample" default from 0 to 19 (1 B to 512 KiB).
+ - Change the "opt.prof_accum" default from true to false.
Removed features:
- Remove the swap feature, including the "config.swap", "swap.avail",
diff --git a/doc/jemalloc.xml.in b/doc/jemalloc.xml.in
index 3a6781b3..f78f423c 100644
--- a/doc/jemalloc.xml.in
+++ b/doc/jemalloc.xml.in
@@ -986,14 +986,7 @@ malloc_conf = "xmalloc:true";]]>
[]
Memory profiling enabled/disabled. If enabled, profile
- memory allocation activity, and use an
- atexit
- 3 function to dump final memory
- usage to a file named according to the pattern
- <prefix>.<pid>.<seq>.f.heap,
- where <prefix> is controlled by the opt.prof_prefix
- option. See the opt.prof_active
option for on-the-fly activation/deactivation. See the opt.lg_prof_sample
@@ -1001,12 +994,13 @@ malloc_conf = "xmalloc:true";]]>
linkend="opt.prof_accum">opt.prof_accum
option for control of cumulative sample reporting. See the opt.lg_prof_interval
- option for information on interval-triggered profile dumping, and the
- opt.prof_gdump
- option for information on high-water-triggered profile dumping.
- Profile output is compatible with the included pprof
- Perl script, which originates from the gperftools
+ option for information on interval-triggered profile dumping, the opt.prof_gdump
+ option for information on high-water-triggered profile dumping, and the
+ opt.prof_final
+ option for final profile dumping. Profile output is compatible with
+ the included pprof Perl script, which originates
+ from the gperftools
package.
@@ -1051,8 +1045,8 @@ malloc_conf = "xmalloc:true";]]>
Average interval (log base 2) between allocation
samples, as measured in bytes of allocation activity. Increasing the
sampling interval decreases profile fidelity, but also decreases the
- computational overhead. The default sample interval is 1 (2^0) (i.e.
- all allocations are sampled).
+ computational overhead. The default sample interval is 512 KiB (2^19
+ B).
@@ -1066,7 +1060,7 @@ malloc_conf = "xmalloc:true";]]>
dumps enabled/disabled. If this option is enabled, every unique
backtrace must be stored for the duration of execution. Depending on
the application, this can impose a large memory overhead, and the
- cumulative counts are not always of interest. This option is enabled
+ cumulative counts are not always of interest. This option is disabled
by default.
@@ -1107,6 +1101,23 @@ malloc_conf = "xmalloc:true";]]>
option. This option is disabled by default.
+
+
+ opt.prof_final
+ (bool)
+ r-
+ []
+
+ Use an
+ atexit
+ 3 function to dump final memory
+ usage to a file named according to the pattern
+ <prefix>.<pid>.<seq>.f.heap,
+ where <prefix> is controlled by the opt.prof_prefix
+ option. This option is enabled by default.
+
+
opt.prof_leak
diff --git a/include/jemalloc/internal/prof.h b/include/jemalloc/internal/prof.h
index a37bb448..a4c563cc 100644
--- a/include/jemalloc/internal/prof.h
+++ b/include/jemalloc/internal/prof.h
@@ -9,7 +9,7 @@ typedef struct prof_tdata_s prof_tdata_t;
/* Option defaults. */
#define PROF_PREFIX_DEFAULT "jeprof"
-#define LG_PROF_SAMPLE_DEFAULT 0
+#define LG_PROF_SAMPLE_DEFAULT 19
#define LG_PROF_INTERVAL_DEFAULT -1
/*
@@ -169,6 +169,7 @@ extern bool opt_prof_active;
extern size_t opt_lg_prof_sample; /* Mean bytes between samples. */
extern ssize_t opt_lg_prof_interval; /* lg(prof_interval). */
extern bool opt_prof_gdump; /* High-water memory dumping. */
+extern bool opt_prof_final; /* Final profile dumping. */
extern bool opt_prof_leak; /* Dump leak summary at exit. */
extern bool opt_prof_accum; /* Report cumulative bytes. */
extern char opt_prof_prefix[PATH_MAX + 1];
diff --git a/src/ctl.c b/src/ctl.c
index a6a02cc5..98ea3d1c 100644
--- a/src/ctl.c
+++ b/src/ctl.c
@@ -80,6 +80,7 @@ CTL_PROTO(opt_prof_active)
CTL_PROTO(opt_lg_prof_sample)
CTL_PROTO(opt_lg_prof_interval)
CTL_PROTO(opt_prof_gdump)
+CTL_PROTO(opt_prof_final)
CTL_PROTO(opt_prof_leak)
CTL_PROTO(opt_prof_accum)
CTL_PROTO(arenas_bin_i_size)
@@ -210,6 +211,7 @@ static const ctl_node_t opt_node[] = {
{NAME("lg_prof_sample"), CTL(opt_lg_prof_sample)},
{NAME("lg_prof_interval"), CTL(opt_lg_prof_interval)},
{NAME("prof_gdump"), CTL(opt_prof_gdump)},
+ {NAME("prof_final"), CTL(opt_prof_final)},
{NAME("prof_leak"), CTL(opt_prof_leak)},
{NAME("prof_accum"), CTL(opt_prof_accum)}
};
@@ -1122,6 +1124,7 @@ CTL_RO_CGEN(config_prof, opt_prof_active, opt_prof_active, bool) /* Mutable. */
CTL_RO_NL_CGEN(config_prof, opt_lg_prof_sample, opt_lg_prof_sample, size_t)
CTL_RO_NL_CGEN(config_prof, opt_lg_prof_interval, opt_lg_prof_interval, ssize_t)
CTL_RO_NL_CGEN(config_prof, opt_prof_gdump, opt_prof_gdump, bool)
+CTL_RO_NL_CGEN(config_prof, opt_prof_final, opt_prof_final, bool)
CTL_RO_NL_CGEN(config_prof, opt_prof_leak, opt_prof_leak, bool)
CTL_RO_NL_CGEN(config_prof, opt_prof_accum, opt_prof_accum, bool)
diff --git a/src/jemalloc.c b/src/jemalloc.c
index 0decd8a8..d4b681b4 100644
--- a/src/jemalloc.c
+++ b/src/jemalloc.c
@@ -561,6 +561,7 @@ malloc_conf_init(void)
lg_prof_interval, -1,
(sizeof(uint64_t) << 3) - 1)
CONF_HANDLE_BOOL(opt_prof_gdump, prof_gdump)
+ CONF_HANDLE_BOOL(opt_prof_final, prof_final)
CONF_HANDLE_BOOL(opt_prof_leak, prof_leak)
}
malloc_conf_error("Invalid conf pair", k, klen, v,
diff --git a/src/prof.c b/src/prof.c
index b509aaef..227560b8 100644
--- a/src/prof.c
+++ b/src/prof.c
@@ -21,8 +21,9 @@ bool opt_prof_active = true;
size_t opt_lg_prof_sample = LG_PROF_SAMPLE_DEFAULT;
ssize_t opt_lg_prof_interval = LG_PROF_INTERVAL_DEFAULT;
bool opt_prof_gdump = false;
+bool opt_prof_final = true;
bool opt_prof_leak = false;
-bool opt_prof_accum = true;
+bool opt_prof_accum = false;
char opt_prof_prefix[PATH_MAX + 1];
uint64_t prof_interval;
@@ -944,7 +945,7 @@ prof_fdump(void)
if (prof_booted == false)
return;
- if (opt_prof_prefix[0] != '\0') {
+ if (opt_prof_final && opt_prof_prefix[0] != '\0') {
malloc_mutex_lock(&prof_dump_seq_mtx);
prof_dump_filename(filename, 'f', UINT64_C(0xffffffffffffffff));
malloc_mutex_unlock(&prof_dump_seq_mtx);
diff --git a/src/stats.c b/src/stats.c
index 4cad214f..08f7098c 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -397,6 +397,7 @@ stats_print(void (*write_cb)(void *, const char *), void *cbopaque,
OPT_WRITE_BOOL(prof_accum)
OPT_WRITE_SSIZE_T(lg_prof_interval)
OPT_WRITE_BOOL(prof_gdump)
+ OPT_WRITE_BOOL(prof_final)
OPT_WRITE_BOOL(prof_leak)
#undef OPT_WRITE_BOOL