- Feb 28, 2017
-
-
Jason Evans authored
This disables run_tests.sh configurations that use the combination of 32-bit clang and heap profiling.
-
Jason Evans authored
This regression was introduced by 194d6f9d (Restructure *CFLAGS/*CXXFLAGS configuration.).
-
- Feb 27, 2017
-
-
Jason Evans authored
This fixes a regression introduced by d433471f (Derive {allocated,nmalloc,ndalloc,nrequests}_large stats.).
-
Jason Evans authored
Remove obsolete unit test scaffolding for extent quantization. Remove redundant assertions. Add an assertion to extents_first_best_fit_locked() that should help prevent aligned allocation regressions.
-
- Feb 26, 2017
-
-
Jason Evans authored
-
- Feb 24, 2017
-
-
Qi Wang authored
We don't touch witness at all when config_debug == false. Let's only pay the memory cost in malloc_mutex_s when needed. Note that when !config_debug, we keep the field in a union so that we don't have to do #ifdefs in multiple places.
-
- Feb 23, 2017
-
-
Jason Evans authored
malloc_conf does not reliably work with MSVC, which complains of "inconsistent dll linkage", i.e. its inability to support the application overriding malloc_conf when dynamically linking/loading. Work around this limitation by adding test harness support for per test shell script sourcing, and converting all tests to use MALLOC_CONF instead of malloc_conf.
-
- Feb 22, 2017
-
-
Jason Evans authored
This complements 94c5d22a (Remove mb.h, which is unused).
-
- Feb 21, 2017
-
-
Jason Evans authored
This removes an unneeded library dependency when falling back to intrinsics-based backtracing (or failing to enable heap profiling at all).
-
Jason Evans authored
Remove a call to arena_maybe_purge() that was necessary for ratio-based purging, but is obsolete in the context of decay-based purging.
-
Jason Evans authored
-
- Feb 17, 2017
-
-
Jason Evans authored
Extent splitting and coalescing is a major component of large allocation overhead, and disabling coalescing of cached extents provides a simple and effective hysteresis mechanism. Once two-phase purging is implemented, it will probably make sense to leave coalescing disabled for the first phase, but coalesce during the second phase.
-
Jason Evans authored
Refactor extent_can_coalesce(), extent_coalesce(), and extent_record() to avoid needlessly repeating extent [de]activation operations.
-
Jason Evans authored
Mapped memory increases when extent_alloc_wrapper() succeeds, and decreases when extent_dalloc_wrapper() is called (during purging).
-
- Feb 16, 2017
-
-
Jason Evans authored
This removes the last use of arena->lock.
-
Jason Evans authored
This mildly reduces stats update overhead during normal operation.
-
Jason Evans authored
This replaces arena->lock synchronization.
-
Jason Evans authored
-
Jason Evans authored
-
Jason Evans authored
-
- Feb 13, 2017
-
-
Jason Evans authored
This avoids a gcc diagnostic note: note: The ABI for passing parameters with 64-byte alignment has changed in GCC 4.6 This note related to the cacheline alignment of rtree_ctx_t, which was introduced by 4a346f55 (Replace rtree path cache with LRU cache.).
-
- Feb 10, 2017
-
-
Jason Evans authored
Fix extent_alloc_dss() to account for bytes that are not a multiple of the page size. This regression was introduced by 577d4572 (Make dss operations lockless.), which was first released in 4.3.0.
-
Jason Evans authored
Fix rtree_subkey() to use uintptr_t rather than unsigned for key bitmasking. This regression was introduced by 4a346f55 (Replace rtree path cache with LRU cache.).
-
Jason Evans authored
This fixes interactions with witness_assert_depth[_to_rank](), which was added in d0e93ada (Add witness_assert_depth[_to_rank]().).
-
- Feb 09, 2017
-
-
Jason Evans authored
-
Jason Evans authored
This avoids worst case behavior if e.g. another thread is preempted while owning the resource the spinning thread is waiting for.
-
Jason Evans authored
-
Jason Evans authored
NULL can never actually be inserted in practice, and removing support allows a branch to be removed from the fast path.
-
Jason Evans authored
Rather than dynamically building a table to aid per level computations, define a constant table at compile time. Omit both high and low insignificant bits. Use one to three tree levels, depending on the number of significant bits.
-
Jason Evans authored
A subsequent change instead ignores insignificant high bits.
-
Jason Evans authored
-
Jason Evans authored
Anything but a hit in the first element of the lookup cache is expensive enough to negate the benefits of inlining.
-
Jason Evans authored
Rework rtree_ctx_t to encapsulate an rtree leaf LRU lookup cache rather than a single-path element lookup cache. The replacement is logically much simpler, as well as slightly faster in the fast path case and less prone to degraded performance during non-trivial sequences of lookups.
-
Jason Evans authored
-
- Feb 07, 2017
-
-
Jason Evans authored
-
Jason Evans authored
Read adjacent rtree elements while holding element locks, since the extents mutex only protects against relevant like-state extent mutation. Fix management of the 'coalesced' loop state variable to merge forward/backward results, rather than overwriting the result of forward coalescing if attempting to coalesce backward. In practice this caused no correctness issues, but could cause extra iterations in rare cases. These regressions were introduced by d27f29b4 (Disentangle arena and extent locking.).
-
- Feb 04, 2017
-
-
Jason Evans authored
Set extent as active prior to registration so that other threads can't modify it in the absence of locking. This regression was introduced by d27f29b4 (Disentangle arena and extent locking.), via non-obvious means. Removal of extents_mtx protection during extent_grow_retained() execution opened up the race, but in the presence of that locking, the code was safe. This resolves #599.
-
Jason Evans authored
Do not check for overflow unless it is actually a possibility.
-
Jason Evans authored
Fix compute_size_with_overflow() to use a high_bits mask that has the high bits set, rather than the low bits. This regression was introduced by 5154ff32 (Unify the allocation paths).
-
- Feb 02, 2017
-
-
Jason Evans authored
Refactor arena and extent locking protocols such that arena and extent locks are never held when calling into the extent_*_wrapper() API. This requires extra care during purging since the arena lock no longer protects the inner purging logic. It also requires extra care to protect extents from being merged with adjacent extents. Convert extent_t's 'active' flag to an enumerated 'state', so that retained extents are explicitly marked as such, rather than depending on ring linkage state. Refactor the extent collections (and their synchronization) for cached and retained extents into extents_t. Incorporate LRU functionality to support purging. Incorporate page count accounting, which replaces arena->ndirty and arena->stats.retained. Assert that no core locks are held when entering any internal [de]allocation functions. This is in addition to existing assertions that no locks are held when entering external [de]allocation functions. Audit and document synchronization protocols for all arena_t fields. This fixes a potential deadlock due to recursive allocation during gdump, in a similar fashion to b49c649b (Fix lock order reversal during gdump.), but with a necessarily much broader code impact.
-