blob: d5263e2e0dfe1cdafb28dc1187d8cf12b8ce1e88 [file] [log] [blame]
Austin Schuh745610d2015-09-06 18:19:50 -07001== 10 Jan 2015 ==
2
3gperftools 2.4 is out! The code is exactly same as 2.4rc.
4
5== 28 Dec 2014 ==
6
7gperftools 2.4rc is out!
8
9Here are changes since 2.3:
10
11* enabled aggressive decommit option by default. It was found to
12 significantly improve memory fragmentation with negligible impact on
13 performance. (Thanks to investigation work performed by Adhemerval
14 Zanella)
15
16* added ./configure flags for tcmalloc pagesize and tcmalloc
17 allocation alignment. Larger page sizes have been reported to
18 improve performance occasionally. (Patch by Raphael Moreira Zinsly)
19
20* sped-up hot-path of malloc/free. By about 5% on static library and
21 about 10% on shared library. Mainly due to more efficient checking
22 of malloc hooks.
23
24* improved stacktrace capturing in cpu profiler (due to issue found by
25 Arun Sharma). As part of that issue pprof's handling of cpu profiles
26 was also improved.
27
28== 7 Dec 2014 ==
29
30gperftools 2.3 is out!
31
32Here are changes since 2.3rc:
33
34* (issue 658) correctly close socketpair fds on failure (patch by glider)
35
36* libunwind integration can be disabled at configure time (patch by
37 Raphael Moreira Zinsly)
38
39* libunwind integration is disabled by default for ppc64 (patch by
40 Raphael Moreira Zinsly)
41
42* libunwind integration is force-disabled for OSX. It was not used by
43 default anyways. Fixes compilation issue I saw.
44
45== 2 Nov 2014 ==
46
47gperftools 2.3rc is out!
48
49Most small improvements in this release were made to pprof tool.
50
51New experimental Linux-only (for now) cpu profiling mode is a notable
52big improvement.
53
54Here are notable changes since 2.2.1:
55
56* (issue-631) fixed debugallocation miscompilation on mmap-less
57 platforms (courtesy of user iamxujian)
58
59* (issue-630) reference to wrong PROFILE (vs. correct CPUPROFILE)
60 environment variable was fixed (courtesy of WenSheng He)
61
62* pprof now has option to display stack traces in output for heap
63 checker (courtesy of Michael Pasieka)
64
65* (issue-636) pprof web command now works on mingw
66
67* (issue-635) pprof now handles library paths that contain spaces
68 (courtesy of user mich...@sebesbefut.com)
69
70* (issue-637) pprof now has an option to not strip template arguments
71 (patch by jiakai)
72
73* (issue-644) possible out-of-bounds access in GetenvBeforeMain was
74 fixed (thanks to user abyss.7)
75
76* (issue-641) pprof now has an option --show_addresses (thanks to user
77 yurivict). New option prints instruction address in addition to
78 function name in stack traces
79
80* (issue-646) pprof now works around some issues of addr2line
81 reportedly when DWARF v4 format is used (patch by Adam McNeeney)
82
83* (issue-645) heap profiler exit message now includes remaining memory
84 allocated info (patch by user yurivict)
85
86* pprof code that finds location of /proc/<pid>/maps in cpu profile
87 files is now fixed (patch by Ricardo M. Correia)
88
89* (issue-654) pprof now handles "split text segments" feature of
90 Chromium for Android. (patch by simonb)
91
92* (issue-655) potential deadlock on windows caused by early call to
93 getenv in malloc initialization code was fixed (bug reported and fix
94 proposed by user zndmitry)
95
96* incorrect detection of arm 6zk instruction set support
97 (-mcpu=arm1176jzf-s) was fixed. (Reported by pedronavf on old
98 issue-493)
99
100* new cpu profiling mode on Linux is now implemented. It sets up
101 separate profiling timers for separate threads. Which improves
102 accuracy of profiling on Linux a lot. It is off by default. And is
103 enabled if both librt.f is loaded and CPUPROFILE_PER_THREAD_TIMERS
104 environment variable is set. But note that all threads need to be
105 registered via ProfilerRegisterThread.
106
107== 21 Jun 2014 ==
108
109gperftools 2.2.1 is out!
110
111Here's list of fixes:
112
113* issue-626 was closed. Which fixes initialization statically linked
114 tcmalloc.
115
116* issue 628 was closed. It adds missing header file into source
117 tarball. This fixes for compilation on PPC Linux.
118
119== 3 May 2014 ==
120
121gperftools 2.2 is out!
122
123Here are notable changes since 2.2rc:
124
125* issue 620 (crash on windows when c runtime dll is reloaded) was
126 fixed
127
128== 19 Apr 2014 ==
129
130gperftools 2.2rc is out!
131
132Here are notable changes since 2.1:
133
134* a number of fixes for a number compilers and platforms. Notably
135 Visual Studio 2013, recent mingw with c++ threads and some OSX
136 fixes.
137
138* we now have mips and mips64 support! (courtesy of Jovan Zelincevic,
139 Jean Lee, user xiaoyur347 and others)
140
141* we now have aarch64 (aka arm64) support! (contributed by Riku
142 Voipio)
143
144* there's now support for ppc64-le (by Raphael Moreira Zinsly and
145 Adhemerval Zanella)
146
147* there's now some support of uclibc (contributed by user xiaoyur347)
148
149* google/ headers will now give you deprecation warning. They are
150 deprecated since 2.0
151
152* there's now new api: tc_malloc_skip_new_handler (ported from chromium
153 fork)
154
155* issue-557: added support for dumping heap profile via signal (by
156 Jean Lee)
157
158* issue-567: Petr Hosek contributed SysAllocator support for windows
159
160* Joonsoo Kim contributed several speedups for central freelist code
161
162* TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES environment variable now works
163
164* configure scripts are now using AM_MAINTAINER_MODE. It'll only
165 affect folks who modify source from .tar.gz and want automake to
166 automatically rebuild Makefile-s. See automake documentation for
167 that.
168
169* issue-586: detect main executable even if PIE is active (based on
170 patch by user themastermind1). Notably, it fixes profiler use with
171 ruby.
172
173* there is now support for switching backtrace capturing method at
174 runtime (via TCMALLOC_STACKTRACE_METHOD and
175 TCMALLOC_STACKTRACE_METHOD_VERBOSE environment variables)
176
177* there is new backtrace capturing method using -finstrument-functions
178 prologues contributed by user xiaoyur347
179
180* few cases of crashes/deadlocks in profiler were addressed. See
181 (famous) issue-66, issue-547 and issue-579.
182
183* issue-464 (memory corruption in debugalloc's realloc after
184 memallign) is now fixed
185
186* tcmalloc is now able to release memory back to OS on windows
187 (issue-489). The code was ported from chromium fork (by a number of
188 authors).
189
190* Together with issue-489 we ported chromium's "aggressive decommit"
191 mode. In this mode (settable via malloc extension and via
192 environment variable TCMALLOC_AGGRESSIVE_DECOMMIT), free pages are
193 returned back to OS immediately.
194
195* MallocExtension::instance() is now faster (based on patch by
196 Adhemerval Zanella)
197
198* issue-610 (hangs on windows in multibyte locales) is now fixed
199
200The following people helped with ideas or patches (based on git log,
201some contributions purely in bugtracker might be missing): Andrew
202C. Morrow, yurivict, Wang YanQing, Thomas Klausner,
203davide.italiano@10gen.com, Dai MIKURUBE, Joon-Sung Um, Jovan
204Zelincevic, Jean Lee, Petr Hosek, Ben Avison, drussel, Joonsoo Kim,
205Hannes Weisbach, xiaoyur347, Riku Voipio, Adhemerval Zanella, Raphael
206Moreira Zinsly
207
208== 30 July 2013 ==
209
210gperftools 2.1 is out!
211
212Just few fixes where merged after rc. Most notably:
213
214* Some fixes for debug allocation on POWER/Linux
215
216== 20 July 2013 ==
217
218gperftools 2.1rc is out!
219
220As a result of more than a year of contributions we're ready for 2.1
221release.
222
223But before making that step I'd like to create RC and make sure people
224have chance to test it.
225
226Here are notable changes since 2.0:
227
228* fixes for building on newer platforms. Notably, there's now initial
229 support for x32 ABI (--enable-minimal only at this time))
230
231* new getNumericProperty stats for cache sizes
232
233* added HEAP_PROFILER_TIME_INTERVAL variable (see documentation)
234
235* added environment variable to control heap size (TCMALLOC_HEAP_LIMIT_MB)
236
237* added environment variable to disable release of memory back to OS
238 (TCMALLOC_DISABLE_MEMORY_RELEASE)
239
240* cpu profiler can now be switched on and off by sending it a signal
241 (specified in CPUPROFILESIGNAL)
242
243* (issue 491) fixed race-ful spinlock wake-ups
244
245* (issue 496) added some support for fork-ing of process that is using
246 tcmalloc
247
248* (issue 368) improved memory fragmentation when large chunks of
249 memory are allocated/freed
250
251== 03 February 2012 ==
252
253I've just released gperftools 2.0
254
255The `google-perftools` project has been renamed to `gperftools`. I
256(csilvers) am stepping down as maintainer, to be replaced by
257David Chappelle. Welcome to the team, David! David has been an
258an active contributor to perftools in the past -- in fact, he's the
259only person other than me that already has commit status. I am
260pleased to have him take over as maintainer.
261
262I have both renamed the project (the Google Code site renamed a few
263weeks ago), and bumped the major version number up to 2, to reflect
264the new community ownership of the project. Almost all the
265[http://gperftools.googlecode.com/svn/tags/gperftools-2.0/ChangeLog changes]
266are related to the renaming.
267
268The main functional change from google-perftools 1.10 is that
269I've renamed the `google/` include-directory to be `gperftools/`
270instead. New code should `#include <gperftools/tcmalloc.h>`/etc.
271(Most users of perftools don't need any perftools-specific includes at
272all, so this is mostly directed to "power users.") I've kept the old
273names around as forwarding headers to the new, so `#include
274<google/tcmalloc.h>` will continue to work.
275
276(The other functional change which I snuck in is getting rid of some
277bash-isms in one of the unittest driver scripts, so it could run on
278Solaris.)
279
280Note that some internal names still contain the text `google`, such as
281the `google_malloc` internal linker section. I think that's a
282trickier transition, and can happen in a future release (if at all).
283
284
285=== 31 January 2012 ===
286
287I've just released perftools 1.10
288
289There is an API-incompatible change: several of the methods in the
290`MallocExtension` class have changed from taking a `void*` to taking a
291`const void*`. You should not be affected by this API change
292unless you've written your own custom malloc extension that derives
293from `MallocExtension`, but since it is a user-visible change, I have
294upped the `.so` version number for this release.
295
296This release focuses on improvements to linux-syscall-support.h,
297including ARM and PPC fixups and general cleanups. I hope this will
298magically fix an array of bugs people have been seeing.
299
300There is also exciting news on the porting front, with support for
301patching win64 assembly contributed by IBM Canada! This is an
302important step -- perhaps the most difficult -- to getting perftools
303to work on 64-bit windows using the patching technique (it doesn't
304affect the libc-modification technique). `premable_patcher_test` has
305been added to help test these changes; it is meant to compile under
306x86_64, and won't work under win32.
307
308For the full list of changes, including improved `HEAP_PROFILE_MMAP`
309support, see the
310[http://gperftools.googlecode.com/svn/tags/google-perftools-1.10/ChangeLog ChangeLog].
311
312
313=== 24 January 2011 ===
314
315The `google-perftools` Google Code page has been renamed to
316`gperftools`, in preparation for the project being renamed to
317`gperftools`. In the coming weeks, I'll be stepping down as
318maintainer for the perftools project, and as part of that Google is
319relinquishing ownership of the project; it will now be entirely
320community run. The name change reflects that shift. The 'g' in
321'gperftools' stands for 'great'. :-)
322
323=== 23 December 2011 ===
324
325I've just released perftools 1.9.1
326
327I missed including a file in the tarball, that is needed to compile on
328ARM. If you are not compiling on ARM, or have successfully compiled
329perftools 1.9, there is no need to upgrade.
330
331
332=== 22 December 2011 ===
333
334I've just released perftools 1.9
335
336This change has a slew of improvements, from better ARM and freebsd
337support, to improved performance by moving some code outside of locks,
338to better pprof reporting of code with overloaded functions.
339
340The full list of changes is in the
341[http://google-perftools.googlecode.com/svn/tags/google-perftools-1.9/ChangeLog ChangeLog].
342
343
344=== 26 August 2011 ===
345
346I've just released perftools 1.8.3
347
348The star-crossed 1.8 series continues; in 1.8.1, I had accidentally
349removed some code that was needed for FreeBSD. (Without this code
350many apps would crash at startup.) This release re-adds that code.
351If you are not on FreeBSD, or are using FreeBSD with perftools 1.8 or
352earlier, there is no need to upgrade.
353
354=== 11 August 2011 ===
355
356I've just released perftools 1.8.2
357
358I was incorrectly calculating the patch-level in the configuration
359step, meaning the TC_VERSION_PATCH #define in tcmalloc.h was wrong.
360Since the testing framework checks for this, it was failing. Now it
361should work again. This time, I was careful to re-run my tests after
362upping the version number. :-)
363
364If you don't care about the TC_VERSION_PATCH #define, there's no
365reason to upgrae.
366
367=== 26 July 2011 ===
368
369I've just released perftools 1.8.1
370
371I was missing an #include that caused the build to break under some
372compilers, especially newer gcc's, that wanted it. This only affects
373people who build from source, so only the .tar.gz file is updated from
374perftools 1.8. If you didn't have any problems compiling perftools
3751.8, there's no reason to upgrade.
376
377=== 15 July 2011 ===
378
379I've just released perftools 1.8
380
381Of the many changes in this release, a good number pertain to porting.
382I've revamped OS X support to use the malloc-zone framework; it should
383now Just Work to link in tcmalloc, without needing
384`DYLD_FORCE_FLAT_NAMESPACE` or the like. (This is a pretty major
385change, so please feel free to report feedback at
386google-perftools@googlegroups.com.) 64-bit Windows support is also
387improved, as is ARM support, and the hooks are in place to improve
388FreeBSD support as well.
389
390On the other hand, I'm seeing hanging tests on Cygwin. I see the same
391hanging even with (the old) perftools 1.7, so I'm guessing this is
392either a problem specific to my Cygwin installation, or nobody is
393trying to use perftools under Cygwin. If you can reproduce the
394problem, and even better have a solution, you can report it at
395google-perftools@googlegroups.com.
396
397Internal changes include several performance and space-saving tweaks.
398One is user-visible (but in "stealth mode", and otherwise
399undocumented): you can compile with `-DTCMALLOC_SMALL_BUT_SLOW`. In
400this mode, tcmalloc will use less memory overhead, at the cost of
401running (likely not noticeably) slower.
402
403There are many other changes as well, too numerous to recount here,
404but present in the
405[http://google-perftools.googlecode.com/svn/tags/google-perftools-1.8/ChangeLog ChangeLog].
406
407
408=== 7 February 2011 ===
409
410Thanks to endlessr..., who
411[http://code.google.com/p/google-perftools/issues/detail?id=307 identified]
412why some tests were failing under MSVC 10 in release mode. It does not look
413like these failures point toward any problem with tcmalloc itself; rather, the
414problem is with the test, which made some assumptions that broke under the
415some aggressive optimizations used in MSVC 10. I'll fix the test, but in
416the meantime, feel free to use perftools even when compiled under MSVC
41710.
418
419=== 4 February 2011 ===
420
421I've just released perftools 1.7
422
423I apologize for the delay since the last release; so many great new
424patches and bugfixes kept coming in (and are still coming in; I also
425apologize to those folks who have to slip until the next release). I
426picked this arbitrary time to make a cut.
427
428Among the many new features in this release is a multi-megabyte
429reduction in the amount of tcmalloc overhead uder x86_64, improved
430performance in the case of contention, and many many bugfixes,
431especially architecture-specific bugfixes. See the
432[http://google-perftools.googlecode.com/svn/tags/google-perftools-1.7/ChangeLog ChangeLog]
433for full details.
434
435One architecture-specific change of note is added comments in the
436[http://google-perftools.googlecode.com/svn/tags/perftools-1.7/README README]
437for using tcmalloc under OS X. I'm trying to get my head around the
438exact behavior of the OS X linker, and hope to have more improvements
439for the next release, but I hope these notes help folks who have been
440having trouble with tcmalloc on OS X.
441
442*Windows users*: I've heard reports that some unittests fail on
443Windows when compiled with MSVC 10 in Release mode. All tests pass in
444Debug mode. I've not heard of any problems with earlier versions of
445MSVC. I don't know if this is a problem with the runtime patching (so
446the static patching discussed in README_windows.txt will still work),
447a problem with perftools more generally, or a bug in MSVC 10. Anyone
448with windows expertise that can debug this, I'd be glad to hear from!
449
450
451=== 5 August 2010 ===
452
453I've just released perftools 1.6
454
455This version also has a large number of minor changes, including
456support for `malloc_usable_size()` as a glibc-compatible alias to
457`malloc_size()`, the addition of SVG-based output to `pprof`, and
458experimental support for tcmalloc large pages, which may speed up
459tcmalloc at the cost of greater memory use. To use tcmalloc large
460pages, see the
461[http://google-perftools.googlecode.com/svn/tags/perftools-1.6/INSTALL
462INSTALL file]; for all changes, see the
463[http://google-perftools.googlecode.com/svn/tags/perftools-1.6/ChangeLog
464ChangeLog].
465
466OS X NOTE: improvements in the profiler unittest have turned up an OS
467X issue: in multithreaded programs, it seems that OS X often delivers
468the profiling signal (from sigitimer()) to the main thread, even when
469it's sleeping, rather than spawned threads that are doing actual work.
470If anyone knows details of how OS X handles SIGPROF events (from
471setitimer) in threaded programs, and has insight into this problem,
472please send mail to google-perftools@googlegroups.com.
473
474To see if you're affected by this, look for profiling time that pprof
475attributes to `___semwait_signal`. This is work being done in other
476threads, that is being attributed to sleeping-time in the main thread.
477
478
479=== 20 January 2010 ===
480
481I've just released perftools 1.5
482
483This version has a slew of changes, leading to somewhat faster
484performance and improvements in portability. It adds features like
485`ITIMER_REAL` support to the cpu profiler, and `tc_set_new_mode` to
486mimic the windows function of the same name. Full details are in the
487[http://google-perftools.googlecode.com/svn/tags/perftools-1.5/ChangeLog
488ChangeLog].
489
490
491=== 11 September 2009 ===
492
493I've just released perftools 1.4
494
495The major change this release is the addition of a debugging malloc
496library! If you link with `libtcmalloc_debug.so` instead of
497`libtcmalloc.so` (and likewise for the `minimal` variants) you'll get
498a debugging malloc, which will catch double-frees, writes to freed
499data, `free`/`delete` and `delete`/`delete[]` mismatches, and even
500(optionally) writes past the end of an allocated block.
501
502We plan to do more with this library in the future, including
503supporting it on Windows, and adding the ability to use the debugging
504library with your default malloc in addition to using it with
505tcmalloc.
506
507There are also the usual complement of bug fixes, documented in the
508ChangeLog, and a few minor user-tunable knobs added to components like
509the system allocator.
510
511
512=== 9 June 2009 ===
513
514I've just released perftools 1.3
515
516Like 1.2, this has a variety of bug fixes, especially related to the
517Windows build. One of my bugfixes is to undo the weird `ld -r` fix to
518`.a` files that I introduced in perftools 1.2: it caused problems on
519too many platforms. I've reverted back to normal `.a` files. To work
520around the original problem that prompted the `ld -r` fix, I now
521provide `libtcmalloc_and_profiler.a`, for folks who want to link in
522both.
523
524The most interesting API change is that I now not only override
525`malloc`/`free`/etc, I also expose them via a unique set of symbols:
526`tc_malloc`/`tc_free`/etc. This enables clients to write their own
527memory wrappers that use tcmalloc:
528{{{
529 void* malloc(size_t size) { void* r = tc_malloc(size); Log(r); return r; }
530}}}
531
532
533=== 17 April 2009 ===
534
535I've just released perftools 1.2.
536
537This is mostly a bugfix release. The major change is internal: I have
538a new system for creating packages, which allows me to create 64-bit
539packages. (I still don't do that for perftools, because there is
540still no great 64-bit solution, with libunwind still giving problems
541and --disable-frame-pointers not practical in every environment.)
542
543Another interesting change involves Windows: a
544[http://code.google.com/p/google-perftools/issues/detail?id=126 new
545patch] allows users to choose to override malloc/free/etc on Windows
546rather than patching, as is done now. This can be used to create
547custom CRTs.
548
549My fix for this
550[http://groups.google.com/group/google-perftools/browse_thread/thread/1ff9b50043090d9d/a59210c4206f2060?lnk=gst&q=dynamic#a59210c4206f2060
551bug involving static linking] ended up being to make libtcmalloc.a and
552libperftools.a a big .o file, rather than a true `ar` archive. This
553should not yield any problems in practice -- in fact, it should be
554better, since the heap profiler, leak checker, and cpu profiler will
555now all work even with the static libraries -- but if you find it
556does, please file a bug report.
557
558Finally, the profile_handler_unittest provided in the perftools
559testsuite (new in this release) is failing on FreeBSD. The end-to-end
560test that uses the profile-handler is passing, so I suspect the
561problem may be with the test, not the perftools code itself. However,
562I do not know enough about how itimers work on FreeBSD to be able to
563debug it. If you can figure it out, please let me know!
564
565=== 11 March 2009 ===
566
567I've just released perftools 1.1!
568
569It has many changes since perftools 1.0 including
570
571 * Faster performance due to dynamically sized thread caches
572 * Better heap-sampling for more realistic profiles
573 * Improved support on Windows (MSVC 7.1 and cygwin)
574 * Better stacktraces in linux (using VDSO)
575 * Many bug fixes and feature requests
576
577Note: if you use the CPU-profiler with applications that fork without
578doing an exec right afterwards, please see the README. Recent testing
579has shown that profiles are unreliable in that case. The problem has
580existed since the first release of perftools. We expect to have a fix
581for perftools 1.2. For more details, see
582[http://code.google.com/p/google-perftools/issues/detail?id=105 issue 105].
583
584Everyone who uses perftools 1.0 is encouraged to upgrade to perftools
5851.1. If you see any problems with the new release, please file a bug
586report at http://code.google.com/p/google-perftools/issues/list.
587
588Enjoy!