mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-04-14 14:41:42 +03:00
Documentation updates (#2869)
* Document new mallctl interfaces added since 5.3.0 Add documentation for the following new mallctl entries: - opt.debug_double_free_max_scan: double-free detection scan limit - opt.prof_bt_max: max profiling backtrace depth - opt.disable_large_size_classes: page-aligned large allocations - opt.process_madvise_max_batch: batched process_madvise purging - thread.tcache.max: per-thread tcache_max control - thread.tcache.ncached_max.read_sizeclass: query ncached_max - thread.tcache.ncached_max.write: set ncached_max per size range - arena.<i>.name: get/set arena names - arenas.hugepage: hugepage size - approximate_stats.active: lightweight active bytes estimate Remove config.prof_frameptr since it still needs more development and is still experimental. Co-authored-by: lexprfuncall <carl.shapiro@gmail.com>
This commit is contained in:
parent
f265645d02
commit
6515df8cec
1 changed files with 147 additions and 10 deletions
|
|
@ -897,16 +897,6 @@ mallctl("arena." STRINGIFY(MALLCTL_ARENAS_ALL) ".decay",
|
||||||
during build configuration.</para></listitem>
|
during build configuration.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="config.prof_frameptr">
|
|
||||||
<term>
|
|
||||||
<mallctl>config.prof_frameptr</mallctl>
|
|
||||||
(<type>bool</type>)
|
|
||||||
<literal>r-</literal>
|
|
||||||
</term>
|
|
||||||
<listitem><para><option>--enable-prof-frameptr</option> was specified
|
|
||||||
during build configuration.</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry id="config.stats">
|
<varlistentry id="config.stats">
|
||||||
<term>
|
<term>
|
||||||
<mallctl>config.stats</mallctl>
|
<mallctl>config.stats</mallctl>
|
||||||
|
|
@ -1419,6 +1409,17 @@ malloc_conf = "xmalloc:true";]]></programlisting>
|
||||||
extent hooks.</para></listitem>
|
extent hooks.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry id="opt.prof_bt_max">
|
||||||
|
<term>
|
||||||
|
<mallctl>opt.prof_bt_max</mallctl>
|
||||||
|
(<type>unsigned</type>)
|
||||||
|
<literal>r-</literal>
|
||||||
|
[<option>--enable-prof</option>]
|
||||||
|
</term>
|
||||||
|
<listitem><para>Maximum number of stack frames to record in profiling
|
||||||
|
backtraces. The default is 128.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="opt.prof">
|
<varlistentry id="opt.prof">
|
||||||
<term>
|
<term>
|
||||||
<mallctl>opt.prof</mallctl>
|
<mallctl>opt.prof</mallctl>
|
||||||
|
|
@ -1666,6 +1667,53 @@ malloc_conf = "xmalloc:true";]]></programlisting>
|
||||||
testing this behavior.</para></listitem>
|
testing this behavior.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry id="opt.debug_double_free_max_scan">
|
||||||
|
<term>
|
||||||
|
<mallctl>opt.debug_double_free_max_scan</mallctl>
|
||||||
|
(<type>unsigned</type>)
|
||||||
|
<literal>r-</literal>
|
||||||
|
[<option>--enable-debug</option>]
|
||||||
|
</term>
|
||||||
|
<listitem><para>Maximum number of cached pointers to scan in the
|
||||||
|
thread cache when checking for double-free errors on deallocation.
|
||||||
|
When debug is enabled, each deallocation into the tcache scans up to
|
||||||
|
this many recently cached pointers to detect whether the same pointer
|
||||||
|
is being freed twice. Setting this to 0 disables the check. This
|
||||||
|
option is set to 0 and has no effect when debug is not enabled. The
|
||||||
|
default is 32.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry id="opt.disable_large_size_classes">
|
||||||
|
<term>
|
||||||
|
<mallctl>opt.disable_large_size_classes</mallctl>
|
||||||
|
(<type>bool</type>)
|
||||||
|
<literal>r-</literal>
|
||||||
|
</term>
|
||||||
|
<listitem><para>When enabled (the default), large allocations
|
||||||
|
(i.e. allocations of size >= <constant>SC_LARGE_MINCLASS</constant>)
|
||||||
|
are rounded up to the nearest page boundary rather than the nearest
|
||||||
|
large size class. This minimizes memory overhead, especially when
|
||||||
|
using hugepages, at the cost of disabling the standard large size
|
||||||
|
class hierarchy.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry id="opt.process_madvise_max_batch">
|
||||||
|
<term>
|
||||||
|
<mallctl>opt.process_madvise_max_batch</mallctl>
|
||||||
|
(<type>size_t</type>)
|
||||||
|
<literal>r-</literal>
|
||||||
|
</term>
|
||||||
|
<listitem><para>Maximum number of memory regions to include in each
|
||||||
|
<citerefentry><refentrytitle>process_madvise</refentrytitle>
|
||||||
|
<manvolnum>2</manvolnum></citerefentry> batch call. When set to 0
|
||||||
|
(the default), process_madvise is not used, and the standard
|
||||||
|
<citerefentry><refentrytitle>madvise</refentrytitle>
|
||||||
|
<manvolnum>2</manvolnum></citerefentry> is used instead. Setting this
|
||||||
|
to a positive value enables batched purging via process_madvise, which
|
||||||
|
can reduce the number of system calls needed for
|
||||||
|
purging.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="thread.arena">
|
<varlistentry id="thread.arena">
|
||||||
<term>
|
<term>
|
||||||
<mallctl>thread.arena</mallctl>
|
<mallctl>thread.arena</mallctl>
|
||||||
|
|
@ -1802,6 +1850,47 @@ malloc_conf = "xmalloc:true";]]></programlisting>
|
||||||
the developer may find manual flushing useful.</para></listitem>
|
the developer may find manual flushing useful.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry id="thread.tcache.max">
|
||||||
|
<term>
|
||||||
|
<mallctl>thread.tcache.max</mallctl>
|
||||||
|
(<type>size_t</type>)
|
||||||
|
<literal>rw</literal>
|
||||||
|
</term>
|
||||||
|
<listitem><para>Get or set the maximum cached size class
|
||||||
|
(<varname>tcache_max</varname>) for the calling thread's tcache. The
|
||||||
|
value is clamped to the maximum allowed limit and rounded up to the
|
||||||
|
nearest size class boundary. Changing this value will resize the
|
||||||
|
thread cache accordingly.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry id="thread.tcache.ncached_max.read_sizeclass">
|
||||||
|
<term>
|
||||||
|
<mallctl>thread.tcache.ncached_max.read_sizeclass</mallctl>
|
||||||
|
(<type>size_t</type>)
|
||||||
|
<literal>rw</literal>
|
||||||
|
</term>
|
||||||
|
<listitem><para>Query the maximum number of cached objects
|
||||||
|
(<varname>ncached_max</varname>) for a given size class in the calling
|
||||||
|
thread's tcache. The size class is passed in via
|
||||||
|
<parameter>newp</parameter>, and the corresponding
|
||||||
|
<varname>ncached_max</varname> is returned via
|
||||||
|
<parameter>oldp</parameter>.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry id="thread.tcache.ncached_max.write">
|
||||||
|
<term>
|
||||||
|
<mallctl>thread.tcache.ncached_max.write</mallctl>
|
||||||
|
(<type>char *</type>)
|
||||||
|
<literal>-w</literal>
|
||||||
|
</term>
|
||||||
|
<listitem><para>Set the maximum number of cached objects
|
||||||
|
(<varname>ncached_max</varname>) for size classes in the calling
|
||||||
|
thread's tcache. The input is a string of pipe-separated settings,
|
||||||
|
where each setting specifies a size range and a count, in the same
|
||||||
|
format as the <mallctl>opt.tcache_ncached_max</mallctl> runtime
|
||||||
|
option.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="thread.prof.name">
|
<varlistentry id="thread.prof.name">
|
||||||
<term>
|
<term>
|
||||||
<mallctl>thread.prof.name</mallctl>
|
<mallctl>thread.prof.name</mallctl>
|
||||||
|
|
@ -1985,6 +2074,24 @@ malloc_conf = "xmalloc:true";]]></programlisting>
|
||||||
linkend="thread.arena"><mallctl>thread.arena</mallctl></link>.</para></listitem>
|
linkend="thread.arena"><mallctl>thread.arena</mallctl></link>.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry id="arena.i.name">
|
||||||
|
<term>
|
||||||
|
<mallctl>arena.<i>.name</mallctl>
|
||||||
|
(<type>char *</type>)
|
||||||
|
<literal>rw</literal>
|
||||||
|
</term>
|
||||||
|
<listitem><para>Get or set a descriptive name for arena <i>.
|
||||||
|
Arena names can be up to 32 characters long (including the null
|
||||||
|
terminator); longer names are truncated. When reading, the caller
|
||||||
|
passes a pointer to a pre-allocated buffer (of at least 32 bytes) via
|
||||||
|
<parameter>oldp</parameter>, and
|
||||||
|
<parameter>*oldlenp</parameter> must be
|
||||||
|
<code language="C">sizeof(<type>char *</type>)</code>.
|
||||||
|
Arena names are also included in the output of <link
|
||||||
|
linkend="stats_print"><function>malloc_stats_print()</function></link>.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="arena.i.dss">
|
<varlistentry id="arena.i.dss">
|
||||||
<term>
|
<term>
|
||||||
<mallctl>arena.<i>.dss</mallctl>
|
<mallctl>arena.<i>.dss</mallctl>
|
||||||
|
|
@ -2342,6 +2449,18 @@ struct extent_hooks_s {
|
||||||
<listitem><para>Page size.</para></listitem>
|
<listitem><para>Page size.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry id="arenas.hugepage">
|
||||||
|
<term>
|
||||||
|
<mallctl>arenas.hugepage</mallctl>
|
||||||
|
(<type>size_t</type>)
|
||||||
|
<literal>r-</literal>
|
||||||
|
</term>
|
||||||
|
<listitem><para>Hugepage size. This value is also reported in the
|
||||||
|
output of <link
|
||||||
|
linkend="stats_print"><function>malloc_stats_print()</function></link>.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="arenas.tcache_max">
|
<varlistentry id="arenas.tcache_max">
|
||||||
<term>
|
<term>
|
||||||
<mallctl>arenas.tcache_max</mallctl>
|
<mallctl>arenas.tcache_max</mallctl>
|
||||||
|
|
@ -2561,6 +2680,24 @@ struct extent_hooks_s {
|
||||||
option for additional information.</para></listitem>
|
option for additional information.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry id="approximate_stats.active">
|
||||||
|
<term>
|
||||||
|
<mallctl>approximate_stats.active</mallctl>
|
||||||
|
(<type>size_t</type>)
|
||||||
|
<literal>r-</literal>
|
||||||
|
</term>
|
||||||
|
<listitem><para>Return the total number of bytes in active pages
|
||||||
|
collected in an unsynchronized manner, without requiring an
|
||||||
|
<link linkend="epoch"><mallctl>epoch</mallctl></link> update.
|
||||||
|
As a result, this value should NOT be compared with other
|
||||||
|
stats. For example, the relative ordering between
|
||||||
|
<mallctl>approximate_stats.active</mallctl> and <link
|
||||||
|
linkend="stats.active"><mallctl>stats.active</mallctl></link> or <link
|
||||||
|
linkend="stats.resident"><mallctl>stats.resident</mallctl></link> is
|
||||||
|
not guaranteed. This interface is intended for lightweight monitoring
|
||||||
|
where an approximate value is sufficient.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="stats.allocated">
|
<varlistentry id="stats.allocated">
|
||||||
<term>
|
<term>
|
||||||
<mallctl>stats.allocated</mallctl>
|
<mallctl>stats.allocated</mallctl>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue