mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-27 00:26:50 +00:00
339 lines
14 KiB
Plaintext
339 lines
14 KiB
Plaintext
|
== 03 February 2012 ==
|
||
|
|
||
|
I've just released gperftools 2.0
|
||
|
|
||
|
The `google-perftools` project has been renamed to `gperftools`. I
|
||
|
(csilvers) am stepping down as maintainer, to be replaced by
|
||
|
David Chappelle. Welcome to the team, David! David has been an
|
||
|
an active contributor to perftools in the past -- in fact, he's the
|
||
|
only person other than me that already has commit status. I am
|
||
|
pleased to have him take over as maintainer.
|
||
|
|
||
|
I have both renamed the project (the Google Code site renamed a few
|
||
|
weeks ago), and bumped the major version number up to 2, to reflect
|
||
|
the new community ownership of the project. Almost all the
|
||
|
[http://sparsehash.googlecode.com/svn/tags/gperftools-2.0/ChangeLog changes]
|
||
|
are related to the renaming.
|
||
|
|
||
|
The main functional change from google-perftools 1.10 is that
|
||
|
I've renamed the `google/` include-directory to be `gperftools/`
|
||
|
instead. New code should `#include <gperftools/tcmalloc.h>`/etc.
|
||
|
(Most users of perftools don't need any perftools-specific includes at
|
||
|
all, so this is mostly directed to "power users.") I've kept the old
|
||
|
names around as forwarding headers to the new, so `#include
|
||
|
<google/tcmalloc.h>` will continue to work.
|
||
|
|
||
|
(The other functional change which I snuck in is getting rid of some
|
||
|
bash-isms in one of the unittest driver scripts, so it could run on
|
||
|
Solaris.)
|
||
|
|
||
|
Note that some internal names still contain the text `google`, such as
|
||
|
the `google_malloc` internal linker section. I think that's a
|
||
|
trickier transition, and can happen in a future release (if at all).
|
||
|
|
||
|
|
||
|
=== 31 January 2012 ===
|
||
|
|
||
|
I've just released perftools 1.10
|
||
|
|
||
|
There is an API-incompatible change: several of the methods in the
|
||
|
`MallocExtension` class have changed from taking a `void*` to taking a
|
||
|
`const void*`. You should not be affected by this API change
|
||
|
unless you've written your own custom malloc extension that derives
|
||
|
from `MallocExtension`, but since it is a user-visible change, I have
|
||
|
upped the `.so` version number for this release.
|
||
|
|
||
|
This release focuses on improvements to linux-syscall-support.h,
|
||
|
including ARM and PPC fixups and general cleanups. I hope this will
|
||
|
magically fix an array of bugs people have been seeing.
|
||
|
|
||
|
There is also exciting news on the porting front, with support for
|
||
|
patching win64 assembly contributed by IBM Canada! This is an
|
||
|
important step -- perhaps the most difficult -- to getting perftools
|
||
|
to work on 64-bit windows using the patching technique (it doesn't
|
||
|
affect the libc-modification technique). `premable_patcher_test` has
|
||
|
been added to help test these changes; it is meant to compile under
|
||
|
x86_64, and won't work under win32.
|
||
|
|
||
|
For the full list of changes, including improved `HEAP_PROFILE_MMAP`
|
||
|
support, see the
|
||
|
[http://gperftools.googlecode.com/svn/tags/google-perftools-1.10/ChangeLog ChangeLog].
|
||
|
|
||
|
|
||
|
=== 24 January 2011 ===
|
||
|
|
||
|
The `google-perftools` Google Code page has been renamed to
|
||
|
`gperftools`, in preparation for the project being renamed to
|
||
|
`gperftools`. In the coming weeks, I'll be stepping down as
|
||
|
maintainer for the perftools project, and as part of that Google is
|
||
|
relinquishing ownership of the project; it will now be entirely
|
||
|
community run. The name change reflects that shift. The 'g' in
|
||
|
'gperftools' stands for 'great'. :-)
|
||
|
|
||
|
=== 23 December 2011 ===
|
||
|
|
||
|
I've just released perftools 1.9.1
|
||
|
|
||
|
I missed including a file in the tarball, that is needed to compile on
|
||
|
ARM. If you are not compiling on ARM, or have successfully compiled
|
||
|
perftools 1.9, there is no need to upgrade.
|
||
|
|
||
|
|
||
|
=== 22 December 2011 ===
|
||
|
|
||
|
I've just released perftools 1.9
|
||
|
|
||
|
This change has a slew of improvements, from better ARM and freebsd
|
||
|
support, to improved performance by moving some code outside of locks,
|
||
|
to better pprof reporting of code with overloaded functions.
|
||
|
|
||
|
The full list of changes is in the
|
||
|
[http://google-perftools.googlecode.com/svn/tags/google-perftools-1.9/ChangeLog ChangeLog].
|
||
|
|
||
|
|
||
|
=== 26 August 2011 ===
|
||
|
|
||
|
I've just released perftools 1.8.3
|
||
|
|
||
|
The star-crossed 1.8 series continues; in 1.8.1, I had accidentally
|
||
|
removed some code that was needed for FreeBSD. (Without this code
|
||
|
many apps would crash at startup.) This release re-adds that code.
|
||
|
If you are not on FreeBSD, or are using FreeBSD with perftools 1.8 or
|
||
|
earlier, there is no need to upgrade.
|
||
|
|
||
|
=== 11 August 2011 ===
|
||
|
|
||
|
I've just released perftools 1.8.2
|
||
|
|
||
|
I was incorrectly calculating the patch-level in the configuration
|
||
|
step, meaning the TC_VERSION_PATCH #define in tcmalloc.h was wrong.
|
||
|
Since the testing framework checks for this, it was failing. Now it
|
||
|
should work again. This time, I was careful to re-run my tests after
|
||
|
upping the version number. :-)
|
||
|
|
||
|
If you don't care about the TC_VERSION_PATCH #define, there's no
|
||
|
reason to upgrae.
|
||
|
|
||
|
=== 26 July 2011 ===
|
||
|
|
||
|
I've just released perftools 1.8.1
|
||
|
|
||
|
I was missing an #include that caused the build to break under some
|
||
|
compilers, especially newer gcc's, that wanted it. This only affects
|
||
|
people who build from source, so only the .tar.gz file is updated from
|
||
|
perftools 1.8. If you didn't have any problems compiling perftools
|
||
|
1.8, there's no reason to upgrade.
|
||
|
|
||
|
=== 15 July 2011 ===
|
||
|
|
||
|
I've just released perftools 1.8
|
||
|
|
||
|
Of the many changes in this release, a good number pertain to porting.
|
||
|
I've revamped OS X support to use the malloc-zone framework; it should
|
||
|
now Just Work to link in tcmalloc, without needing
|
||
|
`DYLD_FORCE_FLAT_NAMESPACE` or the like. (This is a pretty major
|
||
|
change, so please feel free to report feedback at
|
||
|
google-perftools@googlegroups.com.) 64-bit Windows support is also
|
||
|
improved, as is ARM support, and the hooks are in place to improve
|
||
|
FreeBSD support as well.
|
||
|
|
||
|
On the other hand, I'm seeing hanging tests on Cygwin. I see the same
|
||
|
hanging even with (the old) perftools 1.7, so I'm guessing this is
|
||
|
either a problem specific to my Cygwin installation, or nobody is
|
||
|
trying to use perftools under Cygwin. If you can reproduce the
|
||
|
problem, and even better have a solution, you can report it at
|
||
|
google-perftools@googlegroups.com.
|
||
|
|
||
|
Internal changes include several performance and space-saving tweaks.
|
||
|
One is user-visible (but in "stealth mode", and otherwise
|
||
|
undocumented): you can compile with `-DTCMALLOC_SMALL_BUT_SLOW`. In
|
||
|
this mode, tcmalloc will use less memory overhead, at the cost of
|
||
|
running (likely not noticeably) slower.
|
||
|
|
||
|
There are many other changes as well, too numerous to recount here,
|
||
|
but present in the
|
||
|
[http://google-perftools.googlecode.com/svn/tags/google-perftools-1.8/ChangeLog ChangeLog].
|
||
|
|
||
|
|
||
|
=== 7 February 2011 ===
|
||
|
|
||
|
Thanks to endlessr..., who
|
||
|
[http://code.google.com/p/google-perftools/issues/detail?id=307 identified]
|
||
|
why some tests were failing under MSVC 10 in release mode. It does not look
|
||
|
like these failures point toward any problem with tcmalloc itself; rather, the
|
||
|
problem is with the test, which made some assumptions that broke under the
|
||
|
some aggressive optimizations used in MSVC 10. I'll fix the test, but in
|
||
|
the meantime, feel free to use perftools even when compiled under MSVC
|
||
|
10.
|
||
|
|
||
|
=== 4 February 2011 ===
|
||
|
|
||
|
I've just released perftools 1.7
|
||
|
|
||
|
I apologize for the delay since the last release; so many great new
|
||
|
patches and bugfixes kept coming in (and are still coming in; I also
|
||
|
apologize to those folks who have to slip until the next release). I
|
||
|
picked this arbitrary time to make a cut.
|
||
|
|
||
|
Among the many new features in this release is a multi-megabyte
|
||
|
reduction in the amount of tcmalloc overhead uder x86_64, improved
|
||
|
performance in the case of contention, and many many bugfixes,
|
||
|
especially architecture-specific bugfixes. See the
|
||
|
[http://google-perftools.googlecode.com/svn/tags/google-perftools-1.7/ChangeLog ChangeLog]
|
||
|
for full details.
|
||
|
|
||
|
One architecture-specific change of note is added comments in the
|
||
|
[http://google-perftools.googlecode.com/svn/tags/perftools-1.7/README README]
|
||
|
for using tcmalloc under OS X. I'm trying to get my head around the
|
||
|
exact behavior of the OS X linker, and hope to have more improvements
|
||
|
for the next release, but I hope these notes help folks who have been
|
||
|
having trouble with tcmalloc on OS X.
|
||
|
|
||
|
*Windows users*: I've heard reports that some unittests fail on
|
||
|
Windows when compiled with MSVC 10 in Release mode. All tests pass in
|
||
|
Debug mode. I've not heard of any problems with earlier versions of
|
||
|
MSVC. I don't know if this is a problem with the runtime patching (so
|
||
|
the static patching discussed in README_windows.txt will still work),
|
||
|
a problem with perftools more generally, or a bug in MSVC 10. Anyone
|
||
|
with windows expertise that can debug this, I'd be glad to hear from!
|
||
|
|
||
|
|
||
|
=== 5 August 2010 ===
|
||
|
|
||
|
I've just released perftools 1.6
|
||
|
|
||
|
This version also has a large number of minor changes, including
|
||
|
support for `malloc_usable_size()` as a glibc-compatible alias to
|
||
|
`malloc_size()`, the addition of SVG-based output to `pprof`, and
|
||
|
experimental support for tcmalloc large pages, which may speed up
|
||
|
tcmalloc at the cost of greater memory use. To use tcmalloc large
|
||
|
pages, see the
|
||
|
[http://google-perftools.googlecode.com/svn/tags/perftools-1.6/INSTALL
|
||
|
INSTALL file]; for all changes, see the
|
||
|
[http://google-perftools.googlecode.com/svn/tags/perftools-1.6/ChangeLog
|
||
|
ChangeLog].
|
||
|
|
||
|
OS X NOTE: improvements in the profiler unittest have turned up an OS
|
||
|
X issue: in multithreaded programs, it seems that OS X often delivers
|
||
|
the profiling signal (from sigitimer()) to the main thread, even when
|
||
|
it's sleeping, rather than spawned threads that are doing actual work.
|
||
|
If anyone knows details of how OS X handles SIGPROF events (from
|
||
|
setitimer) in threaded programs, and has insight into this problem,
|
||
|
please send mail to google-perftools@googlegroups.com.
|
||
|
|
||
|
To see if you're affected by this, look for profiling time that pprof
|
||
|
attributes to `___semwait_signal`. This is work being done in other
|
||
|
threads, that is being attributed to sleeping-time in the main thread.
|
||
|
|
||
|
|
||
|
=== 20 January 2010 ===
|
||
|
|
||
|
I've just released perftools 1.5
|
||
|
|
||
|
This version has a slew of changes, leading to somewhat faster
|
||
|
performance and improvements in portability. It adds features like
|
||
|
`ITIMER_REAL` support to the cpu profiler, and `tc_set_new_mode` to
|
||
|
mimic the windows function of the same name. Full details are in the
|
||
|
[http://google-perftools.googlecode.com/svn/tags/perftools-1.5/ChangeLog
|
||
|
ChangeLog].
|
||
|
|
||
|
|
||
|
=== 11 September 2009 ===
|
||
|
|
||
|
I've just released perftools 1.4
|
||
|
|
||
|
The major change this release is the addition of a debugging malloc
|
||
|
library! If you link with `libtcmalloc_debug.so` instead of
|
||
|
`libtcmalloc.so` (and likewise for the `minimal` variants) you'll get
|
||
|
a debugging malloc, which will catch double-frees, writes to freed
|
||
|
data, `free`/`delete` and `delete`/`delete[]` mismatches, and even
|
||
|
(optionally) writes past the end of an allocated block.
|
||
|
|
||
|
We plan to do more with this library in the future, including
|
||
|
supporting it on Windows, and adding the ability to use the debugging
|
||
|
library with your default malloc in addition to using it with
|
||
|
tcmalloc.
|
||
|
|
||
|
There are also the usual complement of bug fixes, documented in the
|
||
|
ChangeLog, and a few minor user-tunable knobs added to components like
|
||
|
the system allocator.
|
||
|
|
||
|
|
||
|
=== 9 June 2009 ===
|
||
|
|
||
|
I've just released perftools 1.3
|
||
|
|
||
|
Like 1.2, this has a variety of bug fixes, especially related to the
|
||
|
Windows build. One of my bugfixes is to undo the weird `ld -r` fix to
|
||
|
`.a` files that I introduced in perftools 1.2: it caused problems on
|
||
|
too many platforms. I've reverted back to normal `.a` files. To work
|
||
|
around the original problem that prompted the `ld -r` fix, I now
|
||
|
provide `libtcmalloc_and_profiler.a`, for folks who want to link in
|
||
|
both.
|
||
|
|
||
|
The most interesting API change is that I now not only override
|
||
|
`malloc`/`free`/etc, I also expose them via a unique set of symbols:
|
||
|
`tc_malloc`/`tc_free`/etc. This enables clients to write their own
|
||
|
memory wrappers that use tcmalloc:
|
||
|
{{{
|
||
|
void* malloc(size_t size) { void* r = tc_malloc(size); Log(r); return r; }
|
||
|
}}}
|
||
|
|
||
|
|
||
|
=== 17 April 2009 ===
|
||
|
|
||
|
I've just released perftools 1.2.
|
||
|
|
||
|
This is mostly a bugfix release. The major change is internal: I have
|
||
|
a new system for creating packages, which allows me to create 64-bit
|
||
|
packages. (I still don't do that for perftools, because there is
|
||
|
still no great 64-bit solution, with libunwind still giving problems
|
||
|
and --disable-frame-pointers not practical in every environment.)
|
||
|
|
||
|
Another interesting change involves Windows: a
|
||
|
[http://code.google.com/p/google-perftools/issues/detail?id=126 new
|
||
|
patch] allows users to choose to override malloc/free/etc on Windows
|
||
|
rather than patching, as is done now. This can be used to create
|
||
|
custom CRTs.
|
||
|
|
||
|
My fix for this
|
||
|
[http://groups.google.com/group/google-perftools/browse_thread/thread/1ff9b50043090d9d/a59210c4206f2060?lnk=gst&q=dynamic#a59210c4206f2060
|
||
|
bug involving static linking] ended up being to make libtcmalloc.a and
|
||
|
libperftools.a a big .o file, rather than a true `ar` archive. This
|
||
|
should not yield any problems in practice -- in fact, it should be
|
||
|
better, since the heap profiler, leak checker, and cpu profiler will
|
||
|
now all work even with the static libraries -- but if you find it
|
||
|
does, please file a bug report.
|
||
|
|
||
|
Finally, the profile_handler_unittest provided in the perftools
|
||
|
testsuite (new in this release) is failing on FreeBSD. The end-to-end
|
||
|
test that uses the profile-handler is passing, so I suspect the
|
||
|
problem may be with the test, not the perftools code itself. However,
|
||
|
I do not know enough about how itimers work on FreeBSD to be able to
|
||
|
debug it. If you can figure it out, please let me know!
|
||
|
|
||
|
=== 11 March 2009 ===
|
||
|
|
||
|
I've just released perftools 1.1!
|
||
|
|
||
|
It has many changes since perftools 1.0 including
|
||
|
|
||
|
* Faster performance due to dynamically sized thread caches
|
||
|
* Better heap-sampling for more realistic profiles
|
||
|
* Improved support on Windows (MSVC 7.1 and cygwin)
|
||
|
* Better stacktraces in linux (using VDSO)
|
||
|
* Many bug fixes and feature requests
|
||
|
|
||
|
Note: if you use the CPU-profiler with applications that fork without
|
||
|
doing an exec right afterwards, please see the README. Recent testing
|
||
|
has shown that profiles are unreliable in that case. The problem has
|
||
|
existed since the first release of perftools. We expect to have a fix
|
||
|
for perftools 1.2. For more details, see
|
||
|
[http://code.google.com/p/google-perftools/issues/detail?id=105 issue 105].
|
||
|
|
||
|
Everyone who uses perftools 1.0 is encouraged to upgrade to perftools
|
||
|
1.1. If you see any problems with the new release, please file a bug
|
||
|
report at http://code.google.com/p/google-perftools/issues/list.
|
||
|
|
||
|
Enjoy!
|