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>
|
||||
</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">
|
||||
<term>
|
||||
<mallctl>config.stats</mallctl>
|
||||
|
|
@ -1419,6 +1409,17 @@ malloc_conf = "xmalloc:true";]]></programlisting>
|
|||
extent hooks.</para></listitem>
|
||||
</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">
|
||||
<term>
|
||||
<mallctl>opt.prof</mallctl>
|
||||
|
|
@ -1666,6 +1667,53 @@ malloc_conf = "xmalloc:true";]]></programlisting>
|
|||
testing this behavior.</para></listitem>
|
||||
</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">
|
||||
<term>
|
||||
<mallctl>thread.arena</mallctl>
|
||||
|
|
@ -1802,6 +1850,47 @@ malloc_conf = "xmalloc:true";]]></programlisting>
|
|||
the developer may find manual flushing useful.</para></listitem>
|
||||
</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">
|
||||
<term>
|
||||
<mallctl>thread.prof.name</mallctl>
|
||||
|
|
@ -1985,6 +2074,24 @@ malloc_conf = "xmalloc:true";]]></programlisting>
|
|||
linkend="thread.arena"><mallctl>thread.arena</mallctl></link>.</para></listitem>
|
||||
</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">
|
||||
<term>
|
||||
<mallctl>arena.<i>.dss</mallctl>
|
||||
|
|
@ -2342,6 +2449,18 @@ struct extent_hooks_s {
|
|||
<listitem><para>Page size.</para></listitem>
|
||||
</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">
|
||||
<term>
|
||||
<mallctl>arenas.tcache_max</mallctl>
|
||||
|
|
@ -2561,6 +2680,24 @@ struct extent_hooks_s {
|
|||
option for additional information.</para></listitem>
|
||||
</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">
|
||||
<term>
|
||||
<mallctl>stats.allocated</mallctl>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue