Implement per arena base allocators.
Add/rename related mallctls: - Add stats.arenas.<i>.base . - Rename stats.arenas.<i>.metadata to stats.arenas.<i>.internal . - Add stats.arenas.<i>.resident . Modify the arenas.extend mallctl to take an optional (extent_hooks_t *) argument so that it is possible for all base allocations to be serviced by the specified extent hooks. This resolves #463.
This commit is contained in:
@@ -1500,9 +1500,9 @@ malloc_conf = "xmalloc:true";]]></programlisting>
|
||||
to control allocation for arenas created via <link
|
||||
linkend="arenas.extend"><mallctl>arenas.extend</mallctl></link> such
|
||||
that all extents originate from an application-supplied extent allocator
|
||||
(by setting custom extent hook functions just after arena creation), but
|
||||
the automatically created arenas may have already created extents prior
|
||||
to the application having an opportunity to take over extent
|
||||
(by specifying the custom extent hook functions during arena creation),
|
||||
but the automatically created arenas will have already created extents
|
||||
prior to the application having an opportunity to take over extent
|
||||
allocation.</para>
|
||||
|
||||
<programlisting language="C"><![CDATA[
|
||||
@@ -1832,11 +1832,12 @@ struct extent_hooks_s {
|
||||
<varlistentry id="arenas.extend">
|
||||
<term>
|
||||
<mallctl>arenas.extend</mallctl>
|
||||
(<type>unsigned</type>)
|
||||
<literal>r-</literal>
|
||||
(<type>unsigned</type>, <type>extent_hooks_t *</type>)
|
||||
<literal>rw</literal>
|
||||
</term>
|
||||
<listitem><para>Extend the array of arenas by appending a new arena,
|
||||
and returning the new arena index.</para></listitem>
|
||||
<listitem><para>Extend the array of arenas by appending a new arena with
|
||||
optionally specified extent hooks, and returning the new arena
|
||||
index.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="prof.thread_active_init">
|
||||
@@ -1976,9 +1977,11 @@ struct extent_hooks_s {
|
||||
[<option>--enable-stats</option>]
|
||||
</term>
|
||||
<listitem><para>Total number of bytes dedicated to metadata, which
|
||||
comprise base allocations used for bootstrap-sensitive internal
|
||||
allocator data structures and internal allocations (see <link
|
||||
linkend="stats.arenas.i.metadata"><mallctl>stats.arenas.<i>.metadata</mallctl></link>).</para></listitem>
|
||||
comprise base allocations used for bootstrap-sensitive allocator
|
||||
metadata structures (see <link
|
||||
linkend="stats.arenas.i.base"><mallctl>stats.arenas.<i>.base</mallctl></link>)
|
||||
and internal allocations (see <link
|
||||
linkend="stats.arenas.i.internal"><mallctl>stats.arenas.<i>.internal</mallctl></link>).</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="stats.resident">
|
||||
@@ -2114,9 +2117,21 @@ struct extent_hooks_s {
|
||||
details.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="stats.arenas.i.metadata">
|
||||
<varlistentry id="stats.arenas.i.base">
|
||||
<term>
|
||||
<mallctl>stats.arenas.<i>.metadata</mallctl>
|
||||
<mallctl>stats.arenas.<i>.base</mallctl>
|
||||
(<type>size_t</type>)
|
||||
<literal>r-</literal>
|
||||
[<option>--enable-stats</option>]
|
||||
</term>
|
||||
<listitem><para>
|
||||
Number of bytes dedicated to bootstrap-sensitive allocator metadata
|
||||
structures.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="stats.arenas.i.internal">
|
||||
<term>
|
||||
<mallctl>stats.arenas.<i>.internal</mallctl>
|
||||
(<type>size_t</type>)
|
||||
<literal>r-</literal>
|
||||
[<option>--enable-stats</option>]
|
||||
@@ -2124,13 +2139,23 @@ struct extent_hooks_s {
|
||||
<listitem><para>Number of bytes dedicated to internal allocations.
|
||||
Internal allocations differ from application-originated allocations in
|
||||
that they are for internal use, and that they are omitted from heap
|
||||
profiles. This statistic is reported separately from <link
|
||||
linkend="stats.metadata"><mallctl>stats.metadata</mallctl></link>
|
||||
because it overlaps with e.g. the <link
|
||||
linkend="stats.allocated"><mallctl>stats.allocated</mallctl></link> and
|
||||
<link linkend="stats.active"><mallctl>stats.active</mallctl></link>
|
||||
statistics, whereas the other metadata statistics do
|
||||
not.</para></listitem>
|
||||
profiles.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="stats.arenas.i.resident">
|
||||
<term>
|
||||
<mallctl>stats.arenas.<i>.resident</mallctl>
|
||||
(<type>size_t</type>)
|
||||
<literal>r-</literal>
|
||||
[<option>--enable-stats</option>]
|
||||
</term>
|
||||
<listitem><para>Maximum number of bytes in physically resident data
|
||||
pages mapped by the arena, comprising all pages dedicated to allocator
|
||||
metadata, pages backing active allocations, and unused dirty pages.
|
||||
This is a maximum rather than precise because pages may not actually be
|
||||
physically resident if they correspond to demand-zeroed virtual memory
|
||||
that has not yet been touched. This is a multiple of the page
|
||||
size.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="stats.arenas.i.npurge">
|
||||
|
Reference in New Issue
Block a user