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