Skip to content

Commit cff203e

Browse files
committed
add jemalloc to the runtime
1 parent b8391cc commit cff203e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+44424
-0
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
src/rt/msvc/* -whitespace
88
src/rt/vg/* -whitespace
99
src/rt/linenoise/* -whitespace
10+
src/rt/jemalloc/**/* -whitespace

src/rt/jemalloc/COPYING

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
Unless otherwise specified, files in the jemalloc source distribution are
2+
subject to the following license:
3+
--------------------------------------------------------------------------------
4+
Copyright (C) 2002-2013 Jason Evans <[email protected]>.
5+
All rights reserved.
6+
Copyright (C) 2007-2012 Mozilla Foundation. All rights reserved.
7+
Copyright (C) 2009-2013 Facebook, Inc. All rights reserved.
8+
9+
Redistribution and use in source and binary forms, with or without
10+
modification, are permitted provided that the following conditions are met:
11+
1. Redistributions of source code must retain the above copyright notice(s),
12+
this list of conditions and the following disclaimer.
13+
2. Redistributions in binary form must reproduce the above copyright notice(s),
14+
this list of conditions and the following disclaimer in the documentation
15+
and/or other materials provided with the distribution.
16+
17+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS
18+
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19+
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
20+
EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
21+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25+
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26+
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27+
--------------------------------------------------------------------------------

src/rt/jemalloc/ChangeLog

Lines changed: 425 additions & 0 deletions
Large diffs are not rendered by default.

src/rt/jemalloc/INSTALL

