xref: /freebsd-12.1/contrib/jemalloc/ChangeLog (revision 0ef50b4e)
1a4bd5210SJason EvansFollowing are change highlights associated with official releases.  Important
2d0e79aa3SJason Evansbug fixes are all mentioned, but some internal enhancements are omitted here for
3d0e79aa3SJason Evansbrevity.  Much more detail can be found in the git revision history:
4a4bd5210SJason Evans
5706d9bd1SJason Evans    https://github.com/jemalloc/jemalloc
6706d9bd1SJason Evans
7*0ef50b4eSJason Evans* 5.1.0 (May 4th, 2018)
8*0ef50b4eSJason Evans
9*0ef50b4eSJason Evans  This release is primarily about fine-tuning, ranging from several new features
10*0ef50b4eSJason Evans  to numerous notable performance and portability enhancements.  The release and
11*0ef50b4eSJason Evans  prior dev versions have been running in multiple large scale applications for
12*0ef50b4eSJason Evans  months, and the cumulative improvements are substantial in many cases.
13*0ef50b4eSJason Evans
14*0ef50b4eSJason Evans  Given the long and successful production runs, this release is likely a good
15*0ef50b4eSJason Evans  candidate for applications to upgrade, from both jemalloc 5.0 and before.  For
16*0ef50b4eSJason Evans  performance-critical applications, the newly added TUNING.md provides
17*0ef50b4eSJason Evans  guidelines on jemalloc tuning.
18*0ef50b4eSJason Evans
19*0ef50b4eSJason Evans  New features:
20*0ef50b4eSJason Evans  - Implement transparent huge page support for internal metadata.  (@interwq)
21*0ef50b4eSJason Evans  - Add opt.thp to allow enabling / disabling transparent huge pages for all
22*0ef50b4eSJason Evans    mappings.  (@interwq)
23*0ef50b4eSJason Evans  - Add maximum background thread count option.  (@djwatson)
24*0ef50b4eSJason Evans  - Allow prof_active to control opt.lg_prof_interval and prof.gdump.
25*0ef50b4eSJason Evans    (@interwq)
26*0ef50b4eSJason Evans  - Allow arena index lookup based on allocation addresses via mallctl.
27*0ef50b4eSJason Evans    (@lionkov)
28*0ef50b4eSJason Evans  - Allow disabling initial-exec TLS model.  (@davidtgoldblatt, @KenMacD)
29*0ef50b4eSJason Evans  - Add opt.lg_extent_max_active_fit to set the max ratio between the size of
30*0ef50b4eSJason Evans    the active extent selected (to split off from) and the size of the requested
31*0ef50b4eSJason Evans    allocation.  (@interwq, @davidtgoldblatt)
32*0ef50b4eSJason Evans  - Add retain_grow_limit to set the max size when growing virtual address
33*0ef50b4eSJason Evans    space.  (@interwq)
34*0ef50b4eSJason Evans  - Add mallctl interfaces:
35*0ef50b4eSJason Evans    + arena.<i>.retain_grow_limit  (@interwq)
36*0ef50b4eSJason Evans    + arenas.lookup  (@lionkov)
37*0ef50b4eSJason Evans    + max_background_threads  (@djwatson)
38*0ef50b4eSJason Evans    + opt.lg_extent_max_active_fit  (@interwq)
39*0ef50b4eSJason Evans    + opt.max_background_threads  (@djwatson)
40*0ef50b4eSJason Evans    + opt.metadata_thp  (@interwq)
41*0ef50b4eSJason Evans    + opt.thp  (@interwq)
42*0ef50b4eSJason Evans    + stats.metadata_thp  (@interwq)
43*0ef50b4eSJason Evans
44*0ef50b4eSJason Evans  Portability improvements:
45*0ef50b4eSJason Evans  - Support GNU/kFreeBSD configuration.  (@paravoid)
46*0ef50b4eSJason Evans  - Support m68k, nios2 and SH3 architectures.  (@paravoid)
47*0ef50b4eSJason Evans  - Fall back to FD_CLOEXEC when O_CLOEXEC is unavailable.  (@zonyitoo)
48*0ef50b4eSJason Evans  - Fix symbol listing for cross-compiling.  (@tamird)
49*0ef50b4eSJason Evans  - Fix high bits computation on ARM.  (@davidtgoldblatt, @paravoid)
50*0ef50b4eSJason Evans  - Disable the CPU_SPINWAIT macro for Power.  (@davidtgoldblatt, @marxin)
51*0ef50b4eSJason Evans  - Fix MSVC 2015 & 2017 builds.  (@rustyx)
52*0ef50b4eSJason Evans  - Improve RISC-V support.  (@EdSchouten)
53*0ef50b4eSJason Evans  - Set name mangling script in strict mode.  (@nicolov)
54*0ef50b4eSJason Evans  - Avoid MADV_HUGEPAGE on ARM.  (@marxin)
55*0ef50b4eSJason Evans  - Modify configure to determine return value of strerror_r.
56*0ef50b4eSJason Evans    (@davidtgoldblatt, @cferris1000)
57*0ef50b4eSJason Evans  - Make sure CXXFLAGS is tested with CPP compiler.  (@nehaljwani)
58*0ef50b4eSJason Evans  - Fix 32-bit build on MSVC.  (@rustyx)
59*0ef50b4eSJason Evans  - Fix external symbol on MSVC.  (@maksqwe)
60*0ef50b4eSJason Evans  - Avoid a printf format specifier warning.  (@jasone)
61*0ef50b4eSJason Evans  - Add configure option --disable-initial-exec-tls which can allow jemalloc to
62*0ef50b4eSJason Evans    be dynamically loaded after program startup.  (@davidtgoldblatt, @KenMacD)
63*0ef50b4eSJason Evans  - AArch64: Add ILP32 support.  (@cmuellner)
64*0ef50b4eSJason Evans  - Add --with-lg-vaddr configure option to support cross compiling.
65*0ef50b4eSJason Evans    (@cmuellner, @davidtgoldblatt)
66*0ef50b4eSJason Evans
67*0ef50b4eSJason Evans  Optimizations and refactors:
68*0ef50b4eSJason Evans  - Improve active extent fit with extent_max_active_fit.  This considerably
69*0ef50b4eSJason Evans    reduces fragmentation over time and improves virtual memory and metadata
70*0ef50b4eSJason Evans    usage.  (@davidtgoldblatt, @interwq)
71*0ef50b4eSJason Evans  - Eagerly coalesce large extents to reduce fragmentation.  (@interwq)
72*0ef50b4eSJason Evans  - sdallocx: only read size info when page aligned (i.e. possibly sampled),
73*0ef50b4eSJason Evans    which speeds up the sized deallocation path significantly.  (@interwq)
74*0ef50b4eSJason Evans  - Avoid attempting new mappings for in place expansion with retain, since
75*0ef50b4eSJason Evans    it rarely succeeds in practice and causes high overhead.  (@interwq)
76*0ef50b4eSJason Evans  - Refactor OOM handling in newImpl.  (@wqfish)
77*0ef50b4eSJason Evans  - Add internal fine-grained logging functionality for debugging use.
78*0ef50b4eSJason Evans    (@davidtgoldblatt)
79*0ef50b4eSJason Evans  - Refactor arena / tcache interactions.  (@davidtgoldblatt)
80*0ef50b4eSJason Evans  - Refactor extent management with dumpable flag.  (@davidtgoldblatt)
81*0ef50b4eSJason Evans  - Add runtime detection of lazy purging.  (@interwq)
82*0ef50b4eSJason Evans  - Use pairing heap instead of red-black tree for extents_avail.  (@djwatson)
83*0ef50b4eSJason Evans  - Use sysctl on startup in FreeBSD.  (@trasz)
84*0ef50b4eSJason Evans  - Use thread local prng state instead of atomic.  (@djwatson)
85*0ef50b4eSJason Evans  - Make decay to always purge one more extent than before, because in
86*0ef50b4eSJason Evans    practice large extents are usually the ones that cross the decay threshold.
87*0ef50b4eSJason Evans    Purging the additional extent helps save memory as well as reduce VM
88*0ef50b4eSJason Evans    fragmentation.  (@interwq)
89*0ef50b4eSJason Evans  - Fast division by dynamic values.  (@davidtgoldblatt)
90*0ef50b4eSJason Evans  - Improve the fit for aligned allocation.  (@interwq, @edwinsmith)
91*0ef50b4eSJason Evans  - Refactor extent_t bitpacking.  (@rkmisra)
92*0ef50b4eSJason Evans  - Optimize the generated assembly for ticker operations.  (@davidtgoldblatt)
93*0ef50b4eSJason Evans  - Convert stats printing to use a structured text emitter.  (@davidtgoldblatt)
94*0ef50b4eSJason Evans  - Remove preserve_lru feature for extents management.  (@djwatson)
95*0ef50b4eSJason Evans  - Consolidate two memory loads into one on the fast deallocation path.
96*0ef50b4eSJason Evans    (@davidtgoldblatt, @interwq)
97*0ef50b4eSJason Evans
98*0ef50b4eSJason Evans  Bug fixes (most of the issues are only relevant to jemalloc 5.0):
99*0ef50b4eSJason Evans  - Fix deadlock with multithreaded fork in OS X.  (@davidtgoldblatt)
100*0ef50b4eSJason Evans  - Validate returned file descriptor before use.  (@zonyitoo)
101*0ef50b4eSJason Evans  - Fix a few background thread initialization and shutdown issues.  (@interwq)
102*0ef50b4eSJason Evans  - Fix an extent coalesce + decay race by taking both coalescing extents off
103*0ef50b4eSJason Evans    the LRU list.  (@interwq)
104*0ef50b4eSJason Evans  - Fix potentially unbound increase during decay, caused by one thread keep
105*0ef50b4eSJason Evans    stashing memory to purge while other threads generating new pages.  The
106*0ef50b4eSJason Evans    number of pages to purge is checked to prevent this.  (@interwq)
107*0ef50b4eSJason Evans  - Fix a FreeBSD bootstrap assertion.  (@strejda, @interwq)
108*0ef50b4eSJason Evans  - Handle 32 bit mutex counters.  (@rkmisra)
109*0ef50b4eSJason Evans  - Fix a indexing bug when creating background threads.  (@davidtgoldblatt,
110*0ef50b4eSJason Evans    @binliu19)
111*0ef50b4eSJason Evans  - Fix arguments passed to extent_init.  (@yuleniwo, @interwq)
112*0ef50b4eSJason Evans  - Fix addresses used for ordering mutexes.  (@rkmisra)
113*0ef50b4eSJason Evans  - Fix abort_conf processing during bootstrap.  (@interwq)
114*0ef50b4eSJason Evans  - Fix include path order for out-of-tree builds.  (@cmuellner)
115*0ef50b4eSJason Evans
116*0ef50b4eSJason Evans  Incompatible changes:
117*0ef50b4eSJason Evans  - Remove --disable-thp.  (@interwq)
118*0ef50b4eSJason Evans  - Remove mallctl interfaces:
119*0ef50b4eSJason Evans    + config.thp  (@interwq)
120*0ef50b4eSJason Evans
121*0ef50b4eSJason Evans  Documentation:
122*0ef50b4eSJason Evans  - Add TUNING.md.  (@interwq, @davidtgoldblatt, @djwatson)
123*0ef50b4eSJason Evans
1248b2f5aafSJason Evans* 5.0.1 (July 1, 2017)
1258b2f5aafSJason Evans
1268b2f5aafSJason Evans  This bugfix release fixes several issues, most of which are obscure enough
1278b2f5aafSJason Evans  that typical applications are not impacted.
1288b2f5aafSJason Evans
1298b2f5aafSJason Evans  Bug fixes:
1308b2f5aafSJason Evans  - Update decay->nunpurged before purging, in order to avoid potential update
1318b2f5aafSJason Evans    races and subsequent incorrect purging volume.  (@interwq)
1328b2f5aafSJason Evans  - Only abort on dlsym(3) error if the failure impacts an enabled feature (lazy
1338b2f5aafSJason Evans    locking and/or background threads).  This mitigates an initialization
1348b2f5aafSJason Evans    failure bug for which we still do not have a clear reproduction test case.
1358b2f5aafSJason Evans    (@interwq)
1368b2f5aafSJason Evans  - Modify tsd management so that it neither crashes nor leaks if a thread's
1378b2f5aafSJason Evans    only allocation activity is to call free() after TLS destructors have been
1388b2f5aafSJason Evans    executed.  This behavior was observed when operating with GNU libc, and is
1398b2f5aafSJason Evans    unlikely to be an issue with other libc implementations.  (@interwq)
1408b2f5aafSJason Evans  - Mask signals during background thread creation.  This prevents signals from
1418b2f5aafSJason Evans    being inadvertently delivered to background threads.  (@jasone,
1428b2f5aafSJason Evans    @davidtgoldblatt, @interwq)
1438b2f5aafSJason Evans  - Avoid inactivity checks within background threads, in order to prevent
1448b2f5aafSJason Evans    recursive mutex acquisition.  (@interwq)
1458b2f5aafSJason Evans  - Fix extent_grow_retained() to use the specified hooks when the
1468b2f5aafSJason Evans    arena.<i>.extent_hooks mallctl is used to override the default hooks.
1478b2f5aafSJason Evans    (@interwq)
1488b2f5aafSJason Evans  - Add missing reentrancy support for custom extent hooks which allocate.
1498b2f5aafSJason Evans    (@interwq)
1508b2f5aafSJason Evans  - Post-fork(2), re-initialize the list of tcaches associated with each arena
1518b2f5aafSJason Evans    to contain no tcaches except the forking thread's.  (@interwq)
1528b2f5aafSJason Evans  - Add missing post-fork(2) mutex reinitialization for extent_grow_mtx.  This
1538b2f5aafSJason Evans    fixes potential deadlocks after fork(2).  (@interwq)
1548b2f5aafSJason Evans  - Enforce minimum autoconf version (currently 2.68), since 2.63 is known to
1558b2f5aafSJason Evans    generate corrupt configure scripts.  (@jasone)
1568b2f5aafSJason Evans  - Ensure that the configured page size (--with-lg-page) is no larger than the
1578b2f5aafSJason Evans    configured huge page size (--with-lg-hugepage).  (@jasone)
1588b2f5aafSJason Evans
159b7eaed25SJason Evans* 5.0.0 (June 13, 2017)
160b7eaed25SJason Evans
161b7eaed25SJason Evans  Unlike all previous jemalloc releases, this release does not use naturally
162b7eaed25SJason Evans  aligned "chunks" for virtual memory management, and instead uses page-aligned
163b7eaed25SJason Evans  "extents".  This change has few externally visible effects, but the internal
164b7eaed25SJason Evans  impacts are... extensive.  Many other internal changes combine to make this
165b7eaed25SJason Evans  the most cohesively designed version of jemalloc so far, with ample
166b7eaed25SJason Evans  opportunity for further enhancements.
167b7eaed25SJason Evans
168b7eaed25SJason Evans  Continuous integration is now an integral aspect of development thanks to the
169b7eaed25SJason Evans  efforts of @davidtgoldblatt, and the dev branch tends to remain reasonably
170b7eaed25SJason Evans  stable on the tested platforms (Linux, FreeBSD, macOS, and Windows).  As a
171b7eaed25SJason Evans  side effect the official release frequency may decrease over time.
172b7eaed25SJason Evans
173b7eaed25SJason Evans  New features:
174b7eaed25SJason Evans  - Implement optional per-CPU arena support; threads choose which arena to use
175b7eaed25SJason Evans    based on current CPU rather than on fixed thread-->arena associations.
176b7eaed25SJason Evans    (@interwq)
177b7eaed25SJason Evans  - Implement two-phase decay of unused dirty pages.  Pages transition from
178b7eaed25SJason Evans    dirty-->muzzy-->clean, where the first phase transition relies on
179b7eaed25SJason Evans    madvise(... MADV_FREE) semantics, and the second phase transition discards
180b7eaed25SJason Evans    pages such that they are replaced with demand-zeroed pages on next access.
181b7eaed25SJason Evans    (@jasone)
182b7eaed25SJason Evans  - Increase decay time resolution from seconds to milliseconds.  (@jasone)
183b7eaed25SJason Evans  - Implement opt-in per CPU background threads, and use them for asynchronous
184b7eaed25SJason Evans    decay-driven unused dirty page purging.  (@interwq)
185b7eaed25SJason Evans  - Add mutex profiling, which collects a variety of statistics useful for
186b7eaed25SJason Evans    diagnosing overhead/contention issues.  (@interwq)
187b7eaed25SJason Evans  - Add C++ new/delete operator bindings.  (@djwatson)
188b7eaed25SJason Evans  - Support manually created arena destruction, such that all data and metadata
189b7eaed25SJason Evans    are discarded.  Add MALLCTL_ARENAS_DESTROYED for accessing merged stats
190b7eaed25SJason Evans    associated with destroyed arenas.  (@jasone)
191b7eaed25SJason Evans  - Add MALLCTL_ARENAS_ALL as a fixed index for use in accessing
192b7eaed25SJason Evans    merged/destroyed arena statistics via mallctl.  (@jasone)
193b7eaed25SJason Evans  - Add opt.abort_conf to optionally abort if invalid configuration options are
194b7eaed25SJason Evans    detected during initialization.  (@interwq)
195b7eaed25SJason Evans  - Add opt.stats_print_opts, so that e.g. JSON output can be selected for the
196b7eaed25SJason Evans    stats dumped during exit if opt.stats_print is true.  (@jasone)
197b7eaed25SJason Evans  - Add --with-version=VERSION for use when embedding jemalloc into another
198b7eaed25SJason Evans    project's git repository.  (@jasone)
199b7eaed25SJason Evans  - Add --disable-thp to support cross compiling.  (@jasone)
200b7eaed25SJason Evans  - Add --with-lg-hugepage to support cross compiling.  (@jasone)
201b7eaed25SJason Evans  - Add mallctl interfaces (various authors):
202b7eaed25SJason Evans    + background_thread
203b7eaed25SJason Evans    + opt.abort_conf
204b7eaed25SJason Evans    + opt.retain
205b7eaed25SJason Evans    + opt.percpu_arena
206b7eaed25SJason Evans    + opt.background_thread
207b7eaed25SJason Evans    + opt.{dirty,muzzy}_decay_ms
208b7eaed25SJason Evans    + opt.stats_print_opts
209b7eaed25SJason Evans    + arena.<i>.initialized
210b7eaed25SJason Evans    + arena.<i>.destroy
211b7eaed25SJason Evans    + arena.<i>.{dirty,muzzy}_decay_ms
212b7eaed25SJason Evans    + arena.<i>.extent_hooks
213b7eaed25SJason Evans    + arenas.{dirty,muzzy}_decay_ms
214b7eaed25SJason Evans    + arenas.bin.<i>.slab_size
215b7eaed25SJason Evans    + arenas.nlextents
216b7eaed25SJason Evans    + arenas.lextent.<i>.size
217b7eaed25SJason Evans    + arenas.create
218b7eaed25SJason Evans    + stats.background_thread.{num_threads,num_runs,run_interval}
219b7eaed25SJason Evans    + stats.mutexes.{ctl,background_thread,prof,reset}.
220b7eaed25SJason Evans      {num_ops,num_spin_acq,num_wait,max_wait_time,total_wait_time,max_num_thds,
221b7eaed25SJason Evans      num_owner_switch}
222b7eaed25SJason Evans    + stats.arenas.<i>.{dirty,muzzy}_decay_ms
223b7eaed25SJason Evans    + stats.arenas.<i>.uptime
224b7eaed25SJason Evans    + stats.arenas.<i>.{pmuzzy,base,internal,resident}
225b7eaed25SJason Evans    + stats.arenas.<i>.{dirty,muzzy}_{npurge,nmadvise,purged}
226b7eaed25SJason Evans    + stats.arenas.<i>.bins.<j>.{nslabs,reslabs,curslabs}
227b7eaed25SJason Evans    + stats.arenas.<i>.bins.<j>.mutex.
228b7eaed25SJason Evans      {num_ops,num_spin_acq,num_wait,max_wait_time,total_wait_time,max_num_thds,
229b7eaed25SJason Evans      num_owner_switch}
230b7eaed25SJason Evans    + stats.arenas.<i>.lextents.<j>.{nmalloc,ndalloc,nrequests,curlextents}
231b7eaed25SJason Evans    + stats.arenas.i.mutexes.{large,extent_avail,extents_dirty,extents_muzzy,
232b7eaed25SJason Evans      extents_retained,decay_dirty,decay_muzzy,base,tcache_list}.
233b7eaed25SJason Evans      {num_ops,num_spin_acq,num_wait,max_wait_time,total_wait_time,max_num_thds,
234b7eaed25SJason Evans      num_owner_switch}
235b7eaed25SJason Evans
236b7eaed25SJason Evans  Portability improvements:
237b7eaed25SJason Evans  - Improve reentrant allocation support, such that deadlock is less likely if
238b7eaed25SJason Evans    e.g. a system library call in turn allocates memory.  (@davidtgoldblatt,
239b7eaed25SJason Evans    @interwq)
240b7eaed25SJason Evans  - Support static linking of jemalloc with glibc.  (@djwatson)
241b7eaed25SJason Evans
242b7eaed25SJason Evans  Optimizations and refactors:
243b7eaed25SJason Evans  - Organize virtual memory as "extents" of virtual memory pages, rather than as
244b7eaed25SJason Evans    naturally aligned "chunks", and store all metadata in arbitrarily distant
245b7eaed25SJason Evans    locations.  This reduces virtual memory external fragmentation, and will
246b7eaed25SJason Evans    interact better with huge pages (not yet explicitly supported).  (@jasone)
247b7eaed25SJason Evans  - Fold large and huge size classes together; only small and large size classes
248b7eaed25SJason Evans    remain.  (@jasone)
249b7eaed25SJason Evans  - Unify the allocation paths, and merge most fast-path branching decisions.
250b7eaed25SJason Evans    (@davidtgoldblatt, @interwq)
251b7eaed25SJason Evans  - Embed per thread automatic tcache into thread-specific data, which reduces
252b7eaed25SJason Evans    conditional branches and dereferences.  Also reorganize tcache to increase
253b7eaed25SJason Evans    fast-path data locality.  (@interwq)
254b7eaed25SJason Evans  - Rewrite atomics to closely model the C11 API, convert various
255b7eaed25SJason Evans    synchronization from mutex-based to atomic, and use the explicit memory
256b7eaed25SJason Evans    ordering control to resolve various hypothetical races without increasing
257b7eaed25SJason Evans    synchronization overhead.  (@davidtgoldblatt)
258b7eaed25SJason Evans  - Extensively optimize rtree via various methods:
259b7eaed25SJason Evans    + Add multiple layers of rtree lookup caching, since rtree lookups are now
260b7eaed25SJason Evans      part of fast-path deallocation.  (@interwq)
261b7eaed25SJason Evans    + Determine rtree layout at compile time.  (@jasone)
262b7eaed25SJason Evans    + Make the tree shallower for common configurations.  (@jasone)
263b7eaed25SJason Evans    + Embed the root node in the top-level rtree data structure, thus avoiding
264b7eaed25SJason Evans      one level of indirection.  (@jasone)
265b7eaed25SJason Evans    + Further specialize leaf elements as compared to internal node elements,
266b7eaed25SJason Evans      and directly embed extent metadata needed for fast-path deallocation.
267b7eaed25SJason Evans      (@jasone)
268b7eaed25SJason Evans    + Ignore leading always-zero address bits (architecture-specific).
269b7eaed25SJason Evans      (@jasone)
270b7eaed25SJason Evans  - Reorganize headers (ongoing work) to make them hermetic, and disentangle
271b7eaed25SJason Evans    various module dependencies.  (@davidtgoldblatt)
272b7eaed25SJason Evans  - Convert various internal data structures such as size class metadata from
273b7eaed25SJason Evans    boot-time-initialized to compile-time-initialized.  Propagate resulting data
274b7eaed25SJason Evans    structure simplifications, such as making arena metadata fixed-size.
275b7eaed25SJason Evans    (@jasone)
276b7eaed25SJason Evans  - Simplify size class lookups when constrained to size classes that are
277b7eaed25SJason Evans    multiples of the page size.  This speeds lookups, but the primary benefit is
278b7eaed25SJason Evans    complexity reduction in code that was the source of numerous regressions.
279b7eaed25SJason Evans    (@jasone)
280b7eaed25SJason Evans  - Lock individual extents when possible for localized extent operations,
281b7eaed25SJason Evans    rather than relying on a top-level arena lock.  (@davidtgoldblatt, @jasone)
282b7eaed25SJason Evans  - Use first fit layout policy instead of best fit, in order to improve
283b7eaed25SJason Evans    packing.  (@jasone)
284b7eaed25SJason Evans  - If munmap(2) is not in use, use an exponential series to grow each arena's
285b7eaed25SJason Evans    virtual memory, so that the number of disjoint virtual memory mappings
286b7eaed25SJason Evans    remains low.  (@jasone)
287b7eaed25SJason Evans  - Implement per arena base allocators, so that arenas never share any virtual
288b7eaed25SJason Evans    memory pages.  (@jasone)
289b7eaed25SJason Evans  - Automatically generate private symbol name mangling macros.  (@jasone)
290b7eaed25SJason Evans
291b7eaed25SJason Evans  Incompatible changes:
292b7eaed25SJason Evans  - Replace chunk hooks with an expanded/normalized set of extent hooks.
293b7eaed25SJason Evans    (@jasone)
294b7eaed25SJason Evans  - Remove ratio-based purging.  (@jasone)
295b7eaed25SJason Evans  - Remove --disable-tcache.  (@jasone)
296b7eaed25SJason Evans  - Remove --disable-tls.  (@jasone)
297b7eaed25SJason Evans  - Remove --enable-ivsalloc.  (@jasone)
298b7eaed25SJason Evans  - Remove --with-lg-size-class-group.  (@jasone)
299b7eaed25SJason Evans  - Remove --with-lg-tiny-min.  (@jasone)
300b7eaed25SJason Evans  - Remove --disable-cc-silence.  (@jasone)
301b7eaed25SJason Evans  - Remove --enable-code-coverage.  (@jasone)
302b7eaed25SJason Evans  - Remove --disable-munmap (replaced by opt.retain).  (@jasone)
303b7eaed25SJason Evans  - Remove Valgrind support.  (@jasone)
304b7eaed25SJason Evans  - Remove quarantine support.  (@jasone)
305b7eaed25SJason Evans  - Remove redzone support.  (@jasone)
306b7eaed25SJason Evans  - Remove mallctl interfaces (various authors):
307b7eaed25SJason Evans    + config.munmap
308b7eaed25SJason Evans    + config.tcache
309b7eaed25SJason Evans    + config.tls
310b7eaed25SJason Evans    + config.valgrind
311b7eaed25SJason Evans    + opt.lg_chunk
312b7eaed25SJason Evans    + opt.purge
313b7eaed25SJason Evans    + opt.lg_dirty_mult
314b7eaed25SJason Evans    + opt.decay_time
315b7eaed25SJason Evans    + opt.quarantine
316b7eaed25SJason Evans    + opt.redzone
317b7eaed25SJason Evans    + opt.thp
318b7eaed25SJason Evans    + arena.<i>.lg_dirty_mult
319b7eaed25SJason Evans    + arena.<i>.decay_time
320b7eaed25SJason Evans    + arena.<i>.chunk_hooks
321b7eaed25SJason Evans    + arenas.initialized
322b7eaed25SJason Evans    + arenas.lg_dirty_mult
323b7eaed25SJason Evans    + arenas.decay_time
324b7eaed25SJason Evans    + arenas.bin.<i>.run_size
325b7eaed25SJason Evans    + arenas.nlruns
326b7eaed25SJason Evans    + arenas.lrun.<i>.size
327b7eaed25SJason Evans    + arenas.nhchunks
328b7eaed25SJason Evans    + arenas.hchunk.<i>.size
329b7eaed25SJason Evans    + arenas.extend
330b7eaed25SJason Evans    + stats.cactive
331b7eaed25SJason Evans    + stats.arenas.<i>.lg_dirty_mult
332b7eaed25SJason Evans    + stats.arenas.<i>.decay_time
333b7eaed25SJason Evans    + stats.arenas.<i>.metadata.{mapped,allocated}
334b7eaed25SJason Evans    + stats.arenas.<i>.{npurge,nmadvise,purged}
335b7eaed25SJason Evans    + stats.arenas.<i>.huge.{allocated,nmalloc,ndalloc,nrequests}
336b7eaed25SJason Evans    + stats.arenas.<i>.bins.<j>.{nruns,reruns,curruns}
337b7eaed25SJason Evans    + stats.arenas.<i>.lruns.<j>.{nmalloc,ndalloc,nrequests,curruns}
338b7eaed25SJason Evans    + stats.arenas.<i>.hchunks.<j>.{nmalloc,ndalloc,nrequests,curhchunks}
339b7eaed25SJason Evans
340b7eaed25SJason Evans  Bug fixes:
341b7eaed25SJason Evans  - Improve interval-based profile dump triggering to dump only one profile when
342b7eaed25SJason Evans    a single allocation's size exceeds the interval.  (@jasone)
343b7eaed25SJason Evans  - Use prefixed function names (as controlled by --with-jemalloc-prefix) when
344b7eaed25SJason Evans    pruning backtrace frames in jeprof.  (@jasone)
345b7eaed25SJason Evans
3468244f2aaSJason Evans* 4.5.0 (February 28, 2017)
3478244f2aaSJason Evans
3488244f2aaSJason Evans  This is the first release to benefit from much broader continuous integration
3498244f2aaSJason Evans  testing, thanks to @davidtgoldblatt.  Had we had this testing infrastructure
3508244f2aaSJason Evans  in place for prior releases, it would have caught all of the most serious
3518244f2aaSJason Evans  regressions fixed by this release.
3528244f2aaSJason Evans
3538244f2aaSJason Evans  New features:
354b7eaed25SJason Evans  - Add --disable-thp and the opt.thp mallctl to provide opt-out mechanisms for
3558244f2aaSJason Evans    transparent huge page integration.  (@jasone)
3568244f2aaSJason Evans  - Update zone allocator integration to work with macOS 10.12.  (@glandium)
3578244f2aaSJason Evans  - Restructure *CFLAGS configuration, so that CFLAGS behaves typically, and
3588244f2aaSJason Evans    EXTRA_CFLAGS provides a way to specify e.g. -Werror during building, but not
3598244f2aaSJason Evans    during configuration.  (@jasone, @ronawho)
3608244f2aaSJason Evans
3618244f2aaSJason Evans  Bug fixes:
3628244f2aaSJason Evans  - Fix DSS (sbrk(2)-based) allocation.  This regression was first released in
3638244f2aaSJason Evans    4.3.0.  (@jasone)
3648244f2aaSJason Evans  - Handle race in per size class utilization computation.  This functionality
3658244f2aaSJason Evans    was first released in 4.0.0.  (@interwq)
3668244f2aaSJason Evans  - Fix lock order reversal during gdump.  (@jasone)
367b7eaed25SJason Evans  - Fix/refactor tcache synchronization.  This regression was first released in
3688244f2aaSJason Evans    4.0.0.  (@jasone)
3698244f2aaSJason Evans  - Fix various JSON-formatted malloc_stats_print() bugs.  This functionality
3708244f2aaSJason Evans    was first released in 4.3.0.  (@jasone)
3718244f2aaSJason Evans  - Fix huge-aligned allocation.  This regression was first released in 4.4.0.
3728244f2aaSJason Evans    (@jasone)
3738244f2aaSJason Evans  - When transparent huge page integration is enabled, detect what state pages
3748244f2aaSJason Evans    start in according to the kernel's current operating mode, and only convert
3758244f2aaSJason Evans    arena chunks to non-huge during purging if that is not their initial state.
3768244f2aaSJason Evans    This functionality was first released in 4.4.0.  (@jasone)
3778244f2aaSJason Evans  - Fix lg_chunk clamping for the --enable-cache-oblivious --disable-fill case.
3788244f2aaSJason Evans    This regression was first released in 4.0.0.  (@jasone, @428desmo)
3798244f2aaSJason Evans  - Properly detect sparc64 when building for Linux.  (@glaubitz)
3808244f2aaSJason Evans
3817fa7f12fSJason Evans* 4.4.0 (December 3, 2016)
3827fa7f12fSJason Evans
3837fa7f12fSJason Evans  New features:
3847fa7f12fSJason Evans  - Add configure support for *-*-linux-android.  (@cferris1000, @jasone)
3857fa7f12fSJason Evans  - Add the --disable-syscall configure option, for use on systems that place
3867fa7f12fSJason Evans    security-motivated limitations on syscall(2).  (@jasone)
3877fa7f12fSJason Evans  - Add support for Debian GNU/kFreeBSD.  (@thesam)
3887fa7f12fSJason Evans
3897fa7f12fSJason Evans  Optimizations:
3907fa7f12fSJason Evans  - Add extent serial numbers and use them where appropriate as a sort key that
3917fa7f12fSJason Evans    is higher priority than address, so that the allocation policy prefers older
3927fa7f12fSJason Evans    extents.  This tends to improve locality (decrease fragmentation) when
3937fa7f12fSJason Evans    memory grows downward.  (@jasone)
3947fa7f12fSJason Evans  - Refactor madvise(2) configuration so that MADV_FREE is detected and utilized
3957fa7f12fSJason Evans    on Linux 4.5 and newer.  (@jasone)
3967fa7f12fSJason Evans  - Mark partially purged arena chunks as non-huge-page.  This improves
3977fa7f12fSJason Evans    interaction with Linux's transparent huge page functionality.  (@jasone)
3987fa7f12fSJason Evans
3997fa7f12fSJason Evans  Bug fixes:
4007fa7f12fSJason Evans  - Fix size class computations for edge conditions involving extremely large
4017fa7f12fSJason Evans    allocations.  This regression was first released in 4.0.0.  (@jasone,
4027fa7f12fSJason Evans    @ingvarha)
4037fa7f12fSJason Evans  - Remove overly restrictive assertions related to the cactive statistic.  This
4047fa7f12fSJason Evans    regression was first released in 4.1.0.  (@jasone)
4057fa7f12fSJason Evans  - Implement a more reliable detection scheme for os_unfair_lock on macOS.
4067fa7f12fSJason Evans    (@jszakmeister)
4077fa7f12fSJason Evans
408bde95144SJason Evans* 4.3.1 (November 7, 2016)
409bde95144SJason Evans
410bde95144SJason Evans  Bug fixes:
411bde95144SJason Evans  - Fix a severe virtual memory leak.  This regression was first released in
412bde95144SJason Evans    4.3.0.  (@interwq, @jasone)
413bde95144SJason Evans  - Refactor atomic and prng APIs to restore support for 32-bit platforms that
414bde95144SJason Evans    use pre-C11 toolchains, e.g. FreeBSD's mips.  (@jasone)
415bde95144SJason Evans
416bde95144SJason Evans* 4.3.0 (November 4, 2016)
417bde95144SJason Evans
418bde95144SJason Evans  This is the first release that passes the test suite for multiple Windows
419bde95144SJason Evans  configurations, thanks in large part to @glandium setting up continuous
420bde95144SJason Evans  integration via AppVeyor (and Travis CI for Linux and OS X).
421bde95144SJason Evans
422bde95144SJason Evans  New features:
423bde95144SJason Evans  - Add "J" (JSON) support to malloc_stats_print().  (@jasone)
424bde95144SJason Evans  - Add Cray compiler support.  (@ronawho)
425bde95144SJason Evans
426bde95144SJason Evans  Optimizations:
427bde95144SJason Evans  - Add/use adaptive spinning for bootstrapping and radix tree node
428bde95144SJason Evans    initialization.  (@jasone)
429bde95144SJason Evans
430bde95144SJason Evans  Bug fixes:
431bde95144SJason Evans  - Fix large allocation to search starting in the optimal size class heap,
432bde95144SJason Evans    which can substantially reduce virtual memory churn and fragmentation.  This
433bde95144SJason Evans    regression was first released in 4.0.0.  (@mjp41, @jasone)
434bde95144SJason Evans  - Fix stats.arenas.<i>.nthreads accounting.  (@interwq)
435bde95144SJason Evans  - Fix and simplify decay-based purging.  (@jasone)
436bde95144SJason Evans  - Make DSS (sbrk(2)-related) operations lockless, which resolves potential
437bde95144SJason Evans    deadlocks during thread exit.  (@jasone)
438bde95144SJason Evans  - Fix over-sized allocation of radix tree leaf nodes.  (@mjp41, @ogaun,
439bde95144SJason Evans    @jasone)
440bde95144SJason Evans  - Fix over-sized allocation of arena_t (plus associated stats) data
441bde95144SJason Evans    structures.  (@jasone, @interwq)
442bde95144SJason Evans  - Fix EXTRA_CFLAGS to not affect configuration.  (@jasone)
443bde95144SJason Evans  - Fix a Valgrind integration bug.  (@ronawho)
444bde95144SJason Evans  - Disallow 0x5a junk filling when running in Valgrind.  (@jasone)
445bde95144SJason Evans  - Fix a file descriptor leak on Linux.  This regression was first released in
446bde95144SJason Evans    4.2.0.  (@vsarunas, @jasone)
447bde95144SJason Evans  - Fix static linking of jemalloc with glibc.  (@djwatson)
448bde95144SJason Evans  - Use syscall(2) rather than {open,read,close}(2) during boot on Linux.  This
449bde95144SJason Evans    works around other libraries' system call wrappers performing reentrant
450bde95144SJason Evans    allocation.  (@kspinka, @Whissi, @jasone)
451bde95144SJason Evans  - Fix OS X default zone replacement to work with OS X 10.12.  (@glandium,
452bde95144SJason Evans    @jasone)
453bde95144SJason Evans  - Fix cached memory management to avoid needless commit/decommit operations
454bde95144SJason Evans    during purging, which resolves permanent virtual memory map fragmentation
455bde95144SJason Evans    issues on Windows.  (@mjp41, @jasone)
456bde95144SJason Evans  - Fix TSD fetches to avoid (recursive) allocation.  This is relevant to
457bde95144SJason Evans    non-TLS and Windows configurations.  (@jasone)
458bde95144SJason Evans  - Fix malloc_conf overriding to work on Windows.  (@jasone)
459bde95144SJason Evans  - Forcibly disable lazy-lock on Windows (was forcibly *enabled*).  (@jasone)
460bde95144SJason Evans
46162b2691eSJason Evans* 4.2.1 (June 8, 2016)
46262b2691eSJason Evans
46362b2691eSJason Evans  Bug fixes:
46462b2691eSJason Evans  - Fix bootstrapping issues for configurations that require allocation during
46562b2691eSJason Evans    tsd initialization (e.g. --disable-tls).  (@cferris1000, @jasone)
46662b2691eSJason Evans  - Fix gettimeofday() version of nstime_update().  (@ronawho)
46762b2691eSJason Evans  - Fix Valgrind regressions in calloc() and chunk_alloc_wrapper().  (@ronawho)
46862b2691eSJason Evans  - Fix potential VM map fragmentation regression.  (@jasone)
46962b2691eSJason Evans  - Fix opt_zero-triggered in-place huge reallocation zeroing.  (@jasone)
47062b2691eSJason Evans  - Fix heap profiling context leaks in reallocation edge cases.  (@jasone)
47162b2691eSJason Evans
4721f0a49e8SJason Evans* 4.2.0 (May 12, 2016)
4731f0a49e8SJason Evans
4741f0a49e8SJason Evans  New features:
4751f0a49e8SJason Evans  - Add the arena.<i>.reset mallctl, which makes it possible to discard all of
4761f0a49e8SJason Evans    an arena's allocations in a single operation.  (@jasone)
4771f0a49e8SJason Evans  - Add the stats.retained and stats.arenas.<i>.retained statistics.  (@jasone)
4781f0a49e8SJason Evans  - Add the --with-version configure option.  (@jasone)
4791f0a49e8SJason Evans  - Support --with-lg-page values larger than actual page size.  (@jasone)
4801f0a49e8SJason Evans
4811f0a49e8SJason Evans  Optimizations:
4821f0a49e8SJason Evans  - Use pairing heaps rather than red-black trees for various hot data
4831f0a49e8SJason Evans    structures.  (@djwatson, @jasone)
4841f0a49e8SJason Evans  - Streamline fast paths of rtree operations.  (@jasone)
4851f0a49e8SJason Evans  - Optimize the fast paths of calloc() and [m,d,sd]allocx().  (@jasone)
4861f0a49e8SJason Evans  - Decommit unused virtual memory if the OS does not overcommit.  (@jasone)
4871f0a49e8SJason Evans  - Specify MAP_NORESERVE on Linux if [heuristic] overcommit is active, in order
4881f0a49e8SJason Evans    to avoid unfortunate interactions during fork(2).  (@jasone)
4891f0a49e8SJason Evans
4901f0a49e8SJason Evans  Bug fixes:
4911f0a49e8SJason Evans  - Fix chunk accounting related to triggering gdump profiles.  (@jasone)
4921f0a49e8SJason Evans  - Link against librt for clock_gettime(2) if glibc < 2.17.  (@jasone)
4931f0a49e8SJason Evans  - Scale leak report summary according to sampling probability.  (@jasone)
4941f0a49e8SJason Evans
4951f0a49e8SJason Evans* 4.1.1 (May 3, 2016)
4961f0a49e8SJason Evans
4971f0a49e8SJason Evans  This bugfix release resolves a variety of mostly minor issues, though the
4981f0a49e8SJason Evans  bitmap fix is critical for 64-bit Windows.
4991f0a49e8SJason Evans
5001f0a49e8SJason Evans  Bug fixes:
5011f0a49e8SJason Evans  - Fix the linear scan version of bitmap_sfu() to shift by the proper amount
5021f0a49e8SJason Evans    even when sizeof(long) is not the same as sizeof(void *), as on 64-bit
5031f0a49e8SJason Evans    Windows.  (@jasone)
5041f0a49e8SJason Evans  - Fix hashing functions to avoid unaligned memory accesses (and resulting
5051f0a49e8SJason Evans    crashes).  This is relevant at least to some ARM-based platforms.
5061f0a49e8SJason Evans    (@rkmisra)
5071f0a49e8SJason Evans  - Fix fork()-related lock rank ordering reversals.  These reversals were
5081f0a49e8SJason Evans    unlikely to cause deadlocks in practice except when heap profiling was
5091f0a49e8SJason Evans    enabled and active.  (@jasone)
5101f0a49e8SJason Evans  - Fix various chunk leaks in OOM code paths.  (@jasone)
5111f0a49e8SJason Evans  - Fix malloc_stats_print() to print opt.narenas correctly.  (@jasone)
5121f0a49e8SJason Evans  - Fix MSVC-specific build/test issues.  (@rustyx, @yuslepukhin)
5131f0a49e8SJason Evans  - Fix a variety of test failures that were due to test fragility rather than
5141f0a49e8SJason Evans    core bugs.  (@jasone)
5151f0a49e8SJason Evans
516df0d881dSJason Evans* 4.1.0 (February 28, 2016)
517df0d881dSJason Evans
518df0d881dSJason Evans  This release is primarily about optimizations, but it also incorporates a lot
519df0d881dSJason Evans  of portability-motivated refactoring and enhancements.  Many people worked on
520df0d881dSJason Evans  this release, to an extent that even with the omission here of minor changes
521df0d881dSJason Evans  (see git revision history), and of the people who reported and diagnosed
522df0d881dSJason Evans  issues, so much of the work was contributed that starting with this release,
523df0d881dSJason Evans  changes are annotated with author credits to help reflect the collaborative
524df0d881dSJason Evans  effort involved.
525df0d881dSJason Evans
526df0d881dSJason Evans  New features:
527df0d881dSJason Evans  - Implement decay-based unused dirty page purging, a major optimization with
528df0d881dSJason Evans    mallctl API impact.  This is an alternative to the existing ratio-based
529df0d881dSJason Evans    unused dirty page purging, and is intended to eventually become the sole
530df0d881dSJason Evans    purging mechanism.  New mallctls:
531df0d881dSJason Evans    + opt.purge
532df0d881dSJason Evans    + opt.decay_time
533df0d881dSJason Evans    + arena.<i>.decay
534df0d881dSJason Evans    + arena.<i>.decay_time
535df0d881dSJason Evans    + arenas.decay_time
536df0d881dSJason Evans    + stats.arenas.<i>.decay_time
537df0d881dSJason Evans    (@jasone, @cevans87)
538df0d881dSJason Evans  - Add --with-malloc-conf, which makes it possible to embed a default
539df0d881dSJason Evans    options string during configuration.  This was motivated by the desire to
540df0d881dSJason Evans    specify --with-malloc-conf=purge:decay , since the default must remain
541df0d881dSJason Evans    purge:ratio until the 5.0.0 release.  (@jasone)
542df0d881dSJason Evans  - Add MS Visual Studio 2015 support.  (@rustyx, @yuslepukhin)
543df0d881dSJason Evans  - Make *allocx() size class overflow behavior defined.  The maximum
544df0d881dSJason Evans    size class is now less than PTRDIFF_MAX to protect applications against
545df0d881dSJason Evans    numerical overflow, and all allocation functions are guaranteed to indicate
546df0d881dSJason Evans    errors rather than potentially crashing if the request size exceeds the
547df0d881dSJason Evans    maximum size class.  (@jasone)
548df0d881dSJason Evans  - jeprof:
549df0d881dSJason Evans    + Add raw heap profile support.  (@jasone)
550df0d881dSJason Evans    + Add --retain and --exclude for backtrace symbol filtering.  (@jasone)
551df0d881dSJason Evans
552df0d881dSJason Evans  Optimizations:
553df0d881dSJason Evans  - Optimize the fast path to combine various bootstrapping and configuration
554df0d881dSJason Evans    checks and execute more streamlined code in the common case.  (@interwq)
555df0d881dSJason Evans  - Use linear scan for small bitmaps (used for small object tracking).  In
556df0d881dSJason Evans    addition to speeding up bitmap operations on 64-bit systems, this reduces
557df0d881dSJason Evans    allocator metadata overhead by approximately 0.2%.  (@djwatson)
558df0d881dSJason Evans  - Separate arena_avail trees, which substantially speeds up run tree
559df0d881dSJason Evans    operations.  (@djwatson)
560df0d881dSJason Evans  - Use memoization (boot-time-computed table) for run quantization.  Separate
561df0d881dSJason Evans    arena_avail trees reduced the importance of this optimization.  (@jasone)
562df0d881dSJason Evans  - Attempt mmap-based in-place huge reallocation.  This can dramatically speed
563df0d881dSJason Evans    up incremental huge reallocation.  (@jasone)
564df0d881dSJason Evans
565df0d881dSJason Evans  Incompatible changes:
566df0d881dSJason Evans  - Make opt.narenas unsigned rather than size_t.  (@jasone)
567df0d881dSJason Evans
568df0d881dSJason Evans  Bug fixes:
569df0d881dSJason Evans  - Fix stats.cactive accounting regression.  (@rustyx, @jasone)
570df0d881dSJason Evans  - Handle unaligned keys in hash().  This caused problems for some ARM systems.
5711f0a49e8SJason Evans    (@jasone, @cferris1000)
572df0d881dSJason Evans  - Refactor arenas array.  In addition to fixing a fork-related deadlock, this
573df0d881dSJason Evans    makes arena lookups faster and simpler.  (@jasone)
574df0d881dSJason Evans  - Move retained memory allocation out of the default chunk allocation
575df0d881dSJason Evans    function, to a location that gets executed even if the application installs
576df0d881dSJason Evans    a custom chunk allocation function.  This resolves a virtual memory leak.
577df0d881dSJason Evans    (@buchgr)
5781f0a49e8SJason Evans  - Fix a potential tsd cleanup leak.  (@cferris1000, @jasone)
579df0d881dSJason Evans  - Fix run quantization.  In practice this bug had no impact unless
580df0d881dSJason Evans    applications requested memory with alignment exceeding one page.
581df0d881dSJason Evans    (@jasone, @djwatson)
582df0d881dSJason Evans  - Fix LinuxThreads-specific bootstrapping deadlock.  (Cosmin Paraschiv)
583df0d881dSJason Evans  - jeprof:
584df0d881dSJason Evans    + Don't discard curl options if timeout is not defined.  (@djwatson)
585df0d881dSJason Evans    + Detect failed profile fetches.  (@djwatson)
586df0d881dSJason Evans  - Fix stats.arenas.<i>.{dss,lg_dirty_mult,decay_time,pactive,pdirty} for
587df0d881dSJason Evans    --disable-stats case.  (@jasone)
588df0d881dSJason Evans
589ba4f5cc0SJason Evans* 4.0.4 (October 24, 2015)
590ba4f5cc0SJason Evans
591ba4f5cc0SJason Evans  This bugfix release fixes another xallocx() regression.  No other regressions
592ba4f5cc0SJason Evans  have come to light in over a month, so this is likely a good starting point
593ba4f5cc0SJason Evans  for people who prefer to wait for "dot one" releases with all the major issues
594ba4f5cc0SJason Evans  shaken out.
595ba4f5cc0SJason Evans
596ba4f5cc0SJason Evans  Bug fixes:
597ba4f5cc0SJason Evans  - Fix xallocx(..., MALLOCX_ZERO to zero the last full trailing page of large
598ba4f5cc0SJason Evans    allocations that have been randomly assigned an offset of 0 when
599ba4f5cc0SJason Evans    --enable-cache-oblivious configure option is enabled.
600ba4f5cc0SJason Evans
601ba4f5cc0SJason Evans* 4.0.3 (September 24, 2015)
602ba4f5cc0SJason Evans
603ba4f5cc0SJason Evans  This bugfix release continues the trend of xallocx() and heap profiling fixes.
604ba4f5cc0SJason Evans
605ba4f5cc0SJason Evans  Bug fixes:
606ba4f5cc0SJason Evans  - Fix xallocx(..., MALLOCX_ZERO) to zero all trailing bytes of large
607ba4f5cc0SJason Evans    allocations when --enable-cache-oblivious configure option is enabled.
608ba4f5cc0SJason Evans  - Fix xallocx(..., MALLOCX_ZERO) to zero trailing bytes of huge allocations
609ba4f5cc0SJason Evans    when resizing from/to a size class that is not a multiple of the chunk size.
610ba4f5cc0SJason Evans  - Fix prof_tctx_dump_iter() to filter out nodes that were created after heap
611ba4f5cc0SJason Evans    profile dumping started.
612ba4f5cc0SJason Evans  - Work around a potentially bad thread-specific data initialization
613ba4f5cc0SJason Evans    interaction with NPTL (glibc's pthreads implementation).
614ba4f5cc0SJason Evans
615536b3538SJason Evans* 4.0.2 (September 21, 2015)
616536b3538SJason Evans
617536b3538SJason Evans  This bugfix release addresses a few bugs specific to heap profiling.
618536b3538SJason Evans
619536b3538SJason Evans  Bug fixes:
620536b3538SJason Evans  - Fix ixallocx_prof_sample() to never modify nor create sampled small
621536b3538SJason Evans    allocations.  xallocx() is in general incapable of moving small allocations,
622536b3538SJason Evans    so this fix removes buggy code without loss of generality.
623536b3538SJason Evans  - Fix irallocx_prof_sample() to always allocate large regions, even when
624536b3538SJason Evans    alignment is non-zero.
625536b3538SJason Evans  - Fix prof_alloc_rollback() to read tdata from thread-specific data rather
626536b3538SJason Evans    than dereferencing a potentially invalid tctx.
627536b3538SJason Evans
628536b3538SJason Evans* 4.0.1 (September 15, 2015)
629536b3538SJason Evans
630536b3538SJason Evans  This is a bugfix release that is somewhat high risk due to the amount of
631536b3538SJason Evans  refactoring required to address deep xallocx() problems.  As a side effect of
632536b3538SJason Evans  these fixes, xallocx() now tries harder to partially fulfill requests for
633536b3538SJason Evans  optional extra space.  Note that a couple of minor heap profiling
634536b3538SJason Evans  optimizations are included, but these are better thought of as performance
635*0ef50b4eSJason Evans  fixes that were integral to discovering most of the other bugs.
636536b3538SJason Evans
637536b3538SJason Evans  Optimizations:
638536b3538SJason Evans  - Avoid a chunk metadata read in arena_prof_tctx_set(), since it is in the
639536b3538SJason Evans    fast path when heap profiling is enabled.  Additionally, split a special
640536b3538SJason Evans    case out into arena_prof_tctx_reset(), which also avoids chunk metadata
641536b3538SJason Evans    reads.
642536b3538SJason Evans  - Optimize irallocx_prof() to optimistically update the sampler state.  The
643536b3538SJason Evans    prior implementation appears to have been a holdover from when
644536b3538SJason Evans    rallocx()/xallocx() functionality was combined as rallocm().
645536b3538SJason Evans
646536b3538SJason Evans  Bug fixes:
647536b3538SJason Evans  - Fix TLS configuration such that it is enabled by default for platforms on
648536b3538SJason Evans    which it works correctly.
649536b3538SJason Evans  - Fix arenas_cache_cleanup() and arena_get_hard() to handle
650536b3538SJason Evans    allocation/deallocation within the application's thread-specific data
651536b3538SJason Evans    cleanup functions even after arenas_cache is torn down.
652536b3538SJason Evans  - Fix xallocx() bugs related to size+extra exceeding HUGE_MAXCLASS.
653536b3538SJason Evans  - Fix chunk purge hook calls for in-place huge shrinking reallocation to
654536b3538SJason Evans    specify the old chunk size rather than the new chunk size.  This bug caused
655536b3538SJason Evans    no correctness issues for the default chunk purge function, but was
656536b3538SJason Evans    visible to custom functions set via the "arena.<i>.chunk_hooks" mallctl.
657536b3538SJason Evans  - Fix heap profiling bugs:
658536b3538SJason Evans    + Fix heap profiling to distinguish among otherwise identical sample sites
659536b3538SJason Evans      with interposed resets (triggered via the "prof.reset" mallctl).  This bug
660536b3538SJason Evans      could cause data structure corruption that would most likely result in a
661536b3538SJason Evans      segfault.
662536b3538SJason Evans    + Fix irealloc_prof() to prof_alloc_rollback() on OOM.
663536b3538SJason Evans    + Make one call to prof_active_get_unlocked() per allocation event, and use
664536b3538SJason Evans      the result throughout the relevant functions that handle an allocation
665536b3538SJason Evans      event.  Also add a missing check in prof_realloc().  These fixes protect
666536b3538SJason Evans      allocation events against concurrent prof_active changes.
667536b3538SJason Evans    + Fix ixallocx_prof() to pass usize_max and zero to ixallocx_prof_sample()
668536b3538SJason Evans      in the correct order.
669536b3538SJason Evans    + Fix prof_realloc() to call prof_free_sampled_object() after calling
670536b3538SJason Evans      prof_malloc_sample_object().  Prior to this fix, if tctx and old_tctx were
671536b3538SJason Evans      the same, the tctx could have been prematurely destroyed.
672536b3538SJason Evans  - Fix portability bugs:
673536b3538SJason Evans    + Don't bitshift by negative amounts when encoding/decoding run sizes in
674536b3538SJason Evans      chunk header maps.  This affected systems with page sizes greater than 8
675536b3538SJason Evans      KiB.
676536b3538SJason Evans    + Rename index_t to szind_t to avoid an existing type on Solaris.
677536b3538SJason Evans    + Add JEMALLOC_CXX_THROW to the memalign() function prototype, in order to
678536b3538SJason Evans      match glibc and avoid compilation errors when including both
679536b3538SJason Evans      jemalloc/jemalloc.h and malloc.h in C++ code.
680536b3538SJason Evans    + Don't assume that /bin/sh is appropriate when running size_classes.sh
681536b3538SJason Evans      during configuration.
682536b3538SJason Evans    + Consider __sparcv9 a synonym for __sparc64__ when defining LG_QUANTUM.
683536b3538SJason Evans    + Link tests to librt if it contains clock_gettime(2).
684536b3538SJason Evans
685d0e79aa3SJason Evans* 4.0.0 (August 17, 2015)
686d0e79aa3SJason Evans
687d0e79aa3SJason Evans  This version contains many speed and space optimizations, both minor and
688d0e79aa3SJason Evans  major.  The major themes are generalization, unification, and simplification.
689d0e79aa3SJason Evans  Although many of these optimizations cause no visible behavior change, their
690d0e79aa3SJason Evans  cumulative effect is substantial.
691d0e79aa3SJason Evans
692d0e79aa3SJason Evans  New features:
693d0e79aa3SJason Evans  - Normalize size class spacing to be consistent across the complete size
694d0e79aa3SJason Evans    range.  By default there are four size classes per size doubling, but this
695d0e79aa3SJason Evans    is now configurable via the --with-lg-size-class-group option.  Also add the
696d0e79aa3SJason Evans    --with-lg-page, --with-lg-page-sizes, --with-lg-quantum, and
697d0e79aa3SJason Evans    --with-lg-tiny-min options, which can be used to tweak page and size class
698d0e79aa3SJason Evans    settings.  Impacts:
699d0e79aa3SJason Evans    + Worst case performance for incrementally growing/shrinking reallocation
700d0e79aa3SJason Evans      is improved because there are far fewer size classes, and therefore
701d0e79aa3SJason Evans      copying happens less often.
702d0e79aa3SJason Evans    + Internal fragmentation is limited to 20% for all but the smallest size
703d0e79aa3SJason Evans      classes (those less than four times the quantum).  (1B + 4 KiB)
704d0e79aa3SJason Evans      and (1B + 4 MiB) previously suffered nearly 50% internal fragmentation.
705d0e79aa3SJason Evans    + Chunk fragmentation tends to be lower because there are fewer distinct run
706d0e79aa3SJason Evans      sizes to pack.
707d0e79aa3SJason Evans  - Add support for explicit tcaches.  The "tcache.create", "tcache.flush", and
708d0e79aa3SJason Evans    "tcache.destroy" mallctls control tcache lifetime and flushing, and the
709d0e79aa3SJason Evans    MALLOCX_TCACHE(tc) and MALLOCX_TCACHE_NONE flags to the *allocx() API
710d0e79aa3SJason Evans    control which tcache is used for each operation.
711d0e79aa3SJason Evans  - Implement per thread heap profiling, as well as the ability to
712d0e79aa3SJason Evans    enable/disable heap profiling on a per thread basis.  Add the "prof.reset",
713d0e79aa3SJason Evans    "prof.lg_sample", "thread.prof.name", "thread.prof.active",
714d0e79aa3SJason Evans    "opt.prof_thread_active_init", "prof.thread_active_init", and
715d0e79aa3SJason Evans    "thread.prof.active" mallctls.
716d0e79aa3SJason Evans  - Add support for per arena application-specified chunk allocators, configured
717d0e79aa3SJason Evans    via the "arena.<i>.chunk_hooks" mallctl.
718d0e79aa3SJason Evans  - Refactor huge allocation to be managed by arenas, so that arenas now
719d0e79aa3SJason Evans    function as general purpose independent allocators.  This is important in
720d0e79aa3SJason Evans    the context of user-specified chunk allocators, aside from the scalability
721d0e79aa3SJason Evans    benefits.  Related new statistics:
722d0e79aa3SJason Evans    + The "stats.arenas.<i>.huge.allocated", "stats.arenas.<i>.huge.nmalloc",
723d0e79aa3SJason Evans      "stats.arenas.<i>.huge.ndalloc", and "stats.arenas.<i>.huge.nrequests"
724d0e79aa3SJason Evans      mallctls provide high level per arena huge allocation statistics.
725d0e79aa3SJason Evans    + The "arenas.nhchunks", "arenas.hchunk.<i>.size",
726d0e79aa3SJason Evans      "stats.arenas.<i>.hchunks.<j>.nmalloc",
727d0e79aa3SJason Evans      "stats.arenas.<i>.hchunks.<j>.ndalloc",
728d0e79aa3SJason Evans      "stats.arenas.<i>.hchunks.<j>.nrequests", and
729d0e79aa3SJason Evans      "stats.arenas.<i>.hchunks.<j>.curhchunks" mallctls provide per size class
730d0e79aa3SJason Evans      statistics.
731d0e79aa3SJason Evans  - Add the 'util' column to malloc_stats_print() output, which reports the
732d0e79aa3SJason Evans    proportion of available regions that are currently in use for each small
733d0e79aa3SJason Evans    size class.
734d0e79aa3SJason Evans  - Add "alloc" and "free" modes for for junk filling (see the "opt.junk"
735d0e79aa3SJason Evans    mallctl), so that it is possible to separately enable junk filling for
736d0e79aa3SJason Evans    allocation versus deallocation.
737d0e79aa3SJason Evans  - Add the jemalloc-config script, which provides information about how
738d0e79aa3SJason Evans    jemalloc was configured, and how to integrate it into application builds.
739d0e79aa3SJason Evans  - Add metadata statistics, which are accessible via the "stats.metadata",
740d0e79aa3SJason Evans    "stats.arenas.<i>.metadata.mapped", and
741d0e79aa3SJason Evans    "stats.arenas.<i>.metadata.allocated" mallctls.
742d0e79aa3SJason Evans  - Add the "stats.resident" mallctl, which reports the upper limit of
743d0e79aa3SJason Evans    physically resident memory mapped by the allocator.
744d0e79aa3SJason Evans  - Add per arena control over unused dirty page purging, via the
745d0e79aa3SJason Evans    "arenas.lg_dirty_mult", "arena.<i>.lg_dirty_mult", and
746d0e79aa3SJason Evans    "stats.arenas.<i>.lg_dirty_mult" mallctls.
747d0e79aa3SJason Evans  - Add the "prof.gdump" mallctl, which makes it possible to toggle the gdump
748d0e79aa3SJason Evans    feature on/off during program execution.
749d0e79aa3SJason Evans  - Add sdallocx(), which implements sized deallocation.  The primary
750d0e79aa3SJason Evans    optimization over dallocx() is the removal of a metadata read, which often
751d0e79aa3SJason Evans    suffers an L1 cache miss.
752d0e79aa3SJason Evans  - Add missing header includes in jemalloc/jemalloc.h, so that applications
753d0e79aa3SJason Evans    only have to #include <jemalloc/jemalloc.h>.
754d0e79aa3SJason Evans  - Add support for additional platforms:
755d0e79aa3SJason Evans    + Bitrig
756d0e79aa3SJason Evans    + Cygwin
757d0e79aa3SJason Evans    + DragonFlyBSD
758d0e79aa3SJason Evans    + iOS
759d0e79aa3SJason Evans    + OpenBSD
760d0e79aa3SJason Evans    + OpenRISC/or1k
761d0e79aa3SJason Evans
762d0e79aa3SJason Evans  Optimizations:
763d0e79aa3SJason Evans  - Maintain dirty runs in per arena LRUs rather than in per arena trees of
764d0e79aa3SJason Evans    dirty-run-containing chunks.  In practice this change significantly reduces
765d0e79aa3SJason Evans    dirty page purging volume.
766d0e79aa3SJason Evans  - Integrate whole chunks into the unused dirty page purging machinery.  This
767d0e79aa3SJason Evans    reduces the cost of repeated huge allocation/deallocation, because it
768d0e79aa3SJason Evans    effectively introduces a cache of chunks.
769d0e79aa3SJason Evans  - Split the arena chunk map into two separate arrays, in order to increase
770d0e79aa3SJason Evans    cache locality for the frequently accessed bits.
771d0e79aa3SJason Evans  - Move small run metadata out of runs, into arena chunk headers.  This reduces
772d0e79aa3SJason Evans    run fragmentation, smaller runs reduce external fragmentation for small size
773d0e79aa3SJason Evans    classes, and packed (less uniformly aligned) metadata layout improves CPU
774d0e79aa3SJason Evans    cache set distribution.
775d0e79aa3SJason Evans  - Randomly distribute large allocation base pointer alignment relative to page
776d0e79aa3SJason Evans    boundaries in order to more uniformly utilize CPU cache sets.  This can be
777d0e79aa3SJason Evans    disabled via the --disable-cache-oblivious configure option, and queried via
778d0e79aa3SJason Evans    the "config.cache_oblivious" mallctl.
779d0e79aa3SJason Evans  - Micro-optimize the fast paths for the public API functions.
780d0e79aa3SJason Evans  - Refactor thread-specific data to reside in a single structure.  This assures
781d0e79aa3SJason Evans    that only a single TLS read is necessary per call into the public API.
782d0e79aa3SJason Evans  - Implement in-place huge allocation growing and shrinking.
783d0e79aa3SJason Evans  - Refactor rtree (radix tree for chunk lookups) to be lock-free, and make
784d0e79aa3SJason Evans    additional optimizations that reduce maximum lookup depth to one or two
785d0e79aa3SJason Evans    levels.  This resolves what was a concurrency bottleneck for per arena huge
786d0e79aa3SJason Evans    allocation, because a global data structure is critical for determining
787d0e79aa3SJason Evans    which arenas own which huge allocations.
788d0e79aa3SJason Evans
789d0e79aa3SJason Evans  Incompatible changes:
790d0e79aa3SJason Evans  - Replace --enable-cc-silence with --disable-cc-silence to suppress spurious
791d0e79aa3SJason Evans    warnings by default.
792d0e79aa3SJason Evans  - Assure that the constness of malloc_usable_size()'s return type matches that
793d0e79aa3SJason Evans    of the system implementation.
794d0e79aa3SJason Evans  - Change the heap profile dump format to support per thread heap profiling,
795d0e79aa3SJason Evans    rename pprof to jeprof, and enhance it with the --thread=<n> option.  As a
796d0e79aa3SJason Evans    result, the bundled jeprof must now be used rather than the upstream
797d0e79aa3SJason Evans    (gperftools) pprof.
798d0e79aa3SJason Evans  - Disable "opt.prof_final" by default, in order to avoid atexit(3), which can
799d0e79aa3SJason Evans    internally deadlock on some platforms.
800d0e79aa3SJason Evans  - Change the "arenas.nlruns" mallctl type from size_t to unsigned.
801d0e79aa3SJason Evans  - Replace the "stats.arenas.<i>.bins.<j>.allocated" mallctl with
802d0e79aa3SJason Evans    "stats.arenas.<i>.bins.<j>.curregs".
803d0e79aa3SJason Evans  - Ignore MALLOC_CONF in set{uid,gid,cap} binaries.
804d0e79aa3SJason Evans  - Ignore MALLOCX_ARENA(a) in dallocx(), in favor of using the
805d0e79aa3SJason Evans    MALLOCX_TCACHE(tc) and MALLOCX_TCACHE_NONE flags to control tcache usage.
806d0e79aa3SJason Evans
807d0e79aa3SJason Evans  Removed features:
808d0e79aa3SJason Evans  - Remove the *allocm() API, which is superseded by the *allocx() API.
809d0e79aa3SJason Evans  - Remove the --enable-dss options, and make dss non-optional on all platforms
810d0e79aa3SJason Evans    which support sbrk(2).
811d0e79aa3SJason Evans  - Remove the "arenas.purge" mallctl, which was obsoleted by the
812d0e79aa3SJason Evans    "arena.<i>.purge" mallctl in 3.1.0.
813d0e79aa3SJason Evans  - Remove the unnecessary "opt.valgrind" mallctl; jemalloc automatically
814d0e79aa3SJason Evans    detects whether it is running inside Valgrind.
815d0e79aa3SJason Evans  - Remove the "stats.huge.allocated", "stats.huge.nmalloc", and
816d0e79aa3SJason Evans    "stats.huge.ndalloc" mallctls.
817d0e79aa3SJason Evans  - Remove the --enable-mremap option.
818d0e79aa3SJason Evans  - Remove the "stats.chunks.current", "stats.chunks.total", and
819d0e79aa3SJason Evans    "stats.chunks.high" mallctls.
820d0e79aa3SJason Evans
821d0e79aa3SJason Evans  Bug fixes:
822d0e79aa3SJason Evans  - Fix the cactive statistic to decrease (rather than increase) when active
823d0e79aa3SJason Evans    memory decreases.  This regression was first released in 3.5.0.
824d0e79aa3SJason Evans  - Fix OOM handling in memalign() and valloc().  A variant of this bug existed
825d0e79aa3SJason Evans    in all releases since 2.0.0, which introduced these functions.
826d0e79aa3SJason Evans  - Fix an OOM-related regression in arena_tcache_fill_small(), which could
827d0e79aa3SJason Evans    cause cache corruption on OOM.  This regression was present in all releases
828d0e79aa3SJason Evans    from 2.2.0 through 3.6.0.
829d0e79aa3SJason Evans  - Fix size class overflow handling for malloc(), posix_memalign(), memalign(),
830d0e79aa3SJason Evans    calloc(), and realloc() when profiling is enabled.
831d0e79aa3SJason Evans  - Fix the "arena.<i>.dss" mallctl to return an error if "primary" or
832d0e79aa3SJason Evans    "secondary" precedence is specified, but sbrk(2) is not supported.
833d0e79aa3SJason Evans  - Fix fallback lg_floor() implementations to handle extremely large inputs.
834d0e79aa3SJason Evans  - Ensure the default purgeable zone is after the default zone on OS X.
835d0e79aa3SJason Evans  - Fix latent bugs in atomic_*().
836d0e79aa3SJason Evans  - Fix the "arena.<i>.dss" mallctl to handle read-only calls.
837d0e79aa3SJason Evans  - Fix tls_model configuration to enable the initial-exec model when possible.
838d0e79aa3SJason Evans  - Mark malloc_conf as a weak symbol so that the application can override it.
839d0e79aa3SJason Evans  - Correctly detect glibc's adaptive pthread mutexes.
840d0e79aa3SJason Evans  - Fix the --without-export configure option.
841d0e79aa3SJason Evans
8422fff27f8SJason Evans* 3.6.0 (March 31, 2014)
8432fff27f8SJason Evans
8442fff27f8SJason Evans  This version contains a critical bug fix for a regression present in 3.5.0 and
8452fff27f8SJason Evans  3.5.1.
8462fff27f8SJason Evans
8472fff27f8SJason Evans  Bug fixes:
8482fff27f8SJason Evans  - Fix a regression in arena_chunk_alloc() that caused crashes during
8492fff27f8SJason Evans    small/large allocation if chunk allocation failed.  In the absence of this
8502fff27f8SJason Evans    bug, chunk allocation failure would result in allocation failure, e.g.  NULL
8512fff27f8SJason Evans    return from malloc().  This regression was introduced in 3.5.0.
8522fff27f8SJason Evans  - Fix backtracing for gcc intrinsics-based backtracing by specifying
8532fff27f8SJason Evans    -fno-omit-frame-pointer to gcc.  Note that the application (and all the
8542fff27f8SJason Evans    libraries it links to) must also be compiled with this option for
8552fff27f8SJason Evans    backtracing to be reliable.
8562fff27f8SJason Evans  - Use dss allocation precedence for huge allocations as well as small/large
8572fff27f8SJason Evans    allocations.
858d0e79aa3SJason Evans  - Fix test assertion failure message formatting.  This bug did not manifest on
8592fff27f8SJason Evans    x86_64 systems because of implementation subtleties in va_list.
8602fff27f8SJason Evans  - Fix inconsequential test failures for hash and SFMT code.
8612fff27f8SJason Evans
8622fff27f8SJason Evans  New features:
8632fff27f8SJason Evans  - Support heap profiling on FreeBSD.  This feature depends on the proc
8642fff27f8SJason Evans    filesystem being mounted during heap profile dumping.
8652fff27f8SJason Evans
866706d9bd1SJason Evans* 3.5.1 (February 25, 2014)
867706d9bd1SJason Evans
868706d9bd1SJason Evans  This version primarily addresses minor bugs in test code.
869706d9bd1SJason Evans
870706d9bd1SJason Evans  Bug fixes:
871706d9bd1SJason Evans  - Configure Solaris/Illumos to use MADV_FREE.
872706d9bd1SJason Evans  - Fix junk filling for mremap(2)-based huge reallocation.  This is only
873706d9bd1SJason Evans    relevant if configuring with the --enable-mremap option specified.
874706d9bd1SJason Evans  - Avoid compilation failure if 'restrict' C99 keyword is not supported by the
875706d9bd1SJason Evans    compiler.
876706d9bd1SJason Evans  - Add a configure test for SSE2 rather than assuming it is usable on i686
877706d9bd1SJason Evans    systems.  This fixes test compilation errors, especially on 32-bit Linux
878706d9bd1SJason Evans    systems.
879706d9bd1SJason Evans  - Fix mallctl argument size mismatches (size_t vs. uint64_t) in the stats unit
880706d9bd1SJason Evans    test.
881706d9bd1SJason Evans  - Fix/remove flawed alignment-related overflow tests.
882706d9bd1SJason Evans  - Prevent compiler optimizations that could change backtraces in the
883706d9bd1SJason Evans    prof_accum unit test.
884a4bd5210SJason Evans
885f921d10fSJason Evans* 3.5.0 (January 22, 2014)
886f921d10fSJason Evans
887f921d10fSJason Evans  This version focuses on refactoring and automated testing, though it also
888f921d10fSJason Evans  includes some non-trivial heap profiling optimizations not mentioned below.
889f921d10fSJason Evans
890f921d10fSJason Evans  New features:
891f921d10fSJason Evans  - Add the *allocx() API, which is a successor to the experimental *allocm()
892f921d10fSJason Evans    API.  The *allocx() functions are slightly simpler to use because they have
893f921d10fSJason Evans    fewer parameters, they directly return the results of primary interest, and
894f921d10fSJason Evans    mallocx()/rallocx() avoid the strict aliasing pitfall that
895706d9bd1SJason Evans    allocm()/rallocm() share with posix_memalign().  Note that *allocm() is
896f921d10fSJason Evans    slated for removal in the next non-bugfix release.
897f921d10fSJason Evans  - Add support for LinuxThreads.
898f921d10fSJason Evans
899f921d10fSJason Evans  Bug fixes:
900f921d10fSJason Evans  - Unless heap profiling is enabled, disable floating point code and don't link
901f921d10fSJason Evans    with libm.  This, in combination with e.g. EXTRA_CFLAGS=-mno-sse on x64
902f921d10fSJason Evans    systems, makes it possible to completely disable floating point register
903f921d10fSJason Evans    use.  Some versions of glibc neglect to save/restore caller-saved floating
904f921d10fSJason Evans    point registers during dynamic lazy symbol loading, and the symbol loading
905f921d10fSJason Evans    code uses whatever malloc the application happens to have linked/loaded
906f921d10fSJason Evans    with, the result being potential floating point register corruption.
907f921d10fSJason Evans  - Report ENOMEM rather than EINVAL if an OOM occurs during heap profiling
908f921d10fSJason Evans    backtrace creation in imemalign().  This bug impacted posix_memalign() and
909f921d10fSJason Evans    aligned_alloc().
910f921d10fSJason Evans  - Fix a file descriptor leak in a prof_dump_maps() error path.
911f921d10fSJason Evans  - Fix prof_dump() to close the dump file descriptor for all relevant error
912f921d10fSJason Evans    paths.
913f921d10fSJason Evans  - Fix rallocm() to use the arena specified by the ALLOCM_ARENA(s) flag for
914f921d10fSJason Evans    allocation, not just deallocation.
915f921d10fSJason Evans  - Fix a data race for large allocation stats counters.
916f921d10fSJason Evans  - Fix a potential infinite loop during thread exit.  This bug occurred on
917f921d10fSJason Evans    Solaris, and could affect other platforms with similar pthreads TSD
918f921d10fSJason Evans    implementations.
919f921d10fSJason Evans  - Don't junk-fill reallocations unless usable size changes.  This fixes a
920f921d10fSJason Evans    violation of the *allocx()/*allocm() semantics.
921f921d10fSJason Evans  - Fix growing large reallocation to junk fill new space.
922f921d10fSJason Evans  - Fix huge deallocation to junk fill when munmap is disabled.
923f921d10fSJason Evans  - Change the default private namespace prefix from empty to je_, and change
924f921d10fSJason Evans    --with-private-namespace-prefix so that it prepends an additional prefix
925f921d10fSJason Evans    rather than replacing je_.  This reduces the likelihood of applications
926f921d10fSJason Evans    which statically link jemalloc experiencing symbol name collisions.
927f921d10fSJason Evans  - Add missing private namespace mangling (relevant when
928f921d10fSJason Evans    --with-private-namespace is specified).
929f921d10fSJason Evans  - Add and use JEMALLOC_INLINE_C so that static inline functions are marked as
930f921d10fSJason Evans    static even for debug builds.
931f921d10fSJason Evans  - Add a missing mutex unlock in a malloc_init_hard() error path.  In practice
932f921d10fSJason Evans    this error path is never executed.
933f921d10fSJason Evans  - Fix numerous bugs in malloc_strotumax() error handling/reporting.  These
934f921d10fSJason Evans    bugs had no impact except for malformed inputs.
935f921d10fSJason Evans  - Fix numerous bugs in malloc_snprintf().  These bugs were not exercised by
936f921d10fSJason Evans    existing calls, so they had no impact.
937f921d10fSJason Evans
9382b06b201SJason Evans* 3.4.1 (October 20, 2013)
9392b06b201SJason Evans
9402b06b201SJason Evans  Bug fixes:
9412b06b201SJason Evans  - Fix a race in the "arenas.extend" mallctl that could cause memory corruption
9422b06b201SJason Evans    of internal data structures and subsequent crashes.
9432b06b201SJason Evans  - Fix Valgrind integration flaws that caused Valgrind warnings about reads of
9442b06b201SJason Evans    uninitialized memory in:
9452b06b201SJason Evans    + arena chunk headers
9462b06b201SJason Evans    + internal zero-initialized data structures (relevant to tcache and prof
9472b06b201SJason Evans      code)
9482b06b201SJason Evans  - Preserve errno during the first allocation.  A readlink(2) call during
9492b06b201SJason Evans    initialization fails unless /etc/malloc.conf exists, so errno was typically
9502b06b201SJason Evans    set during the first allocation prior to this fix.
9512b06b201SJason Evans  - Fix compilation warnings reported by gcc 4.8.1.
9522b06b201SJason Evans
953f8ca2db1SJason Evans* 3.4.0 (June 2, 2013)
954f8ca2db1SJason Evans
955f8ca2db1SJason Evans  This version is essentially a small bugfix release, but the addition of
956f8ca2db1SJason Evans  aarch64 support requires that the minor version be incremented.
957f8ca2db1SJason Evans
958f8ca2db1SJason Evans  Bug fixes:
959f8ca2db1SJason Evans  - Fix race-triggered deadlocks in chunk_record().  These deadlocks were
960f8ca2db1SJason Evans    typically triggered by multiple threads concurrently deallocating huge
961f8ca2db1SJason Evans    objects.
962f8ca2db1SJason Evans
963f8ca2db1SJason Evans  New features:
964f8ca2db1SJason Evans  - Add support for the aarch64 architecture.
965f8ca2db1SJason Evans
966f8ca2db1SJason Evans* 3.3.1 (March 6, 2013)
967f8ca2db1SJason Evans
968f8ca2db1SJason Evans  This version fixes bugs that are typically encountered only when utilizing
969f8ca2db1SJason Evans  custom run-time options.
970f8ca2db1SJason Evans
971f8ca2db1SJason Evans  Bug fixes:
972f8ca2db1SJason Evans  - Fix a locking order bug that could cause deadlock during fork if heap
973f8ca2db1SJason Evans    profiling were enabled.
974f8ca2db1SJason Evans  - Fix a chunk recycling bug that could cause the allocator to lose track of
975f8ca2db1SJason Evans    whether a chunk was zeroed.  On FreeBSD, NetBSD, and OS X, it could cause
976f8ca2db1SJason Evans    corruption if allocating via sbrk(2) (unlikely unless running with the
977f8ca2db1SJason Evans    "dss:primary" option specified).  This was completely harmless on Linux
978f8ca2db1SJason Evans    unless using mlockall(2) (and unlikely even then, unless the
979f8ca2db1SJason Evans    --disable-munmap configure option or the "dss:primary" option was
980f8ca2db1SJason Evans    specified).  This regression was introduced in 3.1.0 by the
981f8ca2db1SJason Evans    mlockall(2)/madvise(2) interaction fix.
982f8ca2db1SJason Evans  - Fix TLS-related memory corruption that could occur during thread exit if the
983f8ca2db1SJason Evans    thread never allocated memory.  Only the quarantine and prof facilities were
984f8ca2db1SJason Evans    susceptible.
985f8ca2db1SJason Evans  - Fix two quarantine bugs:
986f8ca2db1SJason Evans    + Internal reallocation of the quarantined object array leaked the old
987f8ca2db1SJason Evans      array.
988f8ca2db1SJason Evans    + Reallocation failure for internal reallocation of the quarantined object
989f8ca2db1SJason Evans      array (very unlikely) resulted in memory corruption.
990f8ca2db1SJason Evans  - Fix Valgrind integration to annotate all internally allocated memory in a
991f8ca2db1SJason Evans    way that keeps Valgrind happy about internal data structure access.
992f8ca2db1SJason Evans  - Fix building for s390 systems.
993f8ca2db1SJason Evans
99488ad2f8dSJason Evans* 3.3.0 (January 23, 2013)
99588ad2f8dSJason Evans
99688ad2f8dSJason Evans  This version includes a few minor performance improvements in addition to the
99788ad2f8dSJason Evans  listed new features and bug fixes.
99888ad2f8dSJason Evans
99988ad2f8dSJason Evans  New features:
100088ad2f8dSJason Evans  - Add clipping support to lg_chunk option processing.
100188ad2f8dSJason Evans  - Add the --enable-ivsalloc option.
100288ad2f8dSJason Evans  - Add the --without-export option.
100388ad2f8dSJason Evans  - Add the --disable-zone-allocator option.
100488ad2f8dSJason Evans
100588ad2f8dSJason Evans  Bug fixes:
100688ad2f8dSJason Evans  - Fix "arenas.extend" mallctl to output the number of arenas.
10072b06b201SJason Evans  - Fix chunk_recycle() to unconditionally inform Valgrind that returned memory
100888ad2f8dSJason Evans    is undefined.
100988ad2f8dSJason Evans  - Fix build break on FreeBSD related to alloca.h.
101088ad2f8dSJason Evans
101182872ac0SJason Evans* 3.2.0 (November 9, 2012)
101282872ac0SJason Evans
101382872ac0SJason Evans  In addition to a couple of bug fixes, this version modifies page run
101482872ac0SJason Evans  allocation and dirty page purging algorithms in order to better control
101582872ac0SJason Evans  page-level virtual memory fragmentation.
101682872ac0SJason Evans
101782872ac0SJason Evans  Incompatible changes:
101882872ac0SJason Evans  - Change the "opt.lg_dirty_mult" default from 5 to 3 (32:1 to 8:1).
101982872ac0SJason Evans
102082872ac0SJason Evans  Bug fixes:
102182872ac0SJason Evans  - Fix dss/mmap allocation precedence code to use recyclable mmap memory only
102282872ac0SJason Evans    after primary dss allocation fails.
102382872ac0SJason Evans  - Fix deadlock in the "arenas.purge" mallctl.  This regression was introduced
102482872ac0SJason Evans    in 3.1.0 by the addition of the "arena.<i>.purge" mallctl.
102582872ac0SJason Evans
102682872ac0SJason Evans* 3.1.0 (October 16, 2012)
102782872ac0SJason Evans
102882872ac0SJason Evans  New features:
102982872ac0SJason Evans  - Auto-detect whether running inside Valgrind, thus removing the need to
103082872ac0SJason Evans    manually specify MALLOC_CONF=valgrind:true.
103182872ac0SJason Evans  - Add the "arenas.extend" mallctl, which allows applications to create
103282872ac0SJason Evans    manually managed arenas.
103382872ac0SJason Evans  - Add the ALLOCM_ARENA() flag for {,r,d}allocm().
103482872ac0SJason Evans  - Add the "opt.dss", "arena.<i>.dss", and "stats.arenas.<i>.dss" mallctls,
103582872ac0SJason Evans    which provide control over dss/mmap precedence.
103682872ac0SJason Evans  - Add the "arena.<i>.purge" mallctl, which obsoletes "arenas.purge".
103782872ac0SJason Evans  - Define LG_QUANTUM for hppa.
103882872ac0SJason Evans
103982872ac0SJason Evans  Incompatible changes:
104082872ac0SJason Evans  - Disable tcache by default if running inside Valgrind, in order to avoid
104182872ac0SJason Evans    making unallocated objects appear reachable to Valgrind.
104282872ac0SJason Evans  - Drop const from malloc_usable_size() argument on Linux.
104382872ac0SJason Evans
104482872ac0SJason Evans  Bug fixes:
104582872ac0SJason Evans  - Fix heap profiling crash if sampled object is freed via realloc(p, 0).
104682872ac0SJason Evans  - Remove const from __*_hook variable declarations, so that glibc can modify
104782872ac0SJason Evans    them during process forking.
104882872ac0SJason Evans  - Fix mlockall(2)/madvise(2) interaction.
104982872ac0SJason Evans  - Fix fork(2)-related deadlocks.
105082872ac0SJason Evans  - Fix error return value for "thread.tcache.enabled" mallctl.
105182872ac0SJason Evans
105235dad073SJason Evans* 3.0.0 (May 11, 2012)
1053a4bd5210SJason Evans
1054a4bd5210SJason Evans  Although this version adds some major new features, the primary focus is on
1055a4bd5210SJason Evans  internal code cleanup that facilitates maintainability and portability, most
1056a4bd5210SJason Evans  of which is not reflected in the ChangeLog.  This is the first release to
1057a4bd5210SJason Evans  incorporate substantial contributions from numerous other developers, and the
1058a4bd5210SJason Evans  result is a more broadly useful allocator (see the git revision history for
1059a4bd5210SJason Evans  contribution details).  Note that the license has been unified, thanks to
1060a4bd5210SJason Evans  Facebook granting a license under the same terms as the other copyright
1061a4bd5210SJason Evans  holders (see COPYING).
1062a4bd5210SJason Evans
1063a4bd5210SJason Evans  New features:
1064a4bd5210SJason Evans  - Implement Valgrind support, redzones, and quarantine.
1065e722f8f8SJason Evans  - Add support for additional platforms:
1066a4bd5210SJason Evans    + FreeBSD
1067a4bd5210SJason Evans    + Mac OS X Lion
1068e722f8f8SJason Evans    + MinGW
106935dad073SJason Evans    + Windows (no support yet for replacing the system malloc)
1070a4bd5210SJason Evans  - Add support for additional architectures:
1071a4bd5210SJason Evans    + MIPS
1072a4bd5210SJason Evans    + SH4
1073a4bd5210SJason Evans    + Tilera
1074a4bd5210SJason Evans  - Add support for cross compiling.
1075a4bd5210SJason Evans  - Add nallocm(), which rounds a request size up to the nearest size class
1076a4bd5210SJason Evans    without actually allocating.
1077a4bd5210SJason Evans  - Implement aligned_alloc() (blame C11).
1078a4bd5210SJason Evans  - Add the "thread.tcache.enabled" mallctl.
10798ed34ab0SJason Evans  - Add the "opt.prof_final" mallctl.
10808ed34ab0SJason Evans  - Update pprof (from gperftools 2.0).
108135dad073SJason Evans  - Add the --with-mangling option.
108235dad073SJason Evans  - Add the --disable-experimental option.
108335dad073SJason Evans  - Add the --disable-munmap option, and make it the default on Linux.
108435dad073SJason Evans  - Add the --enable-mremap option, which disables use of mremap(2) by default.
1085a4bd5210SJason Evans
1086a4bd5210SJason Evans  Incompatible changes:
1087a4bd5210SJason Evans  - Enable stats by default.
1088a4bd5210SJason Evans  - Enable fill by default.
1089a4bd5210SJason Evans  - Disable lazy locking by default.
1090a4bd5210SJason Evans  - Rename the "tcache.flush" mallctl to "thread.tcache.flush".
1091a4bd5210SJason Evans  - Rename the "arenas.pagesize" mallctl to "arenas.page".
10928ed34ab0SJason Evans  - Change the "opt.lg_prof_sample" default from 0 to 19 (1 B to 512 KiB).
10938ed34ab0SJason Evans  - Change the "opt.prof_accum" default from true to false.
1094a4bd5210SJason Evans
1095a4bd5210SJason Evans  Removed features:
1096a4bd5210SJason Evans  - Remove the swap feature, including the "config.swap", "swap.avail",
1097a4bd5210SJason Evans    "swap.prezeroed", "swap.nfds", and "swap.fds" mallctls.
1098a4bd5210SJason Evans  - Remove highruns statistics, including the
1099a4bd5210SJason Evans    "stats.arenas.<i>.bins.<j>.highruns" and
1100a4bd5210SJason Evans    "stats.arenas.<i>.lruns.<j>.highruns" mallctls.
1101a4bd5210SJason Evans  - As part of small size class refactoring, remove the "opt.lg_[qc]space_max",
1102a4bd5210SJason Evans    "arenas.cacheline", "arenas.subpage", "arenas.[tqcs]space_{min,max}", and
1103a4bd5210SJason Evans    "arenas.[tqcs]bins" mallctls.
1104a4bd5210SJason Evans  - Remove the "arenas.chunksize" mallctl.
1105a4bd5210SJason Evans  - Remove the "opt.lg_prof_tcmax" option.
1106a4bd5210SJason Evans  - Remove the "opt.lg_prof_bt_max" option.
1107a4bd5210SJason Evans  - Remove the "opt.lg_tcache_gc_sweep" option.
1108a4bd5210SJason Evans  - Remove the --disable-tiny option, including the "config.tiny" mallctl.
1109a4bd5210SJason Evans  - Remove the --enable-dynamic-page-shift configure option.
1110a4bd5210SJason Evans  - Remove the --enable-sysv configure option.
1111a4bd5210SJason Evans
1112a4bd5210SJason Evans  Bug fixes:
1113a4bd5210SJason Evans  - Fix a statistics-related bug in the "thread.arena" mallctl that could cause
1114a4bd5210SJason Evans    invalid statistics and crashes.
1115e722f8f8SJason Evans  - Work around TLS deallocation via free() on Linux.  This bug could cause
1116a4bd5210SJason Evans    write-after-free memory corruption.
1117e722f8f8SJason Evans  - Fix a potential deadlock that could occur during interval- and
1118e722f8f8SJason Evans    growth-triggered heap profile dumps.
111935dad073SJason Evans  - Fix large calloc() zeroing bugs due to dropping chunk map unzeroed flags.
11204bcb1430SJason Evans  - Fix chunk_alloc_dss() to stop claiming memory is zeroed.  This bug could
11214bcb1430SJason Evans    cause memory corruption and crashes with --enable-dss specified.
1122e722f8f8SJason Evans  - Fix fork-related bugs that could cause deadlock in children between fork
1123e722f8f8SJason Evans    and exec.
1124a4bd5210SJason Evans  - Fix malloc_stats_print() to honor 'b' and 'l' in the opts parameter.
1125a4bd5210SJason Evans  - Fix realloc(p, 0) to act like free(p).
1126a4bd5210SJason Evans  - Do not enforce minimum alignment in memalign().
1127a4bd5210SJason Evans  - Check for NULL pointer in malloc_usable_size().
1128e722f8f8SJason Evans  - Fix an off-by-one heap profile statistics bug that could be observed in
1129e722f8f8SJason Evans    interval- and growth-triggered heap profiles.
1130e722f8f8SJason Evans  - Fix the "epoch" mallctl to update cached stats even if the passed in epoch
1131e722f8f8SJason Evans    is 0.
1132a4bd5210SJason Evans  - Fix bin->runcur management to fix a layout policy bug.  This bug did not
1133a4bd5210SJason Evans    affect correctness.
1134a4bd5210SJason Evans  - Fix a bug in choose_arena_hard() that potentially caused more arenas to be
1135a4bd5210SJason Evans    initialized than necessary.
1136a4bd5210SJason Evans  - Add missing "opt.lg_tcache_max" mallctl implementation.
1137a4bd5210SJason Evans  - Use glibc allocator hooks to make mixed allocator usage less likely.
1138a4bd5210SJason Evans  - Fix build issues for --disable-tcache.
11398ed34ab0SJason Evans  - Don't mangle pthread_create() when --with-private-namespace is specified.
1140a4bd5210SJason Evans
1141a4bd5210SJason Evans* 2.2.5 (November 14, 2011)
1142a4bd5210SJason Evans
1143a4bd5210SJason Evans  Bug fixes:
1144a4bd5210SJason Evans  - Fix huge_ralloc() race when using mremap(2).  This is a serious bug that
1145a4bd5210SJason Evans    could cause memory corruption and/or crashes.
1146a4bd5210SJason Evans  - Fix huge_ralloc() to maintain chunk statistics.
1147a4bd5210SJason Evans  - Fix malloc_stats_print(..., "a") output.
1148a4bd5210SJason Evans
1149a4bd5210SJason Evans* 2.2.4 (November 5, 2011)
1150a4bd5210SJason Evans
1151a4bd5210SJason Evans  Bug fixes:
1152a4bd5210SJason Evans  - Initialize arenas_tsd before using it.  This bug existed for 2.2.[0-3], as
1153a4bd5210SJason Evans    well as for --disable-tls builds in earlier releases.
1154a4bd5210SJason Evans  - Do not assume a 4 KiB page size in test/rallocm.c.
1155a4bd5210SJason Evans
1156a4bd5210SJason Evans* 2.2.3 (August 31, 2011)
1157a4bd5210SJason Evans
1158a4bd5210SJason Evans  This version fixes numerous bugs related to heap profiling.
1159a4bd5210SJason Evans
1160a4bd5210SJason Evans  Bug fixes:
1161a4bd5210SJason Evans  - Fix a prof-related race condition.  This bug could cause memory corruption,
1162a4bd5210SJason Evans    but only occurred in non-default configurations (prof_accum:false).
1163a4bd5210SJason Evans  - Fix off-by-one backtracing issues (make sure that prof_alloc_prep() is
1164a4bd5210SJason Evans    excluded from backtraces).
1165a4bd5210SJason Evans  - Fix a prof-related bug in realloc() (only triggered by OOM errors).
1166a4bd5210SJason Evans  - Fix prof-related bugs in allocm() and rallocm().
1167a4bd5210SJason Evans  - Fix prof_tdata_cleanup() for --disable-tls builds.
1168a4bd5210SJason Evans  - Fix a relative include path, to fix objdir builds.
1169a4bd5210SJason Evans
1170a4bd5210SJason Evans* 2.2.2 (July 30, 2011)
1171a4bd5210SJason Evans
1172a4bd5210SJason Evans  Bug fixes:
1173a4bd5210SJason Evans  - Fix a build error for --disable-tcache.
1174a4bd5210SJason Evans  - Fix assertions in arena_purge() (for real this time).
1175a4bd5210SJason Evans  - Add the --with-private-namespace option.  This is a workaround for symbol
1176a4bd5210SJason Evans    conflicts that can inadvertently arise when using static libraries.
1177a4bd5210SJason Evans
1178a4bd5210SJason Evans* 2.2.1 (March 30, 2011)
1179a4bd5210SJason Evans
1180a4bd5210SJason Evans  Bug fixes:
1181a4bd5210SJason Evans  - Implement atomic operations for x86/x64.  This fixes compilation failures
1182a4bd5210SJason Evans    for versions of gcc that are still in wide use.
1183a4bd5210SJason Evans  - Fix an assertion in arena_purge().
1184a4bd5210SJason Evans
1185a4bd5210SJason Evans* 2.2.0 (March 22, 2011)
1186a4bd5210SJason Evans
1187a4bd5210SJason Evans  This version incorporates several improvements to algorithms and data
1188a4bd5210SJason Evans  structures that tend to reduce fragmentation and increase speed.
1189a4bd5210SJason Evans
1190a4bd5210SJason Evans  New features:
1191a4bd5210SJason Evans  - Add the "stats.cactive" mallctl.
1192a4bd5210SJason Evans  - Update pprof (from google-perftools 1.7).
1193a4bd5210SJason Evans  - Improve backtracing-related configuration logic, and add the
1194a4bd5210SJason Evans    --disable-prof-libgcc option.
1195a4bd5210SJason Evans
1196a4bd5210SJason Evans  Bug fixes:
1197a4bd5210SJason Evans  - Change default symbol visibility from "internal", to "hidden", which
1198a4bd5210SJason Evans    decreases the overhead of library-internal function calls.
1199a4bd5210SJason Evans  - Fix symbol visibility so that it is also set on OS X.
1200a4bd5210SJason Evans  - Fix a build dependency regression caused by the introduction of the .pic.o
1201a4bd5210SJason Evans    suffix for PIC object files.
1202a4bd5210SJason Evans  - Add missing checks for mutex initialization failures.
1203a4bd5210SJason Evans  - Don't use libgcc-based backtracing except on x64, where it is known to work.
1204a4bd5210SJason Evans  - Fix deadlocks on OS X that were due to memory allocation in
1205a4bd5210SJason Evans    pthread_mutex_lock().
1206a4bd5210SJason Evans  - Heap profiling-specific fixes:
1207a4bd5210SJason Evans    + Fix memory corruption due to integer overflow in small region index
1208a4bd5210SJason Evans      computation, when using a small enough sample interval that profiling
1209a4bd5210SJason Evans      context pointers are stored in small run headers.
1210a4bd5210SJason Evans    + Fix a bootstrap ordering bug that only occurred with TLS disabled.
1211a4bd5210SJason Evans    + Fix a rallocm() rsize bug.
1212a4bd5210SJason Evans    + Fix error detection bugs for aligned memory allocation.
1213a4bd5210SJason Evans
1214a4bd5210SJason Evans* 2.1.3 (March 14, 2011)
1215a4bd5210SJason Evans
1216a4bd5210SJason Evans  Bug fixes:
1217a4bd5210SJason Evans  - Fix a cpp logic regression (due to the "thread.{de,}allocatedp" mallctl fix
1218a4bd5210SJason Evans    for OS X in 2.1.2).
1219a4bd5210SJason Evans  - Fix a "thread.arena" mallctl bug.
1220a4bd5210SJason Evans  - Fix a thread cache stats merging bug.
1221a4bd5210SJason Evans
1222a4bd5210SJason Evans* 2.1.2 (March 2, 2011)
1223a4bd5210SJason Evans
1224a4bd5210SJason Evans  Bug fixes:
1225a4bd5210SJason Evans  - Fix "thread.{de,}allocatedp" mallctl for OS X.
1226a4bd5210SJason Evans  - Add missing jemalloc.a to build system.
1227a4bd5210SJason Evans
1228a4bd5210SJason Evans* 2.1.1 (January 31, 2011)
1229a4bd5210SJason Evans
1230a4bd5210SJason Evans  Bug fixes:
1231a4bd5210SJason Evans  - Fix aligned huge reallocation (affected allocm()).
1232a4bd5210SJason Evans  - Fix the ALLOCM_LG_ALIGN macro definition.
1233a4bd5210SJason Evans  - Fix a heap dumping deadlock.
1234a4bd5210SJason Evans  - Fix a "thread.arena" mallctl bug.
1235a4bd5210SJason Evans
1236a4bd5210SJason Evans* 2.1.0 (December 3, 2010)
1237a4bd5210SJason Evans
1238a4bd5210SJason Evans  This version incorporates some optimizations that can't quite be considered
1239a4bd5210SJason Evans  bug fixes.
1240a4bd5210SJason Evans
1241a4bd5210SJason Evans  New features:
1242a4bd5210SJason Evans  - Use Linux's mremap(2) for huge object reallocation when possible.
1243a4bd5210SJason Evans  - Avoid locking in mallctl*() when possible.
1244a4bd5210SJason Evans  - Add the "thread.[de]allocatedp" mallctl's.
1245a4bd5210SJason Evans  - Convert the manual page source from roff to DocBook, and generate both roff
1246a4bd5210SJason Evans    and HTML manuals.
1247a4bd5210SJason Evans
1248a4bd5210SJason Evans  Bug fixes:
1249a4bd5210SJason Evans  - Fix a crash due to incorrect bootstrap ordering.  This only impacted
1250a4bd5210SJason Evans    --enable-debug --enable-dss configurations.
1251a4bd5210SJason Evans  - Fix a minor statistics bug for mallctl("swap.avail", ...).
1252a4bd5210SJason Evans
1253a4bd5210SJason Evans* 2.0.1 (October 29, 2010)
1254a4bd5210SJason Evans
1255a4bd5210SJason Evans  Bug fixes:
1256a4bd5210SJason Evans  - Fix a race condition in heap profiling that could cause undefined behavior
1257a4bd5210SJason Evans    if "opt.prof_accum" were disabled.
1258a4bd5210SJason Evans  - Add missing mutex unlocks for some OOM error paths in the heap profiling
1259a4bd5210SJason Evans    code.
1260a4bd5210SJason Evans  - Fix a compilation error for non-C99 builds.
1261a4bd5210SJason Evans
1262a4bd5210SJason Evans* 2.0.0 (October 24, 2010)
1263a4bd5210SJason Evans
1264a4bd5210SJason Evans  This version focuses on the experimental *allocm() API, and on improved
1265a4bd5210SJason Evans  run-time configuration/introspection.  Nonetheless, numerous performance
1266a4bd5210SJason Evans  improvements are also included.
1267a4bd5210SJason Evans
1268a4bd5210SJason Evans  New features:
1269a4bd5210SJason Evans  - Implement the experimental {,r,s,d}allocm() API, which provides a superset
1270a4bd5210SJason Evans    of the functionality available via malloc(), calloc(), posix_memalign(),
1271a4bd5210SJason Evans    realloc(), malloc_usable_size(), and free().  These functions can be used to
1272a4bd5210SJason Evans    allocate/reallocate aligned zeroed memory, ask for optional extra memory
1273a4bd5210SJason Evans    during reallocation, prevent object movement during reallocation, etc.
1274a4bd5210SJason Evans  - Replace JEMALLOC_OPTIONS/JEMALLOC_PROF_PREFIX with MALLOC_CONF, which is
1275a4bd5210SJason Evans    more human-readable, and more flexible.  For example:
1276a4bd5210SJason Evans      JEMALLOC_OPTIONS=AJP
1277a4bd5210SJason Evans    is now:
1278a4bd5210SJason Evans      MALLOC_CONF=abort:true,fill:true,stats_print:true
1279a4bd5210SJason Evans  - Port to Apple OS X.  Sponsored by Mozilla.
1280a4bd5210SJason Evans  - Make it possible for the application to control thread-->arena mappings via
1281a4bd5210SJason Evans    the "thread.arena" mallctl.
1282a4bd5210SJason Evans  - Add compile-time support for all TLS-related functionality via pthreads TSD.
1283a4bd5210SJason Evans    This is mainly of interest for OS X, which does not support TLS, but has a
1284a4bd5210SJason Evans    TSD implementation with similar performance.
1285a4bd5210SJason Evans  - Override memalign() and valloc() if they are provided by the system.
1286a4bd5210SJason Evans  - Add the "arenas.purge" mallctl, which can be used to synchronously purge all
1287a4bd5210SJason Evans    dirty unused pages.
1288a4bd5210SJason Evans  - Make cumulative heap profiling data optional, so that it is possible to
1289a4bd5210SJason Evans    limit the amount of memory consumed by heap profiling data structures.
1290a4bd5210SJason Evans  - Add per thread allocation counters that can be accessed via the
1291a4bd5210SJason Evans    "thread.allocated" and "thread.deallocated" mallctls.
1292a4bd5210SJason Evans
1293a4bd5210SJason Evans  Incompatible changes:
1294a4bd5210SJason Evans  - Remove JEMALLOC_OPTIONS and malloc_options (see MALLOC_CONF above).
1295a4bd5210SJason Evans  - Increase default backtrace depth from 4 to 128 for heap profiling.
1296a4bd5210SJason Evans  - Disable interval-based profile dumps by default.
1297a4bd5210SJason Evans
1298a4bd5210SJason Evans  Bug fixes:
1299a4bd5210SJason Evans  - Remove bad assertions in fork handler functions.  These assertions could
1300a4bd5210SJason Evans    cause aborts for some combinations of configure settings.
1301a4bd5210SJason Evans  - Fix strerror_r() usage to deal with non-standard semantics in GNU libc.
1302a4bd5210SJason Evans  - Fix leak context reporting.  This bug tended to cause the number of contexts
1303a4bd5210SJason Evans    to be underreported (though the reported number of objects and bytes were
1304a4bd5210SJason Evans    correct).
1305a4bd5210SJason Evans  - Fix a realloc() bug for large in-place growing reallocation.  This bug could
1306a4bd5210SJason Evans    cause memory corruption, but it was hard to trigger.
1307a4bd5210SJason Evans  - Fix an allocation bug for small allocations that could be triggered if
1308a4bd5210SJason Evans    multiple threads raced to create a new run of backing pages.
1309a4bd5210SJason Evans  - Enhance the heap profiler to trigger samples based on usable size, rather
1310a4bd5210SJason Evans    than request size.
1311a4bd5210SJason Evans  - Fix a heap profiling bug due to sometimes losing track of requested object
1312a4bd5210SJason Evans    size for sampled objects.
1313a4bd5210SJason Evans
1314a4bd5210SJason Evans* 1.0.3 (August 12, 2010)
1315a4bd5210SJason Evans
1316a4bd5210SJason Evans  Bug fixes:
1317a4bd5210SJason Evans  - Fix the libunwind-based implementation of stack backtracing (used for heap
1318a4bd5210SJason Evans    profiling).  This bug could cause zero-length backtraces to be reported.
1319a4bd5210SJason Evans  - Add a missing mutex unlock in library initialization code.  If multiple
1320a4bd5210SJason Evans    threads raced to initialize malloc, some of them could end up permanently
1321a4bd5210SJason Evans    blocked.
1322a4bd5210SJason Evans
1323a4bd5210SJason Evans* 1.0.2 (May 11, 2010)
1324a4bd5210SJason Evans
1325a4bd5210SJason Evans  Bug fixes:
1326a4bd5210SJason Evans  - Fix junk filling of large objects, which could cause memory corruption.
1327a4bd5210SJason Evans  - Add MAP_NORESERVE support for chunk mapping, because otherwise virtual
1328a4bd5210SJason Evans    memory limits could cause swap file configuration to fail.  Contributed by
1329a4bd5210SJason Evans    Jordan DeLong.
1330a4bd5210SJason Evans
1331a4bd5210SJason Evans* 1.0.1 (April 14, 2010)
1332a4bd5210SJason Evans
1333a4bd5210SJason Evans  Bug fixes:
1334a4bd5210SJason Evans  - Fix compilation when --enable-fill is specified.
1335a4bd5210SJason Evans  - Fix threads-related profiling bugs that affected accuracy and caused memory
1336a4bd5210SJason Evans    to be leaked during thread exit.
1337a4bd5210SJason Evans  - Fix dirty page purging race conditions that could cause crashes.
1338a4bd5210SJason Evans  - Fix crash in tcache flushing code during thread destruction.
1339a4bd5210SJason Evans
1340a4bd5210SJason Evans* 1.0.0 (April 11, 2010)
1341a4bd5210SJason Evans
1342a4bd5210SJason Evans  This release focuses on speed and run-time introspection.  Numerous
1343a4bd5210SJason Evans  algorithmic improvements make this release substantially faster than its
1344a4bd5210SJason Evans  predecessors.
1345a4bd5210SJason Evans
1346a4bd5210SJason Evans  New features:
1347a4bd5210SJason Evans  - Implement autoconf-based configuration system.
1348a4bd5210SJason Evans  - Add mallctl*(), for the purposes of introspection and run-time
1349a4bd5210SJason Evans    configuration.
1350a4bd5210SJason Evans  - Make it possible for the application to manually flush a thread's cache, via
1351a4bd5210SJason Evans    the "tcache.flush" mallctl.
1352a4bd5210SJason Evans  - Base maximum dirty page count on proportion of active memory.
1353d0e79aa3SJason Evans  - Compute various additional run-time statistics, including per size class
1354a4bd5210SJason Evans    statistics for large objects.
1355a4bd5210SJason Evans  - Expose malloc_stats_print(), which can be called repeatedly by the
1356a4bd5210SJason Evans    application.
1357a4bd5210SJason Evans  - Simplify the malloc_message() signature to only take one string argument,
1358a4bd5210SJason Evans    and incorporate an opaque data pointer argument for use by the application
1359a4bd5210SJason Evans    in combination with malloc_stats_print().
1360a4bd5210SJason Evans  - Add support for allocation backed by one or more swap files, and allow the
1361a4bd5210SJason Evans    application to disable over-commit if swap files are in use.
1362a4bd5210SJason Evans  - Implement allocation profiling and leak checking.
1363a4bd5210SJason Evans
1364a4bd5210SJason Evans  Removed features:
1365a4bd5210SJason Evans  - Remove the dynamic arena rebalancing code, since thread-specific caching
1366a4bd5210SJason Evans    reduces its utility.
1367a4bd5210SJason Evans
1368a4bd5210SJason Evans  Bug fixes:
1369a4bd5210SJason Evans  - Modify chunk allocation to work when address space layout randomization
1370a4bd5210SJason Evans    (ASLR) is in use.
1371a4bd5210SJason Evans  - Fix thread cleanup bugs related to TLS destruction.
1372a4bd5210SJason Evans  - Handle 0-size allocation requests in posix_memalign().
1373a4bd5210SJason Evans  - Fix a chunk leak.  The leaked chunks were never touched, so this impacted
1374a4bd5210SJason Evans    virtual memory usage, but not physical memory usage.
1375a4bd5210SJason Evans
1376a4bd5210SJason Evans* linux_2008082[78]a (August 27/28, 2008)
1377a4bd5210SJason Evans
1378a4bd5210SJason Evans  These snapshot releases are the simple result of incorporating Linux-specific
1379a4bd5210SJason Evans  support into the FreeBSD malloc sources.
1380a4bd5210SJason Evans
1381a4bd5210SJason Evans--------------------------------------------------------------------------------
1382a4bd5210SJason Evansvim:filetype=text:textwidth=80
1383