Releases: gperftools/gperftools
gperftools-2.17.2
Couple bugs were found in the recently introduced changes. So this is another point release with some fixes.
gperftools-2.17.1
There was just one fix submitted since 2.17. graysky has contributed build fix for (legacy, 32-bit) ARMs. Huge thanks!
gperftools-2.17
gperftools 2.17 is out!
We have had a few relatively simple updates since the RC release.
-
Salvatore Dipietro has contributed SB instruction support for spinlock delay loops on newer ARMs.
-
libgcc backtrace capturing method now handles deep backtraces better.
-
PPC+musl users can now workaround some issues building PPC-specific backtrace code by adding TCMALLOC_DISABLE_PPC_FRAME_POINTER_BACKTRACER preprocessor define. Much thanks to Josef Schlehofer for reporting the problem. See details in #1602.
-
Jackie Cui has contributed a small change to the page heap span selection logic that makes a big difference in reducing the amount of used memory in some workloads. See #1604 for further details.
Much thanks to all the contributors.
You can find the list of all GitHub issues fixes in this release here: https://github.com/gperftools/gperftools/issues?q=label%3Afixed-in-2.17+is%3Aclosed
gperftools-2.16.90
gperftools 2.17rc is out!
2.17 headline changes are removal of heap leak checker and removal of legacy Perl pprof implementation. People should install and use much, much improved pprof implementation from github.com/google/pprof.
Here is a complete list of reasonably notable changes:
- [headline] heap leak checker has been amputated, as promised earlier
- [headline] we don't ship pprof anymore. People need to get modern and awesome pprof implementation from github.com/google/pprof
- we now have some basic CI infrastructure via Github Actions
- we now have basic Bazel support
- our docs have been slightly updated and converted to AsciiDoc format
- we now implement C23 free{,_aligned}_sized functions (but no libc-s offer those yet anyway)
- FreeBSD bits don't depend on procfs anymore (proc maps iterator was broken anyway; now it works)
- we don't offer mmap profiling anymore. It wasn't entirely complete for some years now, and killing it has eliminated a lot of complexity. MMap hooks are still part of ABI, but they do nothing.
Please find the list of tickets explicitly closed by this release here: https://github.com/gperftools/gperftools/issues?q=label%3A%22fixed-in-2.17%22%20
Many thanks for the following contributions:
- Alex Faxa has contributed (partial) make install support for cmake bits
- Andrey Semashev contributed one build fix and another fix for the test failure
gperftools-2.16
gperftools 2.16 is out!
This release doesn't have major fixes or big headline features, but it has quite a lot of internal modernizations and cleanups. By the number of commits, 2.16 is going to be our biggest release ever.
This release's main focus was making our code and building infrastructure simpler, more straightforward, more portable, and more modern.
Please note that the gperftools 2.16 release will be the last release with the heap leak checker included. The time has come to drop this feature entirely. All users should migrate to relevant gcc/clang sanitizers.
Here are the most notable changes:
-
we've upgraded our C++ standard to C++ 17. Some fraction of our code base was modernized.
-
We've integrated (vendored copy of) GoogleTest, and most tests now use it. GoogleTest has helped us eliminate some legacy code and reduce the number of tests that use shell scripts.
-
There are no more unnecessary wrappers around mutexes and threads for unit tests. We now use C++ standard mutexes and threads in our tests.
-
We've done the bulk of the work necessary to enable hidden visibility. The most significant change is that tests no longer reach into libtcmalloc's guts. We use a special TestingPortal interface instead. We now offer the --enable-hidden-visibility configure option, which does what it says. But please note that hidden visibility is off by default for now.
-
autotools build was significantly refactored, modernized and simplified.
-
The cmake build has also been radically simplified. The previous version attempted to duplicate the same complexity that we had in the autotools build and did not do it very well. More tests now pass under cmake. But please note that cmake support is still not entirely functional, and we're not yet able to promise anything about it.
-
Thread-local storage access and emergency malloc integration have been reworked. We now support emergency malloc even on systems with emutls and similarly "bad" TLS support. As a result, backtracing is now more reliable (e.g., on QNX).
-
OSX operator new/delete performance has been improved. OSX's malloc performance is badly compromised by its support of malloc zones, so we cannot help much (the same applies to much of our competition among memory allocators). But the C++ new/delete API doesn't have to integrate with this stuff, so we now directly replace those functions for a sizeable speedup. Note that OSX performance is still not on par with other "prime tier" OSes due to its lack of efficient TLS support.
-
Long deprecated google/ headers have been deleted (use, e.g., "gperftools/tcmalloc.h" instead)
-
All clang builds now use -Wthread-safety and actually check thread-safety declarations
-
Our code has stopped being incompatible with _TIME_BITS=64 on modern GNU Linux systems (relevant only for 32-bit systems)
-
OpenSolaris build has been verified and fixed when needed
Thanks to the following people for code contributions:
-
Github user oPiZiL (build fix for gcc 7.5)
-
Github user zhangdexin (qnx fixes)
-
Ishant Goyal (support for configuring minimal per-thread cache size)
-
Lennox Ho (several build fixes and several fixes around Windows support)
-
Olivier Langlois
-
Sergey Fedorovhas (another fix for building gperftools on old PPC
OSX computers) -
Xiang.Lin (several OSX fixes)
-
Yikai Zhao (aarch64 generic_fp stack frame validation)
You can find the list of all GitHub issues fixes in this release here:
https://github.com/gperftools/gperftools/issues?q=label%3Afixed-in-2.16+is%3Aclosed
gperftools-2.15.90
gperftools 2.16rc is out!
This release doesn't have major fixes or big headline features, but it has quite a lot of internal modernizations and cleanups. By the number of commits, 2.16 is going to be our biggest release ever.
This release's main focus was making our code and building infrastructure simpler, more straightforward, more portable, and more modern.
Please note that the gperftools 2.16 release will be the last release with the heap leak checker included. The time has come to drop this feature entirely. All users should migrate to relevant gcc/clang sanitizers.
Here are the most notable changes:
-
we've upgraded our C++ standard to C++ 17. Some fraction of our code base was modernized.
-
We've integrated (vendored copy of) GoogleTest, and most tests now use it. GoogleTest has helped us eliminate some legacy code and reduce the number of tests that use shell scripts.
-
There are no more unnecessary wrappers around mutexes and threads for unit tests. We now use C++ standard mutexes and threads in our tests.
-
We've done the bulk of the work necessary to enable hidden visibility. The most significant change is that tests no longer reach into libtcmalloc's guts. We use a special TestingPortal interface instead. We now offer the --enable-hidden-visibility configure option, which does what it says. But please note that hidden visibility is off by default for now.
-
autotools build was significantly refactored, modernized and simplified.
-
The cmake build has also been radically simplified. The previous version attempted to duplicate the same complexity that we had in the autotools build and did not do it very well. More tests now pass under cmake. But please note that cmake support is still not entirely functional, and we're not yet able to promise anything about it.
-
Thread-local storage access and emergency malloc integration have been reworked. We now support emergency malloc even on systems with emutls and similarly "bad" TLS support. As a result, backtracing is now more reliable (e.g., on QNX).
-
OSX operator new/delete performance has been improved. OSX's malloc performance is badly compromised by its support of malloc zones, so we cannot help much (the same applies to much of our competition among memory allocators). But the C++ new/delete API doesn't have to integrate with this stuff, so we now directly replace those functions for a sizeable speedup. Note that OSX performance is still not on par with other "prime tier" OSes due to its lack of efficient TLS support.
-
Long deprecated google/ headers have been deleted (use, e.g., "gperftools/tcmalloc.h" instead)
-
All clang builds now use -Wthread-safety and actually check thread-safety declarations
-
Our code has stopped being incompatible with _TIME_BITS=64 on modern GNU Linux systems (relevant only for 32-bit systems)
-
OpenSolaris build has been verified and fixed when needed
Thanks to the following people for code contributions:
-
Github user oPiZiL (build fix for gcc 7.5)
-
Github user zhangdexin (qnx fixes)
-
Ishant Goyal (support for configuring minimal per-thread cache size)
-
Lennox Ho (several build fixes and several fixes around Windows support)
-
Olivier Langlois
-
Sergey Fedorovhas (another fix for building gperftools on old PPC
OSX computers) -
Xiang.Lin (several OSX fixes)
-
Yikai Zhao (aarch64 generic_fp stack frame validation)
You can find the list of all GitHub issues fixes in this release here:
https://github.com/gperftools/gperftools/issues?q=label%3Afixed-in-2.16+is%3Aclosed
gperftools-2.15
This release has the following bug fixes:
-
Xiaowei Wang has pointed out the pthread linking issue on cmake on older glibcs (where -pthread is not implicit). See #1473 for more details.
-
Mikael Simberg and Tom "spot" Callaway have pointed out the missing symbols issue when linking PPC or i386 builds. #1474 has all the details.
Huge thanks to all contributors!
gperftools-2.14
gperftools 2.14 is out!
This release has the following set of notable changes:
-
Roman Geissler has contributed a fix to nasty initialization bug introduced in 2.13 (see github issue #1452 for one example where it fails).
-
spinlock delay support now has proper windows support. Instead of simply sleeping, it uses WaitOnAddress (which is basically windows equivalent of futexes). This improvement was contributed by Lennox Ho.
-
we now have basic QNX support (basic malloc + heap profiler) championed by Xiang.Lin. Thanks! Do note, however, that QNX doesn't provide SIGPROF ticks, so there will be no cpu profiler support on this OS.
-
Yikai Zhao has contributed several fixes to important corner cases of generic_fp stacktrace method.
-
several people have contributed various improvements to our cmake build: Lennox Ho, Sergey Fedorov, Mateusz Jakub Fila. But do note that cmake build is still incomplete and best-effort.
-
Julian Schroeder have fixed generic_fp incompatibility with ARM pointer auth.
-
Mateusz Jakub Fila has contributed implementation of mallocinfo2 function (64-bit version of mallinfo).
-
Lennox Ho has updated C malloc extension shims to include {Set,Get}MemoryReleaseRate.
-
Lennox Ho has contributed the ability to disable malloc functions patching on windows when TCMALLOC_DISABLE_REPLACEMENT=1 environment variable is set.
-
User poljak181 has contributed a fix to infinite recursion in some cases of malloc hooks (or user-replaced operator new) and MallocExtension::instance().
-
Sergey Fedorov has contributed a fix to use MAP_ANON on some older OSes without MAP_ANONYMOUS.
-
the way we detect working ucontext->pc extraction method was reworked and is now fully compile-time as opposed to config-time. This means no more duplication and mismatches between autoconf and cmake bits in this area.
List of relevant tickets can be seen online at: https://github.com/gperftools/gperftools/issues?q=label%3Afixed-in-2.14+
gperftools-2.13
gperftools 2.13 is out!
This release includes a few minor fixes:
-
Ivan Dlugos has fixed some issues with cmake and config.h defines.
-
32-bit builds no longer require 64-bit atomics (which we wrongly introduced in 2.11 and which broke builds on some 32-bit architectures).
-
generic_fp backtracing method now uses robust address probing method. The previous approach had occasional false positives, which caused occasional rare crashes.
-
In some cases, MSVC generated TrivialOnce machine code that deadlocked programs on startup. The issue is now fixed.
gperftools-2.12
Brett T. Warden contributed one significant fix. After a change in the previous release, we installed broken pkg-config files. Brett noticed and fixed that. Huge thanks!