| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
| |
Move a loop variable declaration out of for(usigned i = 0; ...) in order
to avoid the need for C99 compilation.
|
|
|
|
|
| |
Increase PRN 'a' and 'c' constants, so that high bits tend to cascade
more.
|
|
|
|
|
|
| |
Fix a bug in leak context count reporting that tended to cause the
number of contexts to be underreported. The reported number of leaked
objects and bytes were not affected by this bug.
|
|
|
|
|
| |
Increase the default backtrace depth, because shallow backtraces tend to
result in confusing pprof output graphs.
|
|
|
|
|
|
|
|
| |
Add the R option to control whether cumulative heap profile data
are maintained. Add the T option to control the size of per thread
backtrace caches, primarily because when the R option is specified,
backtraces that no longer have allocations associated with them are
discarded as soon as no thread caches refer to them.
|
|
|
|
|
|
|
| |
Remove malloc_swap_enable(), which was obsoleted by the "swap.fds"
mallctl. The prototype for malloc_swap_enable() was removed from
jemalloc/jemalloc.h, but the function itself was accidentally left in
place.
|
|
|
|
|
|
| |
Base dynamic structure size on offsetof(), rather than subtracting the
size of the dynamic structure member. Results could differ on systems
with strict data structure alignment requirements.
|
|
|
|
|
|
| |
Invert the chunk map bit that tracks whether a page is zeroed, so that
for zeroed arena chunks, the interior of the page map does not need to
be initialized (as it consists entirely of zero bytes).
|
|
|
|
|
|
| |
Omit the first map_bias elements of the map in arena_chunk_t. This
avoids barely spilling over into an extra chunk header page for common
chunk sizes.
|
| |
|
|
|
|
|
|
|
|
| |
Use INT_MAX instead of MAX_INT in ALLOCM_ALIGN(), and #include
<limits.h> in order to get its definition.
Modify prof code related to hash tables to avoid aliasing warnings from
gcc 4.1.2 (gcc 4.4.0 and 4.4.3 do not warn).
|
|
|
|
|
|
| |
Add --enable-cc-silence, which can be used to silence harmless warnings.
Fix an aliasing bug in ckh_pointer_hash().
|
|
|
|
|
| |
If memalign() and/or valloc() are present on the system, override them
in order to avoid mixed allocator usage.
|
|
|
|
|
| |
Create the buferror() function, which wraps strerror_r(). This is
necessary because glibc provides a non-standard strerror_r().
|
|
|
|
|
|
|
| |
Remove assertions that malloc_{pre,post}fork() are only called if
threading is enabled. This was true of these functions in the context
of FreeBSD's libc, but now the functions are called unconditionally as a
result of registering them with pthread_atfork().
|
|
|
|
|
|
| |
Add allocm(), rallocm(), sallocm(), and dallocm(), which are a
functional superset of malloc(), calloc(), posix_memalign(),
malloc_usable_size(), and free().
|
|
|
|
|
|
|
| |
Move the table of size classes from jemalloc.c to the manual page. When
manually formatting the manual page, it is now necessary to use:
nroff -man -t jemalloc.3
|
|
|
|
|
| |
Add Mac OS X support, based in large part on the OS X support in
Mozilla's version of jemalloc.
|
|
|
|
|
|
|
| |
Make it possible for each thread to manage which arena it is associated
with.
Implement the 'tests' and 'check' build targets.
|
|
|
|
|
|
| |
Move assert() calls up in arena_run_reg_alloc(), so that a corrupt
pointer will likely be caught by an assertion *before* it is
dereferenced.
|
|
|
|
|
|
|
|
|
|
| |
If multiple threads race to initialize malloc, the loser(s) busy-wait
until initialization is complete. Add a missing mutex lock so that the
loser(s) properly release the initialization mutex. Under some
race conditions, this flaw could have caused one or more threads to
become permanently blocked.
Reported by Terrell Magee.
|
|
|
|
|
|
| |
Fix the libunwind version of prof_backtrace() to set the backtrace depth
for all possible code paths. This fixes the zero-length backtrace
problem when using libunwind.
|
|
|
|
|
|
| |
When heap profiling is enabled but deactivated, there is no need to call
isalloc(ptr) in prof_{malloc,realloc}(). Avoid these calls, so that
profiling overhead under such conditions is negligible.
|
|
|
|
|
|
| |
If there is more than one arena, initialize next_arena so that the
first and second threads to allocate memory use arenas 0 and 1, rather
than both using arena 0.
|
|
|
|
|
| |
Add MAP_NORESERVE to the chunk_mmap() case being used by
chunk_swap_enable(), if the system supports it.
|
|
|
|
|
|
|
| |
Properly maintain tcache_bin_t's avail pointer such that it is NULL if
no objects are cached. This only caused problems during thread cache
destruction, since cache flushing otherwise never occurs on an empty
bin.
|
|
|
|
|
|
|
| |
Properly set the context associated with each allocated object, even
when the object is not sampled.
Remove debug print code that slipped in.
|
|
|
|
|
|
|
|
|
| |
Fix arena_chunk_dealloc() to put the new spare in a consistent state before
dropping the arena mutex to deallocate the previous spare.
Fix arena_run_dalloc() to insert a newly dirtied chunk into the
chunks_dirty list before potentially deallocating the chunk, so that dirty
page accounting is self-consistent.
|
|
|
|
|
|
|
|
| |
Initialize bt2cnt_tsd so that cleanup at thread exit actually happens.
Associate (prof_ctx_t *) with allocated objects, rather than
(prof_thr_cnt_t *). Each thread must always operate on its own
(prof_thr_cnt_t *), and an object may outlive the thread that allocated it.
|
|
|
|
|
| |
Linux kernels have been capable of concurrent page table access since
2.6.27, so this hack is not necessary for modern kernels.
|
|
|
|
|
|
| |
Now that JEMALLOC_OPTIONS=P isn't the only way to cause stats_print() to
be called, opt_stats_print must actually be checked when reporting the
state of the P/p option.
|
|
|
|
|
| |
Remove a duplicate prof_leave() call in an error path through
prof_dump().
|
| |
|
|
|
|
|
| |
Leak reporting is useful even if sampling is enabled; some leaks may not
be reported, but those reported are still genuine leaks.
|
|
|
|
|
|
|
| |
Add the E/e options to control whether the application starts with
sampling active/inactive (secondary control to F/f). Add the
prof.active mallctl so that the application can activate/deactivate
sampling on the fly.
|
|
|
|
|
|
| |
Make it possible to disable interval-triggered profile dumping, even if
profiling is enabled. This is useful if the user only wants a single
dump at exit, or if the application manually triggers profile dumps.
|
|
|
|
|
|
|
|
|
| |
If the mean heap sampling interval is larger than one page, simulate
sampled small objects with large objects. This allows profiling context
pointers to be omitted for small objects. As a result, the memory
overhead for sampling decreases as the sampling interval is increased.
Fix a compilation error in the profiling code.
|
| |
|
|
|
|
|
|
|
| |
Properly set/clear CHUNK_MAP_ZEROED for all purged pages, according to
whether the pages are (potentially) file-backed or anonymous. This was
merely a performance pessimization for the anonymous mapping case, but
was a calloc()-related bug for the swap_enabled case.
|
|
|
|
|
| |
Split arena->runs_avail into arena->runs_avail_{clean,dirty}, and
preferentially allocate dirty runs.
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
| |
Initialize small run header before dropping arena->lock,
arena_chunk_purge() relies on valid small run headers during run
iteration.
Add some assertions.
|
|
|
|
|
|
| |
Check for interior pointers in arena_[ds]alloc().
Check for corrupt pointers in tcache_alloc().
|
| |
|
|
|
|
|
|
| |
Update arena->nactive when pseudo-allocating runs in
arena_chunk_purge(), since arena_run_dalloc() subtracts from
arena->nactive.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
For bin-related allocation, protect data structures with bin locks
rather than arena locks. Arena locks remain for run
allocation/deallocation and other miscellaneous operations.
Restructure statistics counters to maintain per bin
allocated/nmalloc/ndalloc, but continue to provide arena-wide statistics
via aggregation in the ctl code.
|
|
|
|
|
|
|
| |
Use chained run free lists instead of bitmaps to track free objects
within small runs.
Remove reference counting for small object run pages.
|