1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
This is a minimal-effort stand-alone jemalloc distribution for Linux. The main
rough spots are:
* __isthreaded must be hard-coded, since the pthreads library really needs to
be involved in order to toggle it at run time. Therefore, this distribution
builds two separate libraries:
+ libjemalloc_mt.so.0 : Use for multi-threaded applications.
+ libjemalloc.so.0 : Use for single-threaded applications.
Both libraries link against libpthread, though with a bit more code hacking,
this dependency could be removed for the single-threaded version.
* MALLOC_MAG (thread-specific caching, using magazines) is disabled, because
special effort is required to avoid memory leaks when it is enabled. To make
cleanup automatic, we would need help from the pthreads library. If you
enable MALLOC_MAG, be sure to call _malloc_thread_cleanup() in each thread
just before it exits.
* The code that determines the number of CPUs is sketchy. The trouble is that
we must avoid any memory allocation during early initialization.
In order to build:
make
This generates two shared libraries, which you can either link against, or
pre-load.
Linking and running, where /path/to is the path to libjemalloc (-lpthread
required even for libjemalloc.so):
gcc app.o -o app -L/path/to -ljemalloc_mt -lpthread
LD_LIBRARY_PATH=/path/to app
Pre-loading:
LD_PRELOAD=/path/to/libjemalloc_mt.so.0 app
jemalloc has a lot of run-time tuning options. See the man page for details:
nroff -man malloc.3 | less
In particular, take a look at the B, F, and N options. If you enable
MALLOC_MAG, look at the G and R options.
If your application is crashing, or performance seems to be lacking, enable
assertions and statistics gathering by removing MALLOC_PRODUCTION from CPPFLAGS
in the Makefile. In order to print a statistics summary at program exit, run
your application like:
LD_PRELOAD=/path/to/libjemalloc_mt.so.0 MALLOC_OPTIONS=P app
Please contact Jason Evans <jasone@canonware.com> with questions, comments, bug
reports, etc.
|