]>
Commit | Line | Data |
---|---|---|
a78e148b | 1 | Following are change highlights associated with official releases. Important |
2 | bug fixes are all mentioned, but internal enhancements are omitted here for | |
3 | brevity (even though they are more fun to write about). Much more detail can be | |
4 | found in the git revision history: | |
5 | ||
6 | http://www.canonware.com/cgi-bin/gitweb.cgi?p=jemalloc.git | |
7 | git://canonware.com/jemalloc.git | |
8 | ||
21b26915 | 9 | * 3.2.0 (November 9, 2012) |
10 | ||
11 | In addition to a couple of bug fixes, this version modifies page run | |
12 | allocation and dirty page purging algorithms in order to better control | |
13 | page-level virtual memory fragmentation. | |
14 | ||
15 | Incompatible changes: | |
16 | - Change the "opt.lg_dirty_mult" default from 5 to 3 (32:1 to 8:1). | |
17 | ||
18 | Bug fixes: | |
19 | - Fix dss/mmap allocation precedence code to use recyclable mmap memory only | |
20 | after primary dss allocation fails. | |
21 | - Fix deadlock in the "arenas.purge" mallctl. This regression was introduced | |
22 | in 3.1.0 by the addition of the "arena.<i>.purge" mallctl. | |
23 | ||
24 | * 3.1.0 (October 16, 2012) | |
25 | ||
26 | New features: | |
27 | - Auto-detect whether running inside Valgrind, thus removing the need to | |
28 | manually specify MALLOC_CONF=valgrind:true. | |
29 | - Add the "arenas.extend" mallctl, which allows applications to create | |
30 | manually managed arenas. | |
31 | - Add the ALLOCM_ARENA() flag for {,r,d}allocm(). | |
32 | - Add the "opt.dss", "arena.<i>.dss", and "stats.arenas.<i>.dss" mallctls, | |
33 | which provide control over dss/mmap precedence. | |
34 | - Add the "arena.<i>.purge" mallctl, which obsoletes "arenas.purge". | |
35 | - Define LG_QUANTUM for hppa. | |
36 | ||
37 | Incompatible changes: | |
38 | - Disable tcache by default if running inside Valgrind, in order to avoid | |
39 | making unallocated objects appear reachable to Valgrind. | |
40 | - Drop const from malloc_usable_size() argument on Linux. | |
41 | ||
42 | Bug fixes: | |
43 | - Fix heap profiling crash if sampled object is freed via realloc(p, 0). | |
44 | - Remove const from __*_hook variable declarations, so that glibc can modify | |
45 | them during process forking. | |
46 | - Fix mlockall(2)/madvise(2) interaction. | |
47 | - Fix fork(2)-related deadlocks. | |
48 | - Fix error return value for "thread.tcache.enabled" mallctl. | |
49 | ||
4934f93d | 50 | * 3.0.0 (May 11, 2012) |
51 | ||
52 | Although this version adds some major new features, the primary focus is on | |
53 | internal code cleanup that facilitates maintainability and portability, most | |
54 | of which is not reflected in the ChangeLog. This is the first release to | |
55 | incorporate substantial contributions from numerous other developers, and the | |
56 | result is a more broadly useful allocator (see the git revision history for | |
57 | contribution details). Note that the license has been unified, thanks to | |
58 | Facebook granting a license under the same terms as the other copyright | |
59 | holders (see COPYING). | |
60 | ||
61 | New features: | |
62 | - Implement Valgrind support, redzones, and quarantine. | |
63 | - Add support for additional platforms: | |
64 | + FreeBSD | |
65 | + Mac OS X Lion | |
66 | + MinGW | |
67 | + Windows (no support yet for replacing the system malloc) | |
68 | - Add support for additional architectures: | |
69 | + MIPS | |
70 | + SH4 | |
71 | + Tilera | |
72 | - Add support for cross compiling. | |
73 | - Add nallocm(), which rounds a request size up to the nearest size class | |
74 | without actually allocating. | |
75 | - Implement aligned_alloc() (blame C11). | |
76 | - Add the "thread.tcache.enabled" mallctl. | |
77 | - Add the "opt.prof_final" mallctl. | |
78 | - Update pprof (from gperftools 2.0). | |
79 | - Add the --with-mangling option. | |
80 | - Add the --disable-experimental option. | |
81 | - Add the --disable-munmap option, and make it the default on Linux. | |
82 | - Add the --enable-mremap option, which disables use of mremap(2) by default. | |
83 | ||
84 | Incompatible changes: | |
85 | - Enable stats by default. | |
86 | - Enable fill by default. | |
87 | - Disable lazy locking by default. | |
88 | - Rename the "tcache.flush" mallctl to "thread.tcache.flush". | |
89 | - Rename the "arenas.pagesize" mallctl to "arenas.page". | |
90 | - Change the "opt.lg_prof_sample" default from 0 to 19 (1 B to 512 KiB). | |
91 | - Change the "opt.prof_accum" default from true to false. | |
92 | ||
93 | Removed features: | |
94 | - Remove the swap feature, including the "config.swap", "swap.avail", | |
95 | "swap.prezeroed", "swap.nfds", and "swap.fds" mallctls. | |
96 | - Remove highruns statistics, including the | |
97 | "stats.arenas.<i>.bins.<j>.highruns" and | |
98 | "stats.arenas.<i>.lruns.<j>.highruns" mallctls. | |
99 | - As part of small size class refactoring, remove the "opt.lg_[qc]space_max", | |
100 | "arenas.cacheline", "arenas.subpage", "arenas.[tqcs]space_{min,max}", and | |
101 | "arenas.[tqcs]bins" mallctls. | |
102 | - Remove the "arenas.chunksize" mallctl. | |
103 | - Remove the "opt.lg_prof_tcmax" option. | |
104 | - Remove the "opt.lg_prof_bt_max" option. | |
105 | - Remove the "opt.lg_tcache_gc_sweep" option. | |
106 | - Remove the --disable-tiny option, including the "config.tiny" mallctl. | |
107 | - Remove the --enable-dynamic-page-shift configure option. | |
108 | - Remove the --enable-sysv configure option. | |
109 | ||
110 | Bug fixes: | |
111 | - Fix a statistics-related bug in the "thread.arena" mallctl that could cause | |
112 | invalid statistics and crashes. | |
113 | - Work around TLS deallocation via free() on Linux. This bug could cause | |
114 | write-after-free memory corruption. | |
115 | - Fix a potential deadlock that could occur during interval- and | |
116 | growth-triggered heap profile dumps. | |
117 | - Fix large calloc() zeroing bugs due to dropping chunk map unzeroed flags. | |
118 | - Fix chunk_alloc_dss() to stop claiming memory is zeroed. This bug could | |
119 | cause memory corruption and crashes with --enable-dss specified. | |
120 | - Fix fork-related bugs that could cause deadlock in children between fork | |
121 | and exec. | |
122 | - Fix malloc_stats_print() to honor 'b' and 'l' in the opts parameter. | |
123 | - Fix realloc(p, 0) to act like free(p). | |
124 | - Do not enforce minimum alignment in memalign(). | |
125 | - Check for NULL pointer in malloc_usable_size(). | |
126 | - Fix an off-by-one heap profile statistics bug that could be observed in | |
127 | interval- and growth-triggered heap profiles. | |
128 | - Fix the "epoch" mallctl to update cached stats even if the passed in epoch | |
129 | is 0. | |
130 | - Fix bin->runcur management to fix a layout policy bug. This bug did not | |
131 | affect correctness. | |
132 | - Fix a bug in choose_arena_hard() that potentially caused more arenas to be | |
133 | initialized than necessary. | |
134 | - Add missing "opt.lg_tcache_max" mallctl implementation. | |
135 | - Use glibc allocator hooks to make mixed allocator usage less likely. | |
136 | - Fix build issues for --disable-tcache. | |
137 | - Don't mangle pthread_create() when --with-private-namespace is specified. | |
138 | ||
1d03c1c9 | 139 | * 2.2.5 (November 14, 2011) |
140 | ||
141 | Bug fixes: | |
142 | - Fix huge_ralloc() race when using mremap(2). This is a serious bug that | |
143 | could cause memory corruption and/or crashes. | |
144 | - Fix huge_ralloc() to maintain chunk statistics. | |
145 | - Fix malloc_stats_print(..., "a") output. | |
146 | ||
147 | * 2.2.4 (November 5, 2011) | |
148 | ||
149 | Bug fixes: | |
150 | - Initialize arenas_tsd before using it. This bug existed for 2.2.[0-3], as | |
151 | well as for --disable-tls builds in earlier releases. | |
152 | - Do not assume a 4 KiB page size in test/rallocm.c. | |
153 | ||
154 | * 2.2.3 (August 31, 2011) | |
155 | ||
156 | This version fixes numerous bugs related to heap profiling. | |
157 | ||
158 | Bug fixes: | |
159 | - Fix a prof-related race condition. This bug could cause memory corruption, | |
160 | but only occurred in non-default configurations (prof_accum:false). | |
161 | - Fix off-by-one backtracing issues (make sure that prof_alloc_prep() is | |
162 | excluded from backtraces). | |
163 | - Fix a prof-related bug in realloc() (only triggered by OOM errors). | |
164 | - Fix prof-related bugs in allocm() and rallocm(). | |
165 | - Fix prof_tdata_cleanup() for --disable-tls builds. | |
166 | - Fix a relative include path, to fix objdir builds. | |
167 | ||
168 | * 2.2.2 (July 30, 2011) | |
169 | ||
170 | Bug fixes: | |
171 | - Fix a build error for --disable-tcache. | |
172 | - Fix assertions in arena_purge() (for real this time). | |
173 | - Add the --with-private-namespace option. This is a workaround for symbol | |
174 | conflicts that can inadvertently arise when using static libraries. | |
175 | ||
a78e148b | 176 | * 2.2.1 (March 30, 2011) |
177 | ||
178 | Bug fixes: | |
179 | - Implement atomic operations for x86/x64. This fixes compilation failures | |
180 | for versions of gcc that are still in wide use. | |
181 | - Fix an assertion in arena_purge(). | |
182 | ||
183 | * 2.2.0 (March 22, 2011) | |
184 | ||
185 | This version incorporates several improvements to algorithms and data | |
186 | structures that tend to reduce fragmentation and increase speed. | |
187 | ||
188 | New features: | |
189 | - Add the "stats.cactive" mallctl. | |
190 | - Update pprof (from google-perftools 1.7). | |
191 | - Improve backtracing-related configuration logic, and add the | |
192 | --disable-prof-libgcc option. | |
193 | ||
194 | Bug fixes: | |
195 | - Change default symbol visibility from "internal", to "hidden", which | |
196 | decreases the overhead of library-internal function calls. | |
197 | - Fix symbol visibility so that it is also set on OS X. | |
198 | - Fix a build dependency regression caused by the introduction of the .pic.o | |
199 | suffix for PIC object files. | |
200 | - Add missing checks for mutex initialization failures. | |
201 | - Don't use libgcc-based backtracing except on x64, where it is known to work. | |
202 | - Fix deadlocks on OS X that were due to memory allocation in | |
203 | pthread_mutex_lock(). | |
204 | - Heap profiling-specific fixes: | |
205 | + Fix memory corruption due to integer overflow in small region index | |
206 | computation, when using a small enough sample interval that profiling | |
207 | context pointers are stored in small run headers. | |
208 | + Fix a bootstrap ordering bug that only occurred with TLS disabled. | |
209 | + Fix a rallocm() rsize bug. | |
210 | + Fix error detection bugs for aligned memory allocation. | |
211 | ||
212 | * 2.1.3 (March 14, 2011) | |
213 | ||
214 | Bug fixes: | |
215 | - Fix a cpp logic regression (due to the "thread.{de,}allocatedp" mallctl fix | |
216 | for OS X in 2.1.2). | |
217 | - Fix a "thread.arena" mallctl bug. | |
218 | - Fix a thread cache stats merging bug. | |
219 | ||
220 | * 2.1.2 (March 2, 2011) | |
221 | ||
222 | Bug fixes: | |
223 | - Fix "thread.{de,}allocatedp" mallctl for OS X. | |
224 | - Add missing jemalloc.a to build system. | |
225 | ||
226 | * 2.1.1 (January 31, 2011) | |
227 | ||
228 | Bug fixes: | |
229 | - Fix aligned huge reallocation (affected allocm()). | |
230 | - Fix the ALLOCM_LG_ALIGN macro definition. | |
231 | - Fix a heap dumping deadlock. | |
232 | - Fix a "thread.arena" mallctl bug. | |
233 | ||
234 | * 2.1.0 (December 3, 2010) | |
235 | ||
236 | This version incorporates some optimizations that can't quite be considered | |
237 | bug fixes. | |
238 | ||
239 | New features: | |
240 | - Use Linux's mremap(2) for huge object reallocation when possible. | |
241 | - Avoid locking in mallctl*() when possible. | |
242 | - Add the "thread.[de]allocatedp" mallctl's. | |
243 | - Convert the manual page source from roff to DocBook, and generate both roff | |
244 | and HTML manuals. | |
245 | ||
246 | Bug fixes: | |
247 | - Fix a crash due to incorrect bootstrap ordering. This only impacted | |
248 | --enable-debug --enable-dss configurations. | |
249 | - Fix a minor statistics bug for mallctl("swap.avail", ...). | |
250 | ||
251 | * 2.0.1 (October 29, 2010) | |
252 | ||
253 | Bug fixes: | |
254 | - Fix a race condition in heap profiling that could cause undefined behavior | |
255 | if "opt.prof_accum" were disabled. | |
256 | - Add missing mutex unlocks for some OOM error paths in the heap profiling | |
257 | code. | |
258 | - Fix a compilation error for non-C99 builds. | |
259 | ||
260 | * 2.0.0 (October 24, 2010) | |
261 | ||
262 | This version focuses on the experimental *allocm() API, and on improved | |
263 | run-time configuration/introspection. Nonetheless, numerous performance | |
264 | improvements are also included. | |
265 | ||
266 | New features: | |
267 | - Implement the experimental {,r,s,d}allocm() API, which provides a superset | |
268 | of the functionality available via malloc(), calloc(), posix_memalign(), | |
269 | realloc(), malloc_usable_size(), and free(). These functions can be used to | |
270 | allocate/reallocate aligned zeroed memory, ask for optional extra memory | |
271 | during reallocation, prevent object movement during reallocation, etc. | |
272 | - Replace JEMALLOC_OPTIONS/JEMALLOC_PROF_PREFIX with MALLOC_CONF, which is | |
273 | more human-readable, and more flexible. For example: | |
274 | JEMALLOC_OPTIONS=AJP | |
275 | is now: | |
276 | MALLOC_CONF=abort:true,fill:true,stats_print:true | |
277 | - Port to Apple OS X. Sponsored by Mozilla. | |
278 | - Make it possible for the application to control thread-->arena mappings via | |
279 | the "thread.arena" mallctl. | |
280 | - Add compile-time support for all TLS-related functionality via pthreads TSD. | |
281 | This is mainly of interest for OS X, which does not support TLS, but has a | |
282 | TSD implementation with similar performance. | |
283 | - Override memalign() and valloc() if they are provided by the system. | |
284 | - Add the "arenas.purge" mallctl, which can be used to synchronously purge all | |
285 | dirty unused pages. | |
286 | - Make cumulative heap profiling data optional, so that it is possible to | |
287 | limit the amount of memory consumed by heap profiling data structures. | |
288 | - Add per thread allocation counters that can be accessed via the | |
289 | "thread.allocated" and "thread.deallocated" mallctls. | |
290 | ||
291 | Incompatible changes: | |
292 | - Remove JEMALLOC_OPTIONS and malloc_options (see MALLOC_CONF above). | |
293 | - Increase default backtrace depth from 4 to 128 for heap profiling. | |
294 | - Disable interval-based profile dumps by default. | |
295 | ||
296 | Bug fixes: | |
297 | - Remove bad assertions in fork handler functions. These assertions could | |
298 | cause aborts for some combinations of configure settings. | |
299 | - Fix strerror_r() usage to deal with non-standard semantics in GNU libc. | |
300 | - Fix leak context reporting. This bug tended to cause the number of contexts | |
301 | to be underreported (though the reported number of objects and bytes were | |
302 | correct). | |
303 | - Fix a realloc() bug for large in-place growing reallocation. This bug could | |
304 | cause memory corruption, but it was hard to trigger. | |
305 | - Fix an allocation bug for small allocations that could be triggered if | |
306 | multiple threads raced to create a new run of backing pages. | |
307 | - Enhance the heap profiler to trigger samples based on usable size, rather | |
308 | than request size. | |
309 | - Fix a heap profiling bug due to sometimes losing track of requested object | |
310 | size for sampled objects. | |
311 | ||
312 | * 1.0.3 (August 12, 2010) | |
313 | ||
314 | Bug fixes: | |
315 | - Fix the libunwind-based implementation of stack backtracing (used for heap | |
316 | profiling). This bug could cause zero-length backtraces to be reported. | |
317 | - Add a missing mutex unlock in library initialization code. If multiple | |
318 | threads raced to initialize malloc, some of them could end up permanently | |
319 | blocked. | |
320 | ||
321 | * 1.0.2 (May 11, 2010) | |
322 | ||
323 | Bug fixes: | |
324 | - Fix junk filling of large objects, which could cause memory corruption. | |
325 | - Add MAP_NORESERVE support for chunk mapping, because otherwise virtual | |
326 | memory limits could cause swap file configuration to fail. Contributed by | |
327 | Jordan DeLong. | |
328 | ||
329 | * 1.0.1 (April 14, 2010) | |
330 | ||
331 | Bug fixes: | |
332 | - Fix compilation when --enable-fill is specified. | |
333 | - Fix threads-related profiling bugs that affected accuracy and caused memory | |
334 | to be leaked during thread exit. | |
335 | - Fix dirty page purging race conditions that could cause crashes. | |
336 | - Fix crash in tcache flushing code during thread destruction. | |
337 | ||
338 | * 1.0.0 (April 11, 2010) | |
339 | ||
340 | This release focuses on speed and run-time introspection. Numerous | |
341 | algorithmic improvements make this release substantially faster than its | |
342 | predecessors. | |
343 | ||
344 | New features: | |
345 | - Implement autoconf-based configuration system. | |
346 | - Add mallctl*(), for the purposes of introspection and run-time | |
347 | configuration. | |
348 | - Make it possible for the application to manually flush a thread's cache, via | |
349 | the "tcache.flush" mallctl. | |
350 | - Base maximum dirty page count on proportion of active memory. | |
351 | - Compute various addtional run-time statistics, including per size class | |
352 | statistics for large objects. | |
353 | - Expose malloc_stats_print(), which can be called repeatedly by the | |
354 | application. | |
355 | - Simplify the malloc_message() signature to only take one string argument, | |
356 | and incorporate an opaque data pointer argument for use by the application | |
357 | in combination with malloc_stats_print(). | |
358 | - Add support for allocation backed by one or more swap files, and allow the | |
359 | application to disable over-commit if swap files are in use. | |
360 | - Implement allocation profiling and leak checking. | |
361 | ||
362 | Removed features: | |
363 | - Remove the dynamic arena rebalancing code, since thread-specific caching | |
364 | reduces its utility. | |
365 | ||
366 | Bug fixes: | |
367 | - Modify chunk allocation to work when address space layout randomization | |
368 | (ASLR) is in use. | |
369 | - Fix thread cleanup bugs related to TLS destruction. | |
370 | - Handle 0-size allocation requests in posix_memalign(). | |
371 | - Fix a chunk leak. The leaked chunks were never touched, so this impacted | |
372 | virtual memory usage, but not physical memory usage. | |
373 | ||
374 | * linux_2008082[78]a (August 27/28, 2008) | |
375 | ||
376 | These snapshot releases are the simple result of incorporating Linux-specific | |
377 | support into the FreeBSD malloc sources. | |
378 | ||
379 | -------------------------------------------------------------------------------- | |
380 | vim:filetype=text:textwidth=80 |