dafde14e08
Remove medium size classes, because concurrent dirty page purging is no longer capable of purging inactive dirty pages inside active runs (due to recent arena/bin locking changes). Enhance tcache to support caching large objects, so that the same range of size classes is still cached, despite the removal of medium size class support.
215 lines
7.8 KiB
Plaintext
215 lines
7.8 KiB
Plaintext
Building and installing jemalloc can be as simple as typing the following while
|
|
in the root directory of the source tree:
|
|
|
|
./configure
|
|
make
|
|
make install
|
|
|
|
=== Advanced configuration =====================================================
|
|
|
|
The 'configure' script supports numerous options that allow control of which
|
|
functionality is enabled, where jemalloc is installed, etc. Optionally, pass
|
|
any of the following arguments (not a definitive list) to 'configure':
|
|
|
|
--help
|
|
Print a definitive list of options.
|
|
|
|
--prefix=<install-root-dir>
|
|
Set the base directory in which to install. For example:
|
|
|
|
./configure --prefix=/usr/local
|
|
|
|
will cause files to be installed into /usr/local/include, /usr/local/lib,
|
|
and /usr/local/man.
|
|
|
|
--with-rpath=<colon-separated-rpath>
|
|
Embed one or more library paths, so that libjemalloc can find the libraries
|
|
it is linked to. This works only on ELF-based systems.
|
|
|
|
--with-jemalloc-prefix=<prefix>
|
|
Prefix all public APIs with <prefix>, so that, for example, malloc()
|
|
becomes <prefix>malloc(). This makes it possible to use jemalloc at the
|
|
same time as the system allocator.
|
|
|
|
--with-install-suffix=<suffix>
|
|
Append <suffix> to the base name of all installed files, such that multiple
|
|
versions of jemalloc can coexist in the same installation directory. For
|
|
example, libjemalloc.so.0 becomes libjemalloc<suffix>.so.0.
|
|
|
|
--enable-debug
|
|
Enable assertions and validation code. This incurs a substantial
|
|
performance hit, but is very useful during application development.
|
|
|
|
--enable-stats
|
|
Enable statistics gathering functionality. Use the 'P' option to print
|
|
detailed allocation statistics at exit.
|
|
|
|
--enable-prof
|
|
Enable heap profiling and leak detection functionality. Use the 'B', 'F',
|
|
'I', 'L', and 'U' options to control these features.
|
|
|
|
--disable-prof-libgcc
|
|
Disable the use of libgcc's backtracing functionality. Ordinarily, libgcc's
|
|
backtracing functionality is superior to the alternatives, but it may fail
|
|
to capture backtraces on some systems.
|
|
|
|
--enable-prof-libunwind
|
|
Use the libunwind library (http://www.nongnu.org/libunwind/) for stack
|
|
backtracing. libunwind is quite slow, but it tends to work across a wider
|
|
variety of system configurations than the default backtracing code, which is
|
|
based on libgcc functionality or gcc intrinsics.
|
|
|
|
--with-static-libunwind=<libunwind.a>
|
|
Statically link against the specified libunwind.a rather than dynamically
|
|
linking with -lunwind.
|
|
|
|
--disable-tiny
|
|
Disable tiny (sub-quantum-sized) object support. Technically it is not
|
|
legal for a malloc implementation to allocate objects with less than
|
|
quantum alignment (8 or 16 bytes, depending on architecture), but in
|
|
practice it never causes any problems if, for example, 4-byte allocations
|
|
are 4-byte-aligned.
|
|
|
|
--disable-tcache
|
|
Disable thread-specific caches for small objects. Objects are cached and
|
|
released in bulk, thus reducing the total number of mutex operations. Use
|
|
the 'H', 'G', and 'M' options to control thread-specific caching.
|
|
|
|
--enable-swap
|
|
Enable mmap()ed swap file support. When this feature is built in, it is
|
|
possible to specify one or more files that act as backing store. This
|
|
effectively allows for per application swap files.
|
|
|
|
--enable-dss
|
|
Enable support for page allocation/deallocation via sbrk(2), in addition to
|
|
mmap(2).
|
|
|
|
--enable-fill
|
|
Enable support for junk/zero filling of memory. Use the 'J' option to
|
|
control junk filling, or the 'Z' option to control zero filling.
|
|
|
|
--enable-xmalloc
|
|
Enable support for optional immediate termination due to out-of-memory
|
|
errors, as is commonly implemented by "xmalloc" wrapper function for malloc.
|
|
Use the 'X' option to control termination behavior.
|
|
|
|
--enable-sysv
|
|
Enable support for System V semantics, wherein malloc(0) returns NULL
|
|
rather than a minimal allocation. Use the 'V' option to control System V
|
|
compatibility.
|
|
|
|
--enable-dynamic-page-shift
|
|
Under most conditions, the system page size never changes (usually 4KiB or
|
|
8KiB, depending on architecture and configuration), and unless this option
|
|
is enabled, jemalloc assumes that page size can safely be determined during
|
|
configuration and hard-coded. Enabling dynamic page size determination has
|
|
a measurable impact on performance, since the compiler is forced to load
|
|
the page size from memory rather than embedding immediate values.
|
|
|
|
--disable-lazy-lock
|
|
Disable code that wraps pthread_create() to detect when an application
|
|
switches from single-threaded to multi-threaded mode, so that it can avoid
|
|
mutex locking/unlocking operations while in single-threaded mode. In
|
|
practice, this feature usually has little impact on performance unless
|
|
thread-specific caching is disabled.
|
|
|
|
--disable-tls
|
|
Disable thread-local storage (TLS), which allows for fast access to
|
|
thread-local variables via the __thread keyword. If TLS is available,
|
|
jemalloc uses it for several purposes. Not that disabling TLS implies
|
|
--disable-tcache.
|
|
|
|
The following environment variables (not a definitive list) impact configure's
|
|
behavior:
|
|
|
|
CFLAGS="?"
|
|
Pass these flags to the compiler. You probably shouldn't define this unless
|
|
you know what you are doing. (Use EXTRA_CFLAGS instead.)
|
|
|
|
EXTRA_CFLAGS="?"
|
|
Append these flags to CFLAGS. This makes it possible to add flags such as
|
|
-Werror, while allowing the configure script to determine what other flags
|
|
are appropriate for the specified configuration.
|
|
|
|
The configure script specifically checks whether an optimization flag (-O*)
|
|
is specified in EXTRA_CFLAGS, and refrains from specifying an optimization
|
|
level if it finds that one has already been specified.
|
|
|
|
CPPFLAGS="?"
|
|
Pass these flags to the C preprocessor. Note that CFLAGS is not passed to
|
|
'cpp' when 'configure' is looking for include files, so you must use
|
|
CPPFLAGS instead if you need to help 'configure' find header files.
|
|
|
|
LD_LIBRARY_PATH="?"
|
|
'ld' uses this colon-separated list to find libraries.
|
|
|
|
LDFLAGS="?"
|
|
Pass these flags when linking.
|
|
|
|
PATH="?"
|
|
'configure' uses this to find programs.
|
|
|
|
=== Advanced compilation =======================================================
|
|
|
|
To install only parts of jemalloc, use the following targets:
|
|
|
|
install_include
|
|
install_lib
|
|
install_man
|
|
|
|
To clean up build results to varying degrees, use the following make targets:
|
|
|
|
clean
|
|
distclean
|
|
relclean
|
|
|
|
=== Advanced installation ======================================================
|
|
|
|
Optionally, define make variables when invoking make, including (not
|
|
exclusively):
|
|
|
|
INCLUDEDIR="?"
|
|
Use this as the installation prefix for header files.
|
|
|
|
LIBDIR="?"
|
|
Use this as the installation prefix for libraries.
|
|
|
|
MANDIR="?"
|
|
Use this as the installation prefix for man pages.
|
|
|
|
DESTDIR="?"
|
|
Prepend DESTDIR to INCLUDEDIR, LIBDIR, and MANDIR. This is useful when
|
|
installing to a different path than was specified via --prefix.
|
|
|
|
CC="?"
|
|
Use this to invoke the C compiler.
|
|
|
|
CFLAGS="?"
|
|
Pass these flags to the compiler.
|
|
|
|
CPPFLAGS="?"
|
|
Pass these flags to the C preprocessor.
|
|
|
|
LDFLAGS="?"
|
|
Pass these flags when linking.
|
|
|
|
PATH="?"
|
|
Use this to search for programs used during configuration and building.
|
|
|
|
=== Development ================================================================
|
|
|
|
If you intend to make non-trivial changes to jemalloc, use the 'autogen.sh'
|
|
script rather than 'configure'. This re-generates 'configure', enables
|
|
configuration dependency rules, and enables re-generation of automatically
|
|
generated source files.
|
|
|
|
The build system supports using an object directory separate from the source
|
|
tree. For example, you can create an 'obj' directory, and from within that
|
|
directory, issue configuration and build commands:
|
|
|
|
autoconf
|
|
mkdir obj
|
|
cd obj
|
|
../configure --enable-autogen
|
|
make
|