123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- 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-mangling=<map>
- Mangle public symbols specified in <map> which is a comma-separated list of
- name:mangled pairs.
- For example, to use ld's --wrap option as an alternative method for
- overriding libc's malloc implementation, specify something like:
- --with-mangling=malloc:__wrap_malloc,free:__wrap_free[...]
- Note that mangling happens prior to application of the prefix specified by
- --with-jemalloc-prefix, and mangled symbols are then ignored when applying
- the prefix.
- --with-jemalloc-prefix=<prefix>
- Prefix all public APIs with <prefix>. For example, if <prefix> is
- "prefix_", API changes like the following occur:
- malloc() --> prefix_malloc()
- malloc_conf --> prefix_malloc_conf
- /etc/malloc.conf --> /etc/prefix_malloc.conf
- MALLOC_CONF --> PREFIX_MALLOC_CONF
- This makes it possible to use jemalloc at the same time as the system
- allocator, or even to use multiple copies of jemalloc simultaneously.
- By default, the prefix is "", except on OS X, where it is "je_". On OS X,
- jemalloc overlays the default malloc zone, but makes no attempt to actually
- replace the "malloc", "calloc", etc. symbols.
- --without-export
- Don't export public APIs. This can be useful when building jemalloc as a
- static library, or to avoid exporting public APIs when using the zone
- allocator on OSX.
- --with-private-namespace=<prefix>
- Prefix all library-private APIs with <prefix>je_. For shared libraries,
- symbol visibility mechanisms prevent these symbols from being exported, but
- for static libraries, naming collisions are a real possibility. By
- default, <prefix> is empty, which results in a symbol prefix of je_ .
- --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-cc-silence
- Enable code that silences non-useful compiler warnings. This is helpful
- when trying to tell serious warnings from those due to compiler
- limitations, but it potentially incurs a performance penalty.
- --enable-debug
- Enable assertions and validation code. This incurs a substantial
- performance hit, but is very useful during application development.
- Implies --enable-ivsalloc.
- --enable-code-coverage
- Enable code coverage support, for use during jemalloc test development.
- Additional testing targets are available if this option is enabled:
- coverage
- coverage_unit
- coverage_integration
- coverage_stress
- These targets do not clear code coverage results from previous runs, and
- there are interactions between the various coverage targets, so it is
- usually advisable to run 'make clean' between repeated code coverage runs.
- --enable-ivsalloc
- Enable validation code, which verifies that pointers reside within
- jemalloc-owned chunks before dereferencing them. This incurs a substantial
- performance hit.
- --disable-stats
- Disable statistics gathering functionality. See the "opt.stats_print"
- option documentation for usage details.
- --enable-prof
- Enable heap profiling and leak detection functionality. See the "opt.prof"
- option documentation for usage details. When enabled, there are several
- approaches to backtracing, and the configure script chooses the first one
- in the following list that appears to function correctly:
- + libunwind (requires --enable-prof-libunwind)
- + libgcc (unless --disable-prof-libgcc)
- + gcc intrinsics (unless --disable-prof-gcc)
- --enable-prof-libunwind
- Use the libunwind library (http://www.nongnu.org/libunwind/) for stack
- backtracing.
- --disable-prof-libgcc
- Disable the use of libgcc's backtracing functionality.
- --disable-prof-gcc
- Disable the use of gcc intrinsics for backtracing.
- --with-static-libunwind=<libunwind.a>
- Statically link against the specified libunwind.a rather than dynamically
- linking with -lunwind.
- --disable-tcache
- Disable thread-specific caches for small objects. Objects are cached and
- released in bulk, thus reducing the total number of mutex operations. See
- the "opt.tcache" option for usage details.
- --enable-mremap
- Enable huge realloc() via mremap(2). mremap() is disabled by default
- because the flavor used is specific to Linux, which has a quirk in its
- virtual memory allocation algorithm that causes semi-permanent VM map holes
- under normal jemalloc operation.
- --disable-munmap
- Disable virtual memory deallocation via munmap(2); instead keep track of
- the virtual memory for later use. munmap() is disabled by default (i.e.
- --disable-munmap is implied) on Linux, which has a quirk in its virtual
- memory allocation algorithm that causes semi-permanent VM map holes under
- normal jemalloc operation.
- --enable-dss
- Enable support for page allocation/deallocation via sbrk(2), in addition to
- mmap(2).
- --disable-fill
- Disable support for junk/zero filling of memory, quarantine, and redzones.
- See the "opt.junk", "opt.zero", "opt.quarantine", and "opt.redzone" option
- documentation for usage details.
- --disable-valgrind
- Disable support for Valgrind.
- --disable-experimental
- Disable support for the experimental API (*allocm()).
- --disable-zone-allocator
- Disable zone allocator for Darwin. This means jemalloc won't be hooked as
- the default allocator on OSX/iOS.
- --enable-utrace
- Enable utrace(2)-based allocation tracing. This feature is not broadly
- portable (FreeBSD has it, but Linux and OS X do not).
- --enable-xmalloc
- Enable support for optional immediate termination due to out-of-memory
- errors, as is commonly implemented by "xmalloc" wrapper function for malloc.
- See the "opt.xmalloc" option documentation for usage details.
- --enable-lazy-lock
- Enable 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.
- --with-xslroot=<path>
- Specify where to find DocBook XSL stylesheets when building the
- documentation.
- 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 build only parts of jemalloc, use the following targets:
- build_lib_shared
- build_lib_static
- build_lib
- build_doc_html
- build_doc_man
- build_doc
- To install only parts of jemalloc, use the following targets:
- install_bin
- install_include
- install_lib_shared
- install_lib_static
- install_lib
- install_doc_html
- install_doc_man
- install_doc
- 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, DATADIR, 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
- === Documentation ==============================================================
- The manual page is generated in both html and roff formats. Any web browser
- can be used to view the html manual. The roff manual page can be formatted
- prior to installation via the following command:
- nroff -man -t doc/jemalloc.3
|