Lines changed: 293 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,293 @@
1+
Building and installing jemalloc can be as simple as typing the following while
2+
in the root directory of the source tree:
3+
4+
./configure
5+
make
6+
make install
7+
8+
=== Advanced configuration =====================================================
9+
10+
The 'configure' script supports numerous options that allow control of which
11+
functionality is enabled, where jemalloc is installed, etc. Optionally, pass
12+
any of the following arguments (not a definitive list) to 'configure':
13+
14+
--help
15+
Print a definitive list of options.
16+
17+
--prefix=<install-root-dir>
18+
Set the base directory in which to install. For example:
19+
20+
./configure --prefix=/usr/local
21+
22+
will cause files to be installed into /usr/local/include, /usr/local/lib,
23+
and /usr/local/man.
24+
25+
--with-rpath=<colon-separated-rpath>
26+
Embed one or more library paths, so that libjemalloc can find the libraries
27+
it is linked to. This works only on ELF-based systems.
28+
29+
--with-mangling=<map>
30+
Mangle public symbols specified in <map> which is a comma-separated list of
31+
name:mangled pairs.
32+
33+
For example, to use ld's --wrap option as an alternative method for
34+
overriding libc's malloc implementation, specify something like:
35+
36+
--with-mangling=malloc:__wrap_malloc,free:__wrap_free[...]
37+
38+
Note that mangling happens prior to application of the prefix specified by
39+
--with-jemalloc-prefix, and mangled symbols are then ignored when applying
40+
the prefix.
41+
42+
--with-jemalloc-prefix=<prefix>
43+
Prefix all public APIs with <prefix>. For example, if <prefix> is
44+
"prefix_", API changes like the following occur:
45+
46+
malloc() --> prefix_malloc()
47+
malloc_conf --> prefix_malloc_conf
48+
/etc/malloc.conf --> /etc/prefix_malloc.conf
49+
MALLOC_CONF --> PREFIX_MALLOC_CONF
50+
51+
This makes it possible to use jemalloc at the same time as the system
52+
allocator, or even to use multiple copies of jemalloc simultaneously.
53+
54+
By default, the prefix is "", except on OS X, where it is "je_". On OS X,
55+
jemalloc overlays the default malloc zone, but makes no attempt to actually
56+
replace the "malloc", "calloc", etc. symbols.
57+
58+
--without-export
59+
Don't export public APIs. This can be useful when building jemalloc as a
60+
static library, or to avoid exporting public APIs when using the zone
61+
allocator on OSX.
62+
63+
--with-private-namespace=<prefix>
64+
Prefix all library-private APIs with <prefix>. For shared libraries,
65+
symbol visibility mechanisms prevent these symbols from being exported, but
66+
for static libraries, naming collisions are a real possibility. By
67+
default, the prefix is "" (empty string).
68+
69+
--with-install-suffix=<suffix>
70+
Append <suffix> to the base name of all installed files, such that multiple
71+
versions of jemalloc can coexist in the same installation directory. For
72+
example, libjemalloc.so.0 becomes libjemalloc<suffix>.so.0.
73+
74+
--enable-cc-silence
75+
Enable code that silences non-useful compiler warnings. This is helpful
76+
when trying to tell serious warnings from those due to compiler
77+
limitations, but it potentially incurs a performance penalty.
78+
79+
--enable-debug
80+
Enable assertions and validation code. This incurs a substantial
81+
performance hit, but is very useful during application development.
82+
Implies --enable-ivsalloc.
83+
84+
--enable-ivsalloc
85+
Enable validation code, which verifies that pointers reside within
86+
jemalloc-owned chunks before dereferencing them. This incurs a substantial
87+
performance hit.
88+
89+
--disable-stats
90+
Disable statistics gathering functionality. See the "opt.stats_print"
91+
option documentation for usage details.
92+
93+
--enable-prof
94+
Enable heap profiling and leak detection functionality. See the "opt.prof"
95+
option documentation for usage details. When enabled, there are several
96+
approaches to backtracing, and the configure script chooses the first one
97+
in the following list that appears to function correctly:
98+
99+
+ libunwind (requires --enable-prof-libunwind)
100+
+ libgcc (unless --disable-prof-libgcc)
101+
+ gcc intrinsics (unless --disable-prof-gcc)
102+
103+
--enable-prof-libunwind
104+
Use the libunwind library (http://www.nongnu.org/libunwind/) for stack
105+
backtracing.
106+
107+
--disable-prof-libgcc
108+
Disable the use of libgcc's backtracing functionality.
109+
110+
--disable-prof-gcc
111+
Disable the use of gcc intrinsics for backtracing.
112+
113+
--with-static-libunwind=<libunwind.a>
114+
Statically link against the specified libunwind.a rather than dynamically
115+
linking with -lunwind.
116+
117+
--disable-tcache
118+
Disable thread-specific caches for small objects. Objects are cached and
119+
released in bulk, thus reducing the total number of mutex operations. See
120+
the "opt.tcache" option for usage details.
121+
122+
--enable-mremap
123+
Enable huge realloc() via mremap(2). mremap() is disabled by default
124+
because the flavor used is specific to Linux, which has a quirk in its
125+
virtual memory allocation algorithm that causes semi-permanent VM map holes
126+
under normal jemalloc operation.
127+
128+
--disable-munmap
129+
Disable virtual memory deallocation via munmap(2); instead keep track of
130+
the virtual memory for later use. munmap() is disabled by default (i.e.
131+
--disable-munmap is implied) on Linux, which has a quirk in its virtual
132+
memory allocation algorithm that causes semi-permanent VM map holes under
133+
normal jemalloc operation.
134+
135+
--enable-dss
136+
Enable support for page allocation/deallocation via sbrk(2), in addition to
137+
mmap(2).
138+
139+
--disable-fill
140+
Disable support for junk/zero filling of memory, quarantine, and redzones.
141+
See the "opt.junk", "opt.zero", "opt.quarantine", and "opt.redzone" option
142+
documentation for usage details.
143+
144+
--disable-valgrind
145+
Disable support for Valgrind.
146+
147+
--disable-experimental
148+
Disable support for the experimental API (*allocm()).
149+
150+
--disable-zone-allocator
151+
Disable zone allocator for Darwin. This means jemalloc won't be hooked as
152+
the default allocator on OSX/iOS.
153+
154+
--enable-utrace
155+
Enable utrace(2)-based allocation tracing. This feature is not broadly
156+
portable (FreeBSD has it, but Linux and OS X do not).
157+
158+
--enable-xmalloc
159+
Enable support for optional immediate termination due to out-of-memory
160+
errors, as is commonly implemented by "xmalloc" wrapper function for malloc.
161+
See the "opt.xmalloc" option documentation for usage details.
162+
163+
--enable-lazy-lock
164+
Enable code that wraps pthread_create() to detect when an application
165+
switches from single-threaded to multi-threaded mode, so that it can avoid
166+
mutex locking/unlocking operations while in single-threaded mode. In
167+
practice, this feature usually has little impact on performance unless
168+
thread-specific caching is disabled.
169+
170+
--disable-tls
171+
Disable thread-local storage (TLS), which allows for fast access to
172+
thread-local variables via the __thread keyword. If TLS is available,
173+
jemalloc uses it for several purposes.
174+
175+
--with-xslroot=<path>
176+
Specify where to find DocBook XSL stylesheets when building the
177+
documentation.
178+
179+
The following environment variables (not a definitive list) impact configure's
180+
behavior:
181+
182+
CFLAGS="?"
183+
Pass these flags to the compiler. You probably shouldn't define this unless
184+
you know what you are doing. (Use EXTRA_CFLAGS instead.)
185+
186+
EXTRA_CFLAGS="?"
187+
Append these flags to CFLAGS. This makes it possible to add flags such as
188+
-Werror, while allowing the configure script to determine what other flags
189+
are appropriate for the specified configuration.
190+
191+
The configure script specifically checks whether an optimization flag (-O*)
192+
is specified in EXTRA_CFLAGS, and refrains from specifying an optimization
193+
level if it finds that one has already been specified.
194+
195+
CPPFLAGS="?"
196+
Pass these flags to the C preprocessor. Note that CFLAGS is not passed to
197+
'cpp' when 'configure' is looking for include files, so you must use
198+
CPPFLAGS instead if you need to help 'configure' find header files.
199+
200+
LD_LIBRARY_PATH="?"
201+
'ld' uses this colon-separated list to find libraries.
202+
203+
LDFLAGS="?"
204+
Pass these flags when linking.
205+
206+
PATH="?"
207+
'configure' uses this to find programs.
208+
209+
=== Advanced compilation =======================================================
210+
211+
To build only parts of jemalloc, use the following targets:
212+
213+
build_lib_shared
214+
build_lib_static
215+
build_lib
216+
build_doc_html
217+
build_doc_man
218+
build_doc
219+
220+
To install only parts of jemalloc, use the following targets:
221+
222+
install_bin
223+
install_include
224+
install_lib_shared
225+
install_lib_static
226+
install_lib
227+
install_doc_html
228+
install_doc_man
229+
install_doc
230+
231+
To clean up build results to varying degrees, use the following make targets:
232+
233+
clean
234+
distclean
235+
relclean
236+
237+
=== Advanced installation ======================================================
238+
239+
Optionally, define make variables when invoking make, including (not
240+
exclusively):
241+
242+
INCLUDEDIR="?"
243+
Use this as the installation prefix for header files.
244+
245+
LIBDIR="?"
246+
Use this as the installation prefix for libraries.
247+
248+
MANDIR="?"
249+
Use this as the installation prefix for man pages.
250+
251+
DESTDIR="?"
252+
Prepend DESTDIR to INCLUDEDIR, LIBDIR, DATADIR, and MANDIR. This is useful
253+
when installing to a different path than was specified via --prefix.
254+
255+
CC="?"
256+
Use this to invoke the C compiler.
257+
258+
CFLAGS="?"
259+
Pass these flags to the compiler.
260+
261+
CPPFLAGS="?"
262+
Pass these flags to the C preprocessor.
263+
264+
LDFLAGS="?"
265+
Pass these flags when linking.
266+
267+
PATH="?"
268+
Use this to search for programs used during configuration and building.
269+
270+
=== Development ================================================================
271+
272+
If you intend to make non-trivial changes to jemalloc, use the 'autogen.sh'
273+
script rather than 'configure'. This re-generates 'configure', enables
274+
configuration dependency rules, and enables re-generation of automatically
275+
generated source files.
276+
277+
The build system supports using an object directory separate from the source
278+
tree. For example, you can create an 'obj' directory, and from within that
279+
directory, issue configuration and build commands:
280+
281+
autoconf
282+
mkdir obj
283+
cd obj
284+
../configure --enable-autogen
285+
make
286+
287+
=== Documentation ==============================================================
288+
289+
The manual page is generated in both html and roff formats. Any web browser
290+
can be used to view the html manual. The roff manual page can be formatted
291+
prior to installation via the following command:
292+
293+
nroff -man -t doc/jemalloc.3

0 commit comments

Comments
 (0)