summaryrefslogtreecommitdiffstats
path: root/jemalloc/src
Commit message (Collapse)AuthorAgeFilesLines
...
* Simplify tcache object caching.Jason Evans2010-03-145-168/+125
| | | | | | | | | | | | | | | | | | | | Use chains of cached objects, rather than using arrays of pointers. Since tcache_bin_t is no longer dynamically sized, convert tcache_t's tbin to an array of structures, rather than an array of pointers. This implicitly removes tcache_bin_{create,destroy}(), which further simplifies the fast path for malloc/free. Use cacheline alignment for tcache_t allocations. Remove runtime configuration option for number of tcache bin slots, and replace it with a boolean option for enabling/disabling tcache. Limit the number of tcache objects to the lesser of TCACHE_NSLOTS_MAX and 2X the number of regions per run for the size class. For GC-triggered flush, discard 3/4 of the objects below the low water mark, rather than 1/2.
* Modify dirty page purging algorithm.Jason Evans2010-03-051-68/+61
| | | | | | | | | | | | | | | | Convert chunks_dirty from a red-black tree to a doubly linked list, and use it to purge dirty pages from chunks in FIFO order. Add a lock around the code that purges dirty pages via madvise(2), in order to avoid kernel contention. If lock acquisition fails, indefinitely postpone purging dirty pages. Add a lower limit of one chunk worth of dirty pages per arena for purging, in addition to the active:dirty ratio. When purging, purge all dirty pages from at least one chunk, but rather than purging enough pages to drop to half the purging threshold, merely drop to the threshold.
* Print version in malloc_stats_print().Jason Evans2010-03-041-0/+5
|
* Simplify malloc_message().Jason Evans2010-03-048-212/+234
| | | | | Rather than passing four strings to malloc_message(), malloc_write4(), and all the functions that use them, only pass one string.
* Move sampling init into prof_alloc_prep().Jason Evans2010-03-031-39/+51
| | | | | Move prof_sample_threshold initialization into prof_alloc_prep(), before using it to decide whether to capture a backtrace.
* Add release versioning support.0.0.0Jason Evans2010-03-021-0/+4
| | | | | | | Base version string on 'git describe --long', and provide cpp macros in jemalloc.h. Add the version mallctl.
* Allow prof.dump mallctl to specify filename.Jason Evans2010-03-022-75/+130
|
* Implement sampling for heap profiling.Jason Evans2010-03-025-54/+169
|
* Rewrite red-black trees.Jason Evans2010-02-282-15/+24
| | | | | | | | | | | Use left-leaning 2-3 red-black trees instead of left-leaning 2-3-4 red-black trees. This reduces maximum tree height from (3 lg n) to (2 lg n). Do lazy balance fixup, rather than transforming the tree during the down pass. This improves insert/remove speed by ~30%. Use callback-based iteration rather than macros.
* Don't implicitly enable interval-based profiling.Jason Evans2010-02-161-1/+1
|
* Fix a bug in nmalloc stats.Jason Evans2010-02-121-2/+0
|
* Avoid extra dumping for JEMALLOC_OPTIONS=L.Jason Evans2010-02-111-4/+6
|
* Wrap mallctl* references with JEMALLOC_P().Jason Evans2010-02-111-19/+28
|
* Restructure source tree.Jason Evans2010-02-1140-3626/+17
|
* Remove tracing (--enable-trace).Jason Evans2010-02-1114-1787/+11
| | | | | | | Remove all functionality related to tracing. This functionality was useful for understanding memory fragmentation during early algorithmic design of jemalloc, but it had little utility for non-trivial applications, due to the sheer volume of data written to disk.
* Implement interval-based heap profile dumping.Jason Evans2010-02-119-70/+228
| | | | | | Add mallctl interfaces for profiling parameters. Fix a file descriptor leak in heap profile dumping.
* Add JEMALLOC_PROF_PREFIX support.Jason Evans2010-02-111-8/+28
| | | | | If JEMALLOC_PROF_PREFIX is set in the environment, use it as the filename prefix when dumping heap profiles, rather than "jeprof".
* Dump /proc/<pid>/maps in heap profiles.Jason Evans2010-02-111-0/+52
|
* Fix a profiling bootstrap bug.Jason Evans2010-02-113-13/+25
| | | | | Bootstrap profiling in three stages, so that it is usable by the time the first application allocation occurs.
* Various heap profiling improvements.Jason Evans2010-02-119-26/+87
| | | | | | | | | Add the --disable-prof-libgcc configure option, and add backtracing based on libgcc, which is used by default. Fix a bug in hash(). Fix various configuration-dependent compilation errors.
* Implement allocation profiling and leack checking.Jason Evans2010-02-1021-162/+2706
| | | | | | | | | | | | | | Add the --enable-prof and --enable-prof-libunwind configure options. Add the B/b, F/f, I/i, L/l, and U/u JEMALLOC_OPTIONS. Interval-based profile dump triggering is not yet implemented. Add supporting generic code: * Add memory barriers. * Add prn (LCG PRNG). * Add hash (Murmur hash function). * Add ckh (cuckoo hash tables).
* Fix some comments and whitespace.Jason Evans2010-01-314-3/+5
|
* Fix large object stats collection bugs.Jason Evans2010-01-311-25/+31
|
* Fix bootstrapping crash.Jason Evans2010-01-294-22/+30
| | | | | | | | | | | | | If a custom small_size2bin table was required due to non-default size class settings, memory allocation prior to initializing chunk parameters would cause a crash due to division by 0. The fix re-orders the various *_boot() function calls. Bootstrapping is simpler now than it was before the base allocator started just using the chunk allocator directly. This allows arena_boot[01]() to be combined. Add error detection for pthread_atfork() and atexit() function calls.
* Remove tcache bin sorting during flush.Jason Evans2010-01-295-82/+0
| | | | | This feature caused significant performance degradation, and the fragmentation reduction benefits were difficult to quantify.
* Statistics fixes and cleanup.Jason Evans2010-01-292-16/+16
| | | | | | | | | | | Fix a type mismatch for "arenas.nlruns" mallctl access. This bug caused a crash during statistics printing on 64-bit systems. Fix the "stats.active" mallctl to include active memory in huge objects. Report active bytes for the whole application, as well as per arena. Remove several unused variables.
* Fix a chunk leak in chunk_alloc_mmap().Jason Evans2010-01-282-2/+13
| | | | | | | | A missing 'else' in chunk_alloc_mmap() caused an extra chunk to be allocated every time the optimistic alignment path was entered, since the following block would always be executed immediately afterward. This chunk leak caused no increase in physical memory usage, but virtual memory could grow until resource exaustion caused allocation failures.
* madvise(..., MADV_{RANODOM,NOSYNC}) swap files.Jason Evans2010-01-272-0/+22
| | | | Initialize malloc before calling into the ctl_*() functions.
* Implement mallctl{nametomib,bymib}().Jason Evans2010-01-2715-412/+1931
| | | | | | | | | | | | | Replace chunk stats code that was missing locking; this fixes a race condition that could corrupt chunk statistics. Converting malloc_stats_print() to use mallctl*(). Add a missing semicolon in th DSS code. Convert malloc_tcache_flush() to a mallctl. Convert malloc_swap_enable() to a set of mallctl's.
* Simplify malloc_{pre,post}fork().Jason Evans2010-01-251-37/+9
| | | | | | Revert to simpler lock acquistion/release code in malloc_{pre,post}fork(), since dynamic arena rebalancing is no longer implemented.
* Print merged arena stats iff multiple arenas.Jason Evans2010-01-251-7/+16
|
* Modify chunk_alloc() to support optional zeroing.Jason Evans2010-01-259-24/+44
| | | | | | | Use optional zeroing in arena_chunk_alloc() to avoid needless zeroing of chunks. This is particularly important in the context of swapfile and DSS allocation, since a long-lived application may commonly recycle chunks.
* Various minor cleanups.Jason Evans2010-01-255-17/+32
| | | | | | | | | | | Clean up whitespace. Lock access of swap_avail when printing stats. Use inttypes.h for portable printf() format specifiers, specifically for uint64_t (PRIu64). Change highchunks and curchunks stats from (unsigned long) to (size_t).
* Add the --enable-swap configure option.Jason Evans2010-01-2419-561/+1021
| | | | | | | | Add malloc_swap_enable(). Add the O/o JEMALLOC_OPTIONS flags, which control memory overcommit. Fix mapped memory stats reporting for arenas.
* Add the w4opaque argument to numerous functions.Jason Evans2010-01-197-111/+137
| | | | | Add the w4opaque argument malloc_message() and malloc_stats_print(), and propagate the change through all the internal APIs as necessary.
* Add merged arena stats printing.Jason Evans2010-01-183-110/+250
| | | | Add the "m" and "a" opts flags for malloc_stats_print().
* Add the write4 parameter to malloc_stats_print().Jason Evans2010-01-176-85/+146
| | | | Add malloc_cprintf() and malloc_vcprintf().
* Add the --with-install-suffix configure option.Jason Evans2010-01-1728-55/+83
| | | | Fix some bugs in the Makefile's install target.
* Refactor jemalloc.c into multiple source files.Jason Evans2010-01-1623-5484/+5957
| | | | | | | | | Fix a stats bug in large object curruns accounting. Replace tcache_bin_fill() with arena_tcache_fill(), and fix a bug in an OOM error path. Fix API name mangling to coexist with __attribute__((malloc)).
* Support malloc() even after tcache destruction has occurred, since other tsdJason Evans2010-01-131-12/+11
| | | | destructors may run after tcache_tsd's.
* Add the S/s JEMALLOC_OPTIONS flags to enable/disable tcache bin sorting.Jason Evans2010-01-041-1/+13
|
* Enhance the H/h MALLOC_OPTIONS flags to control the number of tcache bin slots,Jason Evans2010-01-041-60/+73
| | | | | | rather than just enabling/disabling the tcache. Fix an off-by-one bug in large object stats recording.
* Enhance the G/g MALLOC_OPTIONS flags to control GC sweep interval, rather thanJason Evans2010-01-031-12/+35
| | | | just enabling/disabling GC.
* Split run deallocation out of arena_dalloc_bin(), into arena_dalloc_bin_run().Jason Evans2010-01-031-47/+89
| | | | | | | | | | | | | Enhance bin run deallocation to avoid marking all pages as dirty, since the dirty bits are already correct for all but the first page, due to the use of arena_run_rc_{incr,decr}(). This tends to dramatically reduce the number of pages that are marked dirty. Modify arena_bin_run_size_calc() to assure that bin run headers never exceed one page. In practice, this can't happen unless hard-coded constants (related to RUN_MAX_OVRHD) are modified, but the dirty page tracking code assumes bin run headers never extend past the first page, so it seems worth making this a universally valid assumption.
* Make malloc_stats_print() a public symbol, and make it repeatedly callable.Jason Evans2010-01-033-374/+438
| | | | | Incrementally merge tcache stats, so that malloc_stats_print() always reports at least most events that have occurred thus far.
* Simplify JEMALLOC_ATTR_* macros to become JEMALLOC_ATTR().Jason Evans2010-01-035-25/+41
| | | | | | | | | | | Use JEMALLOC_ATTR(tls_model("initial-exec)) instead of -ftls-model=initial-exec so that libjemalloc_pic.a can be directly linked into another library without needing linker options changes. Add attributes to malloc, calloc, and posix_memalign, for compatibility with glibc's declarations. Add function prototypes for the standard malloc(3) API.
* Add the COPYING file, and consolidate copyright/licensing information.Jason Evans2010-01-039-303/+1
|
* Implement per size class stats collection for large objects.Jason Evans2009-12-291-52/+150
|
* Base maximum dirty page count on proportion of active memory.Jason Evans2009-12-291-66/+243
| | | | | | Add dirty page tracking for pages within active small/medium object runs. Reduce chunks_dirty red-black tree operations via lazy updating.
* Use "lg" prefix rather than "2pow" suffix to indicate base 2 logarithms.Jason Evans2009-12-292-119/+117
| | | | Remove the default definition for SIZEOF_INT_2POW.