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