blob: 5c25054a88f9b17f5b9c794239c50b850c0d5556 [file] [log] [blame]
Jason Evanseb5376a2014-09-23 09:21:49 -07001Building and installing a packaged release of jemalloc can be as simple as
2typing the following while in the root directory of the source tree:
Jason Evanscc00a152009-06-25 18:06:48 -07003
4 ./configure
5 make
6 make install
7
Jason Evanseb5376a2014-09-23 09:21:49 -07008If building from unpackaged developer sources, the simplest command sequence
9that might work is:
10
11 ./autogen.sh
12 make dist
13 make
14 make install
15
16Note that documentation is not built by the default target because doing so
17would create a dependency on xsltproc in packaged releases, hence the
18requirement to either run 'make dist' or avoid installing docs via the various
19install_* targets documented below.
20
Jason Evanscc00a152009-06-25 18:06:48 -070021=== Advanced configuration =====================================================
22
23The 'configure' script supports numerous options that allow control of which
24functionality is enabled, where jemalloc is installed, etc. Optionally, pass
25any of the following arguments (not a definitive list) to 'configure':
26
27--help
28 Print a definitive list of options.
29
30--prefix=<install-root-dir>
31 Set the base directory in which to install. For example:
32
33 ./configure --prefix=/usr/local
34
35 will cause files to be installed into /usr/local/include, /usr/local/lib,
36 and /usr/local/man.
37
38--with-rpath=<colon-separated-rpath>
Jason Evans6c8b13b2009-12-29 00:09:15 -080039 Embed one or more library paths, so that libjemalloc can find the libraries
40 it is linked to. This works only on ELF-based systems.
Jason Evanscc00a152009-06-25 18:06:48 -070041
Jason Evans0a5489e2012-03-01 17:19:20 -080042--with-mangling=<map>
43 Mangle public symbols specified in <map> which is a comma-separated list of
44 name:mangled pairs.
45
46 For example, to use ld's --wrap option as an alternative method for
47 overriding libc's malloc implementation, specify something like:
48
49 --with-mangling=malloc:__wrap_malloc,free:__wrap_free[...]
50
51 Note that mangling happens prior to application of the prefix specified by
52 --with-jemalloc-prefix, and mangled symbols are then ignored when applying
53 the prefix.
54
Jason Evans90895cf2009-12-29 00:09:15 -080055--with-jemalloc-prefix=<prefix>
Jason Evanse7339702010-10-23 18:37:06 -070056 Prefix all public APIs with <prefix>. For example, if <prefix> is
Jason Evans2b769792010-12-16 14:13:46 -080057 "prefix_", API changes like the following occur:
Jason Evanse7339702010-10-23 18:37:06 -070058
59 malloc() --> prefix_malloc()
60 malloc_conf --> prefix_malloc_conf
61 /etc/malloc.conf --> /etc/prefix_malloc.conf
62 MALLOC_CONF --> PREFIX_MALLOC_CONF
63
Jason Evans379f8472010-10-24 16:18:29 -070064 This makes it possible to use jemalloc at the same time as the system
65 allocator, or even to use multiple copies of jemalloc simultaneously.
Jason Evans90895cf2009-12-29 00:09:15 -080066
Jason Evans2dbecf12010-09-05 10:35:13 -070067 By default, the prefix is "", except on OS X, where it is "je_". On OS X,
68 jemalloc overlays the default malloc zone, but makes no attempt to actually
69 replace the "malloc", "calloc", etc. symbols.
70
Mike Hommey99066602012-11-19 10:55:26 +010071--without-export
Jason Evansc21b05e2014-09-04 22:27:26 -070072 Don't export public APIs. This can be useful when building jemalloc as a
Mike Hommey99066602012-11-19 10:55:26 +010073 static library, or to avoid exporting public APIs when using the zone
74 allocator on OSX.
75
Jason Evans746e77a2011-07-30 16:40:52 -070076--with-private-namespace=<prefix>
Jason Evans86abd0d2013-11-30 15:25:42 -080077 Prefix all library-private APIs with <prefix>je_. For shared libraries,
Jason Evans746e77a2011-07-30 16:40:52 -070078 symbol visibility mechanisms prevent these symbols from being exported, but
79 for static libraries, naming collisions are a real possibility. By
Jason Evans86abd0d2013-11-30 15:25:42 -080080 default, <prefix> is empty, which results in a symbol prefix of je_ .
Jason Evans746e77a2011-07-30 16:40:52 -070081
Jason Evansb0fd5012010-01-17 01:49:20 -080082--with-install-suffix=<suffix>
83 Append <suffix> to the base name of all installed files, such that multiple
84 versions of jemalloc can coexist in the same installation directory. For
85 example, libjemalloc.so.0 becomes libjemalloc<suffix>.so.0.
86
Jason Evansf8290092016-02-07 14:23:22 -080087--with-malloc-conf=<malloc_conf>
88 Embed <malloc_conf> as a run-time options string that is processed prior to
89 the malloc_conf global variable, the /etc/malloc.conf symlink, and the
90 MALLOC_CONF environment variable. For example, to change the default chunk
91 size to 256 KiB:
92
93 --with-malloc-conf=lg_chunk:18
94
Jason Evans644d4142014-04-14 22:49:23 -070095--disable-cc-silence
96 Disable code that silences non-useful compiler warnings. This is mainly
97 useful during development when auditing the set of warnings that are being
98 silenced.
Jason Evans355b4382010-09-20 19:20:48 -070099
Jason Evanscc00a152009-06-25 18:06:48 -0700100--enable-debug
101 Enable assertions and validation code. This incurs a substantial
102 performance hit, but is very useful during application development.
Jason Evanse0a08a12015-03-18 21:06:58 -0700103 Implies --enable-ivsalloc.
Mike Hommey5135e342012-12-06 22:16:26 +0100104
Jason Evans748dfac2013-12-06 18:27:33 -0800105--enable-code-coverage
106 Enable code coverage support, for use during jemalloc test development.
107 Additional testing targets are available if this option is enabled:
108
109 coverage
110 coverage_unit
111 coverage_integration
112 coverage_stress
113
114 These targets do not clear code coverage results from previous runs, and
115 there are interactions between the various coverage targets, so it is
116 usually advisable to run 'make clean' between repeated code coverage runs.
117
Jason Evansd073a322012-02-28 20:41:16 -0800118--disable-stats
119 Disable statistics gathering functionality. See the "opt.stats_print"
Jason Evans379f8472010-10-24 16:18:29 -0700120 option documentation for usage details.
Jason Evanscc00a152009-06-25 18:06:48 -0700121
Jason Evanse0a08a12015-03-18 21:06:58 -0700122--enable-ivsalloc
123 Enable validation code, which verifies that pointers reside within
124 jemalloc-owned chunks before dereferencing them. This incurs a minor
125 performance hit.
126
Jason Evans6109fe02010-02-10 10:37:56 -0800127--enable-prof
Jason Evans379f8472010-10-24 16:18:29 -0700128 Enable heap profiling and leak detection functionality. See the "opt.prof"
Jason Evans77f350b2011-03-15 22:23:12 -0700129 option documentation for usage details. When enabled, there are several
130 approaches to backtracing, and the configure script chooses the first one
131 in the following list that appears to function correctly:
Jason Evans6109fe02010-02-10 10:37:56 -0800132
Jason Evans77f350b2011-03-15 22:23:12 -0700133 + libunwind (requires --enable-prof-libunwind)
134 + libgcc (unless --disable-prof-libgcc)
135 + gcc intrinsics (unless --disable-prof-gcc)
Jason Evansb27805b2010-02-10 18:15:53 -0800136
Jason Evans6109fe02010-02-10 10:37:56 -0800137--enable-prof-libunwind
138 Use the libunwind library (http://www.nongnu.org/libunwind/) for stack
Jason Evans77f350b2011-03-15 22:23:12 -0700139 backtracing.
140
141--disable-prof-libgcc
142 Disable the use of libgcc's backtracing functionality.
143
144--disable-prof-gcc
145 Disable the use of gcc intrinsics for backtracing.
Jason Evans6109fe02010-02-10 10:37:56 -0800146
Jason Evansca6bd4f2010-03-02 14:12:58 -0800147--with-static-libunwind=<libunwind.a>
148 Statically link against the specified libunwind.a rather than dynamically
149 linking with -lunwind.
150
Jason Evans84cbbcb2009-12-29 00:09:15 -0800151--disable-tcache
Jason Evansdafde142010-03-17 16:27:39 -0700152 Disable thread-specific caches for small objects. Objects are cached and
Jason Evans379f8472010-10-24 16:18:29 -0700153 released in bulk, thus reducing the total number of mutex operations. See
Jason Evans2b769792010-12-16 14:13:46 -0800154 the "opt.tcache" option for usage details.
Jason Evanscc00a152009-06-25 18:06:48 -0700155
Jason Evans59ae2762012-04-16 17:52:27 -0700156--disable-munmap
157 Disable virtual memory deallocation via munmap(2); instead keep track of
158 the virtual memory for later use. munmap() is disabled by default (i.e.
159 --disable-munmap is implied) on Linux, which has a quirk in its virtual
160 memory allocation algorithm that causes semi-permanent VM map holes under
Jason Evans2662ba52015-08-12 11:10:42 -0700161 normal jemalloc operation.
Jason Evans59ae2762012-04-16 17:52:27 -0700162
Jason Evans777c1912012-02-28 20:49:22 -0800163--disable-fill
Jason Evans122449b2012-04-06 00:35:09 -0700164 Disable support for junk/zero filling of memory, quarantine, and redzones.
165 See the "opt.junk", "opt.zero", "opt.quarantine", and "opt.redzone" option
166 documentation for usage details.
167
168--disable-valgrind
169 Disable support for Valgrind.
Jason Evanscc00a152009-06-25 18:06:48 -0700170
Mike Hommeyd0357f72012-11-26 18:52:41 +0100171--disable-zone-allocator
Jason Evansc21b05e2014-09-04 22:27:26 -0700172 Disable zone allocator for Darwin. This means jemalloc won't be hooked as
Mike Hommeyd0357f72012-11-26 18:52:41 +0100173 the default allocator on OSX/iOS.
174
Jason Evansb1476112012-04-05 13:36:17 -0700175--enable-utrace
176 Enable utrace(2)-based allocation tracing. This feature is not broadly
177 portable (FreeBSD has it, but Linux and OS X do not).
178
Jason Evanscc00a152009-06-25 18:06:48 -0700179--enable-xmalloc
180 Enable support for optional immediate termination due to out-of-memory
181 errors, as is commonly implemented by "xmalloc" wrapper function for malloc.
Jason Evans379f8472010-10-24 16:18:29 -0700182 See the "opt.xmalloc" option documentation for usage details.
Jason Evanscc00a152009-06-25 18:06:48 -0700183
Jason Evans0fee70d2012-02-13 12:36:11 -0800184--enable-lazy-lock
185 Enable code that wraps pthread_create() to detect when an application
Jason Evanscc00a152009-06-25 18:06:48 -0700186 switches from single-threaded to multi-threaded mode, so that it can avoid
187 mutex locking/unlocking operations while in single-threaded mode. In
188 practice, this feature usually has little impact on performance unless
Jason Evans84cbbcb2009-12-29 00:09:15 -0800189 thread-specific caching is disabled.
Jason Evanscc00a152009-06-25 18:06:48 -0700190
Jason Evans78d815c2010-01-17 14:06:20 -0800191--disable-tls
192 Disable thread-local storage (TLS), which allows for fast access to
193 thread-local variables via the __thread keyword. If TLS is available,
Jason Evansaee7fd22010-11-24 22:00:02 -0800194 jemalloc uses it for several purposes.
195
Jason Evans8a03cf02015-05-04 09:58:36 -0700196--disable-cache-oblivious
197 Disable cache-oblivious large allocation alignment for large allocation
198 requests with no alignment constraints. If this feature is disabled, all
199 large allocations are page-aligned as an implementation artifact, which can
200 severely harm CPU cache utilization. However, the cache-oblivious layout
201 comes at the cost of one extra page per large allocation, which in the
202 most extreme case increases physical memory usage for the 16 KiB size class
203 to 20 KiB.
204
Jason Evansaee7fd22010-11-24 22:00:02 -0800205--with-xslroot=<path>
206 Specify where to find DocBook XSL stylesheets when building the
207 documentation.
Jason Evans78d815c2010-01-17 14:06:20 -0800208
Jason Evansfc0b3b72014-10-09 17:54:06 -0700209--with-lg-page=<lg-page>
210 Specify the base 2 log of the system page size. This option is only useful
Jason Evansd1f3ab42014-10-14 22:31:49 -0700211 when cross compiling, since the configure script automatically determines
212 the host's page size by default.
Jason Evansfc0b3b72014-10-09 17:54:06 -0700213
214--with-lg-page-sizes=<lg-page-sizes>
215 Specify the comma-separated base 2 logs of the page sizes to support. This
216 option may be useful when cross-compiling in combination with
217 --with-lg-page, but its primary use case is for integration with FreeBSD's
218 libc, wherein jemalloc is embedded.
219
220--with-lg-size-class-group=<lg-size-class-group>
221 Specify the base 2 log of how many size classes to use for each doubling in
222 size. By default jemalloc uses <lg-size-class-group>=2, which results in
223 e.g. the following size classes:
224
225 [...], 64,
226 80, 96, 112, 128,
227 160, [...]
228
229 <lg-size-class-group>=3 results in e.g. the following size classes:
230
231 [...], 64,
232 72, 80, 88, 96, 104, 112, 120, 128,
233 144, [...]
234
235 The minimal <lg-size-class-group>=0 causes jemalloc to only provide size
236 classes that are powers of 2:
237
238 [...],
239 64,
240 128,
241 256,
242 [...]
243
244 An implementation detail currently limits the total number of small size
245 classes to 255, and a compilation error will result if the
246 <lg-size-class-group> you specify cannot be supported. The limit is
247 roughly <lg-size-class-group>=4, depending on page size.
248
249--with-lg-quantum=<lg-quantum>
Jason Evans81e54752014-10-10 22:34:25 -0700250 Specify the base 2 log of the minimum allocation alignment. jemalloc needs
251 to know the minimum alignment that meets the following C standard
252 requirement (quoted from the April 12, 2011 draft of the C11 standard):
Jason Evansfc0b3b72014-10-09 17:54:06 -0700253
254 The pointer returned if the allocation succeeds is suitably aligned so
255 that it may be assigned to a pointer to any type of object with a
256 fundamental alignment requirement and then used to access such an object
257 or an array of such objects in the space allocated [...]
258
259 This setting is architecture-specific, and although jemalloc includes known
260 safe values for the most commonly used modern architectures, there is a
261 wrinkle related to GNU libc (glibc) that may impact your choice of
262 <lg-quantum>. On most modern architectures, this mandates 16-byte alignment
Jason Evansd1f3ab42014-10-14 22:31:49 -0700263 (<lg-quantum>=4), but the glibc developers chose not to meet this
264 requirement for performance reasons. An old discussion can be found at
Jason Evansfc0b3b72014-10-09 17:54:06 -0700265 https://sourceware.org/bugzilla/show_bug.cgi?id=206 . Unlike glibc,
Jason Evans81e54752014-10-10 22:34:25 -0700266 jemalloc does follow the C standard by default (caveat: jemalloc
Jason Evansd1f3ab42014-10-14 22:31:49 -0700267 technically cheats if --with-lg-tiny-min is smaller than
268 --with-lg-quantum), but the fact that Linux systems already work around
269 this allocator noncompliance means that it is generally safe in practice to
270 let jemalloc's minimum alignment follow glibc's lead. If you specify
271 --with-lg-quantum=3 during configuration, jemalloc will provide additional
272 size classes that are not 16-byte-aligned (24, 40, and 56, assuming
Jason Evansfc0b3b72014-10-09 17:54:06 -0700273 --with-lg-size-class-group=2).
274
Jason Evans81e54752014-10-10 22:34:25 -0700275--with-lg-tiny-min=<lg-tiny-min>
276 Specify the base 2 log of the minimum tiny size class to support. Tiny
277 size classes are powers of 2 less than the quantum, and are only
278 incorporated if <lg-tiny-min> is less than <lg-quantum> (see
279 --with-lg-quantum). Tiny size classes technically violate the C standard
280 requirement for minimum alignment, and crashes could conceivably result if
281 the compiler were to generate instructions that made alignment assumptions,
282 both because illegal instruction traps could result, and because accesses
283 could straddle page boundaries and cause segmentation faults due to
284 accessing unmapped addresses.
285
286 The default of <lg-tiny-min>=3 works well in practice even on architectures
287 that technically require 16-byte alignment, probably for the same reason
288 --with-lg-quantum=3 works. Smaller tiny size classes can, and will, cause
289 crashes (see https://bugzilla.mozilla.org/show_bug.cgi?id=691003 for an
290 example).
291
292 This option is rarely useful, and is mainly provided as documentation of a
293 subtle implementation detail. If you do use this option, specify a
294 value in [3, ..., <lg-quantum>].
295
Jason Evanscc00a152009-06-25 18:06:48 -0700296The following environment variables (not a definitive list) impact configure's
297behavior:
298
299CFLAGS="?"
300 Pass these flags to the compiler. You probably shouldn't define this unless
301 you know what you are doing. (Use EXTRA_CFLAGS instead.)
302
303EXTRA_CFLAGS="?"
304 Append these flags to CFLAGS. This makes it possible to add flags such as
305 -Werror, while allowing the configure script to determine what other flags
306 are appropriate for the specified configuration.
307
308 The configure script specifically checks whether an optimization flag (-O*)
309 is specified in EXTRA_CFLAGS, and refrains from specifying an optimization
310 level if it finds that one has already been specified.
311
312CPPFLAGS="?"
313 Pass these flags to the C preprocessor. Note that CFLAGS is not passed to
314 'cpp' when 'configure' is looking for include files, so you must use
315 CPPFLAGS instead if you need to help 'configure' find header files.
316
317LD_LIBRARY_PATH="?"
318 'ld' uses this colon-separated list to find libraries.
319
320LDFLAGS="?"
321 Pass these flags when linking.
322
323PATH="?"
324 'configure' uses this to find programs.
325
326=== Advanced compilation =======================================================
327
Jason Evans7b398ac2012-03-02 16:38:37 -0800328To build only parts of jemalloc, use the following targets:
329
330 build_lib_shared
331 build_lib_static
332 build_lib
333 build_doc_html
334 build_doc_man
335 build_doc
336
Jason Evanscfeccd32010-03-03 15:48:20 -0800337To install only parts of jemalloc, use the following targets:
Jason Evanscc00a152009-06-25 18:06:48 -0700338
Jason Evans55233992010-04-11 19:02:43 -0700339 install_bin
Jason Evanscfeccd32010-03-03 15:48:20 -0800340 install_include
Jason Evans7b398ac2012-03-02 16:38:37 -0800341 install_lib_shared
342 install_lib_static
Jason Evanscfeccd32010-03-03 15:48:20 -0800343 install_lib
Jason Evans7b398ac2012-03-02 16:38:37 -0800344 install_doc_html
345 install_doc_man
Jason Evansaee7fd22010-11-24 22:00:02 -0800346 install_doc
Jason Evanscc00a152009-06-25 18:06:48 -0700347
348To clean up build results to varying degrees, use the following make targets:
349
350 clean
351 distclean
352 relclean
353
354=== Advanced installation ======================================================
355
356Optionally, define make variables when invoking make, including (not
357exclusively):
358
359INCLUDEDIR="?"
360 Use this as the installation prefix for header files.
361
362LIBDIR="?"
363 Use this as the installation prefix for libraries.
364
365MANDIR="?"
366 Use this as the installation prefix for man pages.
367
Jason Evanscfeccd32010-03-03 15:48:20 -0800368DESTDIR="?"
Jason Evans2b769792010-12-16 14:13:46 -0800369 Prepend DESTDIR to INCLUDEDIR, LIBDIR, DATADIR, and MANDIR. This is useful
370 when installing to a different path than was specified via --prefix.
Jason Evanscfeccd32010-03-03 15:48:20 -0800371
Jason Evanscc00a152009-06-25 18:06:48 -0700372CC="?"
373 Use this to invoke the C compiler.
374
375CFLAGS="?"
376 Pass these flags to the compiler.
377
378CPPFLAGS="?"
379 Pass these flags to the C preprocessor.
380
381LDFLAGS="?"
382 Pass these flags when linking.
383
384PATH="?"
385 Use this to search for programs used during configuration and building.
386
387=== Development ================================================================
388
389If you intend to make non-trivial changes to jemalloc, use the 'autogen.sh'
390script rather than 'configure'. This re-generates 'configure', enables
391configuration dependency rules, and enables re-generation of automatically
392generated source files.
393
394The build system supports using an object directory separate from the source
395tree. For example, you can create an 'obj' directory, and from within that
396directory, issue configuration and build commands:
397
398 autoconf
399 mkdir obj
400 cd obj
401 ../configure --enable-autogen
402 make
Jason Evans7e11b382010-09-11 22:47:39 -0700403
404=== Documentation ==============================================================
405
Jason Evansaee7fd22010-11-24 22:00:02 -0800406The manual page is generated in both html and roff formats. Any web browser
407can be used to view the html manual. The roff manual page can be formatted
Jason Evans079687b2012-04-23 12:49:23 -0700408prior to installation via the following command:
Jason Evans7e11b382010-09-11 22:47:39 -0700409
Jason Evansaee7fd22010-11-24 22:00:02 -0800410 nroff -man -t doc/jemalloc.3