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