Jason Evans
aa63d5d377
Fix ffs_zu() compilation error on MinGW.
...
This regression was caused by 9f4ee6034c
(Refactor jemalloc_ffs*() into ffs_*().).
2016-02-24 14:01:47 -08:00
Jason Evans
ca8fffb5c1
Silence miscellaneous 64-to-32-bit data loss warnings.
2016-02-24 13:16:51 -08:00
Jason Evans
b3d0070b14
Compile with -Wshorten-64-to-32.
...
This will prevent accidental creation of potential integer truncation
bugs when developing on LP64 systems.
2016-02-24 13:03:48 -08:00
Jason Evans
9e1810ca9d
Silence miscellaneous 64-to-32-bit data loss warnings.
2016-02-24 13:03:48 -08:00
Jason Evans
1c42a04cc6
Change lg_floor() return type from size_t to unsigned.
2016-02-24 13:03:48 -08:00
Jason Evans
0931cecbfa
Use ssize_t for readlink() rather than int.
2016-02-24 13:03:48 -08:00
Jason Evans
8f683b94a7
Make opt_narenas unsigned rather than size_t.
2016-02-24 13:03:48 -08:00
Jason Evans
603b3bd413
Make nhbins unsigned rather than size_t.
2016-02-24 13:03:48 -08:00
Jason Evans
8dd5115ede
Explicitly cast mib[] elements to unsigned where appropriate.
2016-02-24 13:03:48 -08:00
Jason Evans
9f4ee6034c
Refactor jemalloc_ffs*() into ffs_*().
...
Use appropriate versions to resolve 64-to-32-bit data loss warnings.
2016-02-24 13:03:48 -08:00
Dmitri Smirnov
b41a07c31a
Fix Windows build issues
...
This resolves #333 .
2016-02-23 18:55:45 -08:00
Jason Evans
ae45142adc
Collapse arena_avail_tree_* into arena_run_tree_*.
...
These tree types converged to become identical, yet they still had
independently generated red-black tree implementations.
2016-02-23 18:27:24 -08:00
Dave Watson
3417a304cc
Separate arena_avail trees
...
Separate run trees by index, replacing the previous quantize logic.
Quantization by index is now performed only on insertion / removal from
the tree, and not on node comparison, saving some cpu. This also means
we don't have to dereference the miscelm* pointers, saving half of the
memory loads from miscelms/mapbits that have fallen out of cache. A
linear scan of the indicies appears to be fast enough.
The only cost of this is an extra tree array in each arena.
2016-02-23 18:09:36 -08:00
Dave Watson
2b1fc90b7b
Remove rbt_nil
...
Since this is an intrusive tree, rbt_nil is the whole size of the node
and can be quite large. For example, miscelm is ~100 bytes.
2016-02-23 18:09:25 -08:00
Jason Evans
0da8ce1e96
Use table lookup for run_quantize_{floor,ceil}().
...
Reduce run quantization overhead by generating lookup tables during
bootstrapping, and using the tables for all subsequent run quantization.
2016-02-22 16:47:34 -08:00
Jason Evans
08551eee58
Fix run_quantize_ceil().
...
In practice this bug had limited impact (and then only by increasing
chunk fragmentation) because run_quantize_ceil() returned correct
results except for inputs that could only arise from aligned allocation
requests that required more than page alignment.
This bug existed in the original run quantization implementation, which
was introduced by 8a03cf039c
(Implement
cache index randomization for large allocations.).
2016-02-22 16:28:00 -08:00
Jason Evans
a9a4684792
Test run quantization.
...
Also rename run_quantize_*() to improve clarity. These tests
demonstrate that run_quantize_ceil() is flawed.
2016-02-22 14:58:05 -08:00
Jason Evans
817d9030a5
Indentation style cleanup.
2016-02-22 10:44:58 -08:00
Jason Evans
9bad079039
Refactor time_* into nstime_*.
...
Use a single uint64_t in nstime_t to store nanoseconds rather than using
struct timespec. This reduces fragility around conversions between long
and uint64_t, especially missing casts that only cause problems on
32-bit platforms.
2016-02-21 21:39:05 -08:00
Jason Evans
788d29d397
Fix Windows-specific prof-related compilation portability issues.
2016-02-20 23:46:14 -08:00
Jason Evans
fd9cd7a6cc
Fix time_update() to compile and work on MinGW.
2016-02-20 23:45:22 -08:00
Jason Evans
56139dc403
Remove _WIN32-specific struct timespec declaration.
...
struct timespec is already defined by the system (at least on MinGW).
2016-02-20 23:43:17 -08:00
Jason Evans
ecae12323d
Fix overflow in prng_range().
...
Add jemalloc_ffs64() and use it instead of jemalloc_ffsl() in
prng_range(), since long is not guaranteed to be a 64-bit type.
2016-02-20 23:41:33 -08:00
Jason Evans
aac93f414e
Add symbol mangling for prng_[lg_]range().
2016-02-20 11:26:00 -08:00
rustyx
984c64f724
Add MS Visual Studio 2015 support
2016-02-20 10:55:23 -08:00
rustyx
3c2c5a5071
Fix warning in ipalloc
2016-02-20 10:55:18 -08:00
rustyx
efbee86278
Prevent MSVC from optimizing away tls_callback ( resolves #318 )
2016-02-20 10:52:53 -08:00
rustyx
7f283980f0
getpid() fix for Win32
2016-02-20 10:52:53 -08:00
rustyx
90c7269c05
Add CPU "pause" intrinsic for MSVC
2016-02-20 10:52:48 -08:00
rustyx
bc49863fb5
Fix error "+ 2")syntax error: invalid arithmetic operator (error token is " in Cygwin x64
2016-02-20 10:50:24 -08:00
rustyx
46e0b2301c
Detect LG_SIZEOF_PTR depending on MSVC platform target
2016-02-20 10:50:24 -08:00
Christopher Ferris
effaf7d40f
Fix a typo in the ckh_search() prototype.
2016-02-20 10:26:17 -08:00
Jason Evans
a0aaad1afa
Handle unaligned keys in hash().
...
Reported by Christopher Ferris <cferris@google.com>.
2016-02-20 10:23:48 -08:00
Jason Evans
9f24c94474
Increase test coverage in test_decay_ticks.
2016-02-20 09:02:49 -08:00
Jason Evans
243f7a0508
Implement decay-based unused dirty page purging.
...
This is an alternative to the existing ratio-based unused dirty page
purging, and is intended to eventually become the sole purging
mechanism.
Add mallctls:
- opt.purge
- opt.decay_time
- arena.<i>.decay
- arena.<i>.decay_time
- arenas.decay_time
- stats.arenas.<i>.decay_time
This resolves #325 .
2016-02-19 20:56:21 -08:00
Jason Evans
8e82af1166
Implement smoothstep table generation.
...
Check in a generated smootherstep table as smoothstep.h rather than
generating it at configure time, since not all systems (e.g. Windows)
have dc.
2016-02-19 20:56:15 -08:00
Jason Evans
1a4ad3c0fa
Refactor out arena_compute_npurge().
...
Refactor out arena_compute_npurge() by integrating its logic into
arena_stash_dirty() as an incremental computation.
2016-02-19 20:32:37 -08:00
Jason Evans
db927b6727
Refactor arenas_cache tsd.
...
Refactor arenas_cache tsd into arenas_tdata, which is a structure of
type arena_tdata_t.
2016-02-19 20:32:37 -08:00
Jason Evans
4985dc681e
Refactor arena_ralloc_no_move().
...
Refactor early return logic in arena_ralloc_no_move() to return early on
failure rather than on success.
2016-02-19 20:32:37 -08:00
Jason Evans
578cd16581
Refactor arena_malloc_hard() out of arena_malloc().
2016-02-19 20:32:32 -08:00
Jason Evans
34676d3369
Refactor prng* from cpp macros into inline functions.
...
Remove 32-bit variant, convert prng64() to prng_lg_range(), and add
prng_range().
2016-02-19 20:29:06 -08:00
Jason Evans
c87ab25d18
Use ticker for incremental tcache GC.
2016-02-19 20:29:06 -08:00
Jason Evans
9998000b2b
Implement ticker.
...
Implement ticker, which provides a simple API for ticking off some
number of events before indicating that the ticker has hit its limit.
2016-02-19 20:29:06 -08:00
Jason Evans
94451d184b
Flesh out time_*() API.
2016-02-19 20:29:06 -08:00
Cameron Evans
e5d5a4a517
Add time_update().
2016-02-19 20:29:06 -08:00
Jason Evans
f829009929
Add --with-malloc-conf.
...
Add --with-malloc-conf, which makes it possible to embed a default
options string during configuration.
2016-02-19 20:29:06 -08:00
Jason Evans
ef349f3f94
Fix arena_sdalloc() line wrapping.
2016-02-19 20:29:06 -08:00
Jason Evans
49931bd8ff
Fix test_stats_arenas_summary fragility.
...
Fix test_stats_arenas_summary to deallocate before asserting that
purging must have happened.
2016-02-19 20:29:06 -08:00
Jason Evans
b24f74b862
Don't rely on unpurged chunks in xallocx() test.
2016-02-19 17:02:25 -08:00
Jason Evans
109712b681
Fix a documentation editing error.
2016-02-19 17:02:25 -08:00