1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/memory/jemalloc/src/ChangeLog Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,385 @@ 1.4 +Following are change highlights associated with official releases. Important 1.5 +bug fixes are all mentioned, but internal enhancements are omitted here for 1.6 +brevity (even though they are more fun to write about). Much more detail can be 1.7 +found in the git revision history: 1.8 + 1.9 + http://www.canonware.com/cgi-bin/gitweb.cgi?p=jemalloc.git 1.10 + git://canonware.com/jemalloc.git 1.11 + 1.12 +* 3.x.x (Not yet released) 1.13 + 1.14 + Bug fixes: 1.15 + - Fix "arenas.extend" mallctl to output the number of arenas. 1.16 + 1.17 +* 3.2.0 (November 9, 2012) 1.18 + 1.19 + In addition to a couple of bug fixes, this version modifies page run 1.20 + allocation and dirty page purging algorithms in order to better control 1.21 + page-level virtual memory fragmentation. 1.22 + 1.23 + Incompatible changes: 1.24 + - Change the "opt.lg_dirty_mult" default from 5 to 3 (32:1 to 8:1). 1.25 + 1.26 + Bug fixes: 1.27 + - Fix dss/mmap allocation precedence code to use recyclable mmap memory only 1.28 + after primary dss allocation fails. 1.29 + - Fix deadlock in the "arenas.purge" mallctl. This regression was introduced 1.30 + in 3.1.0 by the addition of the "arena.<i>.purge" mallctl. 1.31 + 1.32 +* 3.1.0 (October 16, 2012) 1.33 + 1.34 + New features: 1.35 + - Auto-detect whether running inside Valgrind, thus removing the need to 1.36 + manually specify MALLOC_CONF=valgrind:true. 1.37 + - Add the "arenas.extend" mallctl, which allows applications to create 1.38 + manually managed arenas. 1.39 + - Add the ALLOCM_ARENA() flag for {,r,d}allocm(). 1.40 + - Add the "opt.dss", "arena.<i>.dss", and "stats.arenas.<i>.dss" mallctls, 1.41 + which provide control over dss/mmap precedence. 1.42 + - Add the "arena.<i>.purge" mallctl, which obsoletes "arenas.purge". 1.43 + - Define LG_QUANTUM for hppa. 1.44 + 1.45 + Incompatible changes: 1.46 + - Disable tcache by default if running inside Valgrind, in order to avoid 1.47 + making unallocated objects appear reachable to Valgrind. 1.48 + - Drop const from malloc_usable_size() argument on Linux. 1.49 + 1.50 + Bug fixes: 1.51 + - Fix heap profiling crash if sampled object is freed via realloc(p, 0). 1.52 + - Remove const from __*_hook variable declarations, so that glibc can modify 1.53 + them during process forking. 1.54 + - Fix mlockall(2)/madvise(2) interaction. 1.55 + - Fix fork(2)-related deadlocks. 1.56 + - Fix error return value for "thread.tcache.enabled" mallctl. 1.57 + 1.58 +* 3.0.0 (May 11, 2012) 1.59 + 1.60 + Although this version adds some major new features, the primary focus is on 1.61 + internal code cleanup that facilitates maintainability and portability, most 1.62 + of which is not reflected in the ChangeLog. This is the first release to 1.63 + incorporate substantial contributions from numerous other developers, and the 1.64 + result is a more broadly useful allocator (see the git revision history for 1.65 + contribution details). Note that the license has been unified, thanks to 1.66 + Facebook granting a license under the same terms as the other copyright 1.67 + holders (see COPYING). 1.68 + 1.69 + New features: 1.70 + - Implement Valgrind support, redzones, and quarantine. 1.71 + - Add support for additional platforms: 1.72 + + FreeBSD 1.73 + + Mac OS X Lion 1.74 + + MinGW 1.75 + + Windows (no support yet for replacing the system malloc) 1.76 + - Add support for additional architectures: 1.77 + + MIPS 1.78 + + SH4 1.79 + + Tilera 1.80 + - Add support for cross compiling. 1.81 + - Add nallocm(), which rounds a request size up to the nearest size class 1.82 + without actually allocating. 1.83 + - Implement aligned_alloc() (blame C11). 1.84 + - Add the "thread.tcache.enabled" mallctl. 1.85 + - Add the "opt.prof_final" mallctl. 1.86 + - Update pprof (from gperftools 2.0). 1.87 + - Add the --with-mangling option. 1.88 + - Add the --disable-experimental option. 1.89 + - Add the --disable-munmap option, and make it the default on Linux. 1.90 + - Add the --enable-mremap option, which disables use of mremap(2) by default. 1.91 + 1.92 + Incompatible changes: 1.93 + - Enable stats by default. 1.94 + - Enable fill by default. 1.95 + - Disable lazy locking by default. 1.96 + - Rename the "tcache.flush" mallctl to "thread.tcache.flush". 1.97 + - Rename the "arenas.pagesize" mallctl to "arenas.page". 1.98 + - Change the "opt.lg_prof_sample" default from 0 to 19 (1 B to 512 KiB). 1.99 + - Change the "opt.prof_accum" default from true to false. 1.100 + 1.101 + Removed features: 1.102 + - Remove the swap feature, including the "config.swap", "swap.avail", 1.103 + "swap.prezeroed", "swap.nfds", and "swap.fds" mallctls. 1.104 + - Remove highruns statistics, including the 1.105 + "stats.arenas.<i>.bins.<j>.highruns" and 1.106 + "stats.arenas.<i>.lruns.<j>.highruns" mallctls. 1.107 + - As part of small size class refactoring, remove the "opt.lg_[qc]space_max", 1.108 + "arenas.cacheline", "arenas.subpage", "arenas.[tqcs]space_{min,max}", and 1.109 + "arenas.[tqcs]bins" mallctls. 1.110 + - Remove the "arenas.chunksize" mallctl. 1.111 + - Remove the "opt.lg_prof_tcmax" option. 1.112 + - Remove the "opt.lg_prof_bt_max" option. 1.113 + - Remove the "opt.lg_tcache_gc_sweep" option. 1.114 + - Remove the --disable-tiny option, including the "config.tiny" mallctl. 1.115 + - Remove the --enable-dynamic-page-shift configure option. 1.116 + - Remove the --enable-sysv configure option. 1.117 + 1.118 + Bug fixes: 1.119 + - Fix a statistics-related bug in the "thread.arena" mallctl that could cause 1.120 + invalid statistics and crashes. 1.121 + - Work around TLS deallocation via free() on Linux. This bug could cause 1.122 + write-after-free memory corruption. 1.123 + - Fix a potential deadlock that could occur during interval- and 1.124 + growth-triggered heap profile dumps. 1.125 + - Fix large calloc() zeroing bugs due to dropping chunk map unzeroed flags. 1.126 + - Fix chunk_alloc_dss() to stop claiming memory is zeroed. This bug could 1.127 + cause memory corruption and crashes with --enable-dss specified. 1.128 + - Fix fork-related bugs that could cause deadlock in children between fork 1.129 + and exec. 1.130 + - Fix malloc_stats_print() to honor 'b' and 'l' in the opts parameter. 1.131 + - Fix realloc(p, 0) to act like free(p). 1.132 + - Do not enforce minimum alignment in memalign(). 1.133 + - Check for NULL pointer in malloc_usable_size(). 1.134 + - Fix an off-by-one heap profile statistics bug that could be observed in 1.135 + interval- and growth-triggered heap profiles. 1.136 + - Fix the "epoch" mallctl to update cached stats even if the passed in epoch 1.137 + is 0. 1.138 + - Fix bin->runcur management to fix a layout policy bug. This bug did not 1.139 + affect correctness. 1.140 + - Fix a bug in choose_arena_hard() that potentially caused more arenas to be 1.141 + initialized than necessary. 1.142 + - Add missing "opt.lg_tcache_max" mallctl implementation. 1.143 + - Use glibc allocator hooks to make mixed allocator usage less likely. 1.144 + - Fix build issues for --disable-tcache. 1.145 + - Don't mangle pthread_create() when --with-private-namespace is specified. 1.146 + 1.147 +* 2.2.5 (November 14, 2011) 1.148 + 1.149 + Bug fixes: 1.150 + - Fix huge_ralloc() race when using mremap(2). This is a serious bug that 1.151 + could cause memory corruption and/or crashes. 1.152 + - Fix huge_ralloc() to maintain chunk statistics. 1.153 + - Fix malloc_stats_print(..., "a") output. 1.154 + 1.155 +* 2.2.4 (November 5, 2011) 1.156 + 1.157 + Bug fixes: 1.158 + - Initialize arenas_tsd before using it. This bug existed for 2.2.[0-3], as 1.159 + well as for --disable-tls builds in earlier releases. 1.160 + - Do not assume a 4 KiB page size in test/rallocm.c. 1.161 + 1.162 +* 2.2.3 (August 31, 2011) 1.163 + 1.164 + This version fixes numerous bugs related to heap profiling. 1.165 + 1.166 + Bug fixes: 1.167 + - Fix a prof-related race condition. This bug could cause memory corruption, 1.168 + but only occurred in non-default configurations (prof_accum:false). 1.169 + - Fix off-by-one backtracing issues (make sure that prof_alloc_prep() is 1.170 + excluded from backtraces). 1.171 + - Fix a prof-related bug in realloc() (only triggered by OOM errors). 1.172 + - Fix prof-related bugs in allocm() and rallocm(). 1.173 + - Fix prof_tdata_cleanup() for --disable-tls builds. 1.174 + - Fix a relative include path, to fix objdir builds. 1.175 + 1.176 +* 2.2.2 (July 30, 2011) 1.177 + 1.178 + Bug fixes: 1.179 + - Fix a build error for --disable-tcache. 1.180 + - Fix assertions in arena_purge() (for real this time). 1.181 + - Add the --with-private-namespace option. This is a workaround for symbol 1.182 + conflicts that can inadvertently arise when using static libraries. 1.183 + 1.184 +* 2.2.1 (March 30, 2011) 1.185 + 1.186 + Bug fixes: 1.187 + - Implement atomic operations for x86/x64. This fixes compilation failures 1.188 + for versions of gcc that are still in wide use. 1.189 + - Fix an assertion in arena_purge(). 1.190 + 1.191 +* 2.2.0 (March 22, 2011) 1.192 + 1.193 + This version incorporates several improvements to algorithms and data 1.194 + structures that tend to reduce fragmentation and increase speed. 1.195 + 1.196 + New features: 1.197 + - Add the "stats.cactive" mallctl. 1.198 + - Update pprof (from google-perftools 1.7). 1.199 + - Improve backtracing-related configuration logic, and add the 1.200 + --disable-prof-libgcc option. 1.201 + 1.202 + Bug fixes: 1.203 + - Change default symbol visibility from "internal", to "hidden", which 1.204 + decreases the overhead of library-internal function calls. 1.205 + - Fix symbol visibility so that it is also set on OS X. 1.206 + - Fix a build dependency regression caused by the introduction of the .pic.o 1.207 + suffix for PIC object files. 1.208 + - Add missing checks for mutex initialization failures. 1.209 + - Don't use libgcc-based backtracing except on x64, where it is known to work. 1.210 + - Fix deadlocks on OS X that were due to memory allocation in 1.211 + pthread_mutex_lock(). 1.212 + - Heap profiling-specific fixes: 1.213 + + Fix memory corruption due to integer overflow in small region index 1.214 + computation, when using a small enough sample interval that profiling 1.215 + context pointers are stored in small run headers. 1.216 + + Fix a bootstrap ordering bug that only occurred with TLS disabled. 1.217 + + Fix a rallocm() rsize bug. 1.218 + + Fix error detection bugs for aligned memory allocation. 1.219 + 1.220 +* 2.1.3 (March 14, 2011) 1.221 + 1.222 + Bug fixes: 1.223 + - Fix a cpp logic regression (due to the "thread.{de,}allocatedp" mallctl fix 1.224 + for OS X in 2.1.2). 1.225 + - Fix a "thread.arena" mallctl bug. 1.226 + - Fix a thread cache stats merging bug. 1.227 + 1.228 +* 2.1.2 (March 2, 2011) 1.229 + 1.230 + Bug fixes: 1.231 + - Fix "thread.{de,}allocatedp" mallctl for OS X. 1.232 + - Add missing jemalloc.a to build system. 1.233 + 1.234 +* 2.1.1 (January 31, 2011) 1.235 + 1.236 + Bug fixes: 1.237 + - Fix aligned huge reallocation (affected allocm()). 1.238 + - Fix the ALLOCM_LG_ALIGN macro definition. 1.239 + - Fix a heap dumping deadlock. 1.240 + - Fix a "thread.arena" mallctl bug. 1.241 + 1.242 +* 2.1.0 (December 3, 2010) 1.243 + 1.244 + This version incorporates some optimizations that can't quite be considered 1.245 + bug fixes. 1.246 + 1.247 + New features: 1.248 + - Use Linux's mremap(2) for huge object reallocation when possible. 1.249 + - Avoid locking in mallctl*() when possible. 1.250 + - Add the "thread.[de]allocatedp" mallctl's. 1.251 + - Convert the manual page source from roff to DocBook, and generate both roff 1.252 + and HTML manuals. 1.253 + 1.254 + Bug fixes: 1.255 + - Fix a crash due to incorrect bootstrap ordering. This only impacted 1.256 + --enable-debug --enable-dss configurations. 1.257 + - Fix a minor statistics bug for mallctl("swap.avail", ...). 1.258 + 1.259 +* 2.0.1 (October 29, 2010) 1.260 + 1.261 + Bug fixes: 1.262 + - Fix a race condition in heap profiling that could cause undefined behavior 1.263 + if "opt.prof_accum" were disabled. 1.264 + - Add missing mutex unlocks for some OOM error paths in the heap profiling 1.265 + code. 1.266 + - Fix a compilation error for non-C99 builds. 1.267 + 1.268 +* 2.0.0 (October 24, 2010) 1.269 + 1.270 + This version focuses on the experimental *allocm() API, and on improved 1.271 + run-time configuration/introspection. Nonetheless, numerous performance 1.272 + improvements are also included. 1.273 + 1.274 + New features: 1.275 + - Implement the experimental {,r,s,d}allocm() API, which provides a superset 1.276 + of the functionality available via malloc(), calloc(), posix_memalign(), 1.277 + realloc(), malloc_usable_size(), and free(). These functions can be used to 1.278 + allocate/reallocate aligned zeroed memory, ask for optional extra memory 1.279 + during reallocation, prevent object movement during reallocation, etc. 1.280 + - Replace JEMALLOC_OPTIONS/JEMALLOC_PROF_PREFIX with MALLOC_CONF, which is 1.281 + more human-readable, and more flexible. For example: 1.282 + JEMALLOC_OPTIONS=AJP 1.283 + is now: 1.284 + MALLOC_CONF=abort:true,fill:true,stats_print:true 1.285 + - Port to Apple OS X. Sponsored by Mozilla. 1.286 + - Make it possible for the application to control thread-->arena mappings via 1.287 + the "thread.arena" mallctl. 1.288 + - Add compile-time support for all TLS-related functionality via pthreads TSD. 1.289 + This is mainly of interest for OS X, which does not support TLS, but has a 1.290 + TSD implementation with similar performance. 1.291 + - Override memalign() and valloc() if they are provided by the system. 1.292 + - Add the "arenas.purge" mallctl, which can be used to synchronously purge all 1.293 + dirty unused pages. 1.294 + - Make cumulative heap profiling data optional, so that it is possible to 1.295 + limit the amount of memory consumed by heap profiling data structures. 1.296 + - Add per thread allocation counters that can be accessed via the 1.297 + "thread.allocated" and "thread.deallocated" mallctls. 1.298 + 1.299 + Incompatible changes: 1.300 + - Remove JEMALLOC_OPTIONS and malloc_options (see MALLOC_CONF above). 1.301 + - Increase default backtrace depth from 4 to 128 for heap profiling. 1.302 + - Disable interval-based profile dumps by default. 1.303 + 1.304 + Bug fixes: 1.305 + - Remove bad assertions in fork handler functions. These assertions could 1.306 + cause aborts for some combinations of configure settings. 1.307 + - Fix strerror_r() usage to deal with non-standard semantics in GNU libc. 1.308 + - Fix leak context reporting. This bug tended to cause the number of contexts 1.309 + to be underreported (though the reported number of objects and bytes were 1.310 + correct). 1.311 + - Fix a realloc() bug for large in-place growing reallocation. This bug could 1.312 + cause memory corruption, but it was hard to trigger. 1.313 + - Fix an allocation bug for small allocations that could be triggered if 1.314 + multiple threads raced to create a new run of backing pages. 1.315 + - Enhance the heap profiler to trigger samples based on usable size, rather 1.316 + than request size. 1.317 + - Fix a heap profiling bug due to sometimes losing track of requested object 1.318 + size for sampled objects. 1.319 + 1.320 +* 1.0.3 (August 12, 2010) 1.321 + 1.322 + Bug fixes: 1.323 + - Fix the libunwind-based implementation of stack backtracing (used for heap 1.324 + profiling). This bug could cause zero-length backtraces to be reported. 1.325 + - Add a missing mutex unlock in library initialization code. If multiple 1.326 + threads raced to initialize malloc, some of them could end up permanently 1.327 + blocked. 1.328 + 1.329 +* 1.0.2 (May 11, 2010) 1.330 + 1.331 + Bug fixes: 1.332 + - Fix junk filling of large objects, which could cause memory corruption. 1.333 + - Add MAP_NORESERVE support for chunk mapping, because otherwise virtual 1.334 + memory limits could cause swap file configuration to fail. Contributed by 1.335 + Jordan DeLong. 1.336 + 1.337 +* 1.0.1 (April 14, 2010) 1.338 + 1.339 + Bug fixes: 1.340 + - Fix compilation when --enable-fill is specified. 1.341 + - Fix threads-related profiling bugs that affected accuracy and caused memory 1.342 + to be leaked during thread exit. 1.343 + - Fix dirty page purging race conditions that could cause crashes. 1.344 + - Fix crash in tcache flushing code during thread destruction. 1.345 + 1.346 +* 1.0.0 (April 11, 2010) 1.347 + 1.348 + This release focuses on speed and run-time introspection. Numerous 1.349 + algorithmic improvements make this release substantially faster than its 1.350 + predecessors. 1.351 + 1.352 + New features: 1.353 + - Implement autoconf-based configuration system. 1.354 + - Add mallctl*(), for the purposes of introspection and run-time 1.355 + configuration. 1.356 + - Make it possible for the application to manually flush a thread's cache, via 1.357 + the "tcache.flush" mallctl. 1.358 + - Base maximum dirty page count on proportion of active memory. 1.359 + - Compute various addtional run-time statistics, including per size class 1.360 + statistics for large objects. 1.361 + - Expose malloc_stats_print(), which can be called repeatedly by the 1.362 + application. 1.363 + - Simplify the malloc_message() signature to only take one string argument, 1.364 + and incorporate an opaque data pointer argument for use by the application 1.365 + in combination with malloc_stats_print(). 1.366 + - Add support for allocation backed by one or more swap files, and allow the 1.367 + application to disable over-commit if swap files are in use. 1.368 + - Implement allocation profiling and leak checking. 1.369 + 1.370 + Removed features: 1.371 + - Remove the dynamic arena rebalancing code, since thread-specific caching 1.372 + reduces its utility. 1.373 + 1.374 + Bug fixes: 1.375 + - Modify chunk allocation to work when address space layout randomization 1.376 + (ASLR) is in use. 1.377 + - Fix thread cleanup bugs related to TLS destruction. 1.378 + - Handle 0-size allocation requests in posix_memalign(). 1.379 + - Fix a chunk leak. The leaked chunks were never touched, so this impacted 1.380 + virtual memory usage, but not physical memory usage. 1.381 + 1.382 +* linux_2008082[78]a (August 27/28, 2008) 1.383 + 1.384 + These snapshot releases are the simple result of incorporating Linux-specific 1.385 + support into the FreeBSD malloc sources. 1.386 + 1.387 +-------------------------------------------------------------------------------- 1.388 +vim:filetype=text:textwidth=80