1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443
|
== 5 Jan 2024
gperftools 2.15 is out!
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
https://github.com/gperftools/gperftools/pull/1473 for more details.
* Mikael Simberg and Tom "spot" Callaway have pointed out the missing
symbols issue when linking PPC or i386
builds. https://github.com/gperftools/gperftools/issues/1474 has all
the details.
Huge thanks to all contributors!
== 31 Dec 2023
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+
== 11 Sep 2023
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.
== 24 Aug 2023
gperftools 2.12 is out!
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!
== 14 Aug 2023
gperftools 2.11 is out!
Few minor fixes since rc couple weeks ago. Plus couple notable
contributions:
* Artem Polyakov has contributed auto-detection of several MPI systems
w.r.t. filenames used by HEAPPROFILE and CPUPROFILE environment
variables. Also, we now support HEAPPROFILE_USE_PID and
CPUPROFILE_USE_PID environment variables that force profile
filenames to have pid appended. Which will be useful for some
programs that fork for parallelism. See
https://github.com/gperftools/gperftools/pull/1263 for details.
* Ken Raffenetti has extended MPI detection mentioned above with
detection of MPICH system.
Thanks a lot!
== 31 July 2023
gperftools 2.11rc is out!
Most notable change is that Linux/aarch64 and Linux/riscv are now
fully supported. That is, all unit tests pass on those architectures
(previously the heap leak checker was broken).
Also notable is that heap leak checker support is officially
deprecated as of this release. All bug fixes from now are on a best
effort basis. For clarity we also declare that it is only expected to
work (for some definition of work) on Linux/x86 (all kinds),
Linux/aarch64, Linux/arm, Linux/ppc (untested as of this writing) and
Linux/mips (untested as well). While some functionality worked in the
past on BSDs, it was never fully functional; and will never be. We
strongly recommend everyone to switch to asan and friends.
For major internal changes it is also worth mentioning that we now
fully switched to C++-11 std::atomic. All custom OS- and arch-specific
atomic bits have been removed at last.
Another notable change is that mmap and sbrk hooks facility is now
no-op. We keep API and ABI for formal compatibility, but the calls to
add mmap/sbrk hooks do nothing and return an error (whenever possible
as part of API). There seem to be no users of it anyways, and mmap
replacement API that is part of that facility really screwed up 64-bit
offsets on (some/most) 32-bit systems. Internally for heap profiler
and heap checker we have a new, but non-public API (see mmap_hook.h).
Most tests now pass on NetBSD x86-64 (I tested on version 9.2). And
only one that fails is new stacktrace test for stacktraces from signal
handler (so there could be some imperfections for cpu profiles).
We don't warn people away from the libgcc stacktrace capturing method
anymore. In fact users on most recent glibc-s are advised to use it
(pass --enable-libgcc-unwinder-by-default). This is thanks to the
dl_find_object API offered by glibc which allows this implementation
to be fully async-signal-safe. Modern Linux distros should from now on
build their gperftools package with this enabled (other than those
built on top of musl).
generic_fp and generic_fp_unsafe stacktrace capturing methods have
been expanded for more architectures and even some basic non-Linux
support. We have completely removed old x86-specific frame pointer
stacktrace implementation in favor of those 2. _unsafe one should be
roughly equivalent to the old x86 method. And 'safe' one is
recommended as a new default for those who want FP-based
stacktracing. Safe implementation robustly checks memory before
accessing it, preventing unlikely, but not impossible crashes when
frame pointers are bogus.
On platforms that support it, we now build gperftools with
"-fno-omit-frame-pointer -momit-leaf-frame-pointer". This makes
gperftools mostly frame-pointer-ful, but without performance hit in
places that matter (this is how Google builds their binaries
BTW). That should cover gcc (at least) on x86, aarch64 and
riscv. Intention for this change is to make distro-shipped
libtcmalloc.so compatible with frame-pointer stacktrace capturing (for
those who still do heap profiling, for example). Of course, passing
--enable-frame-pointers still gives you full frame pointers (i.e. even
for leaf functions).
There is now support for detecting actual page size at
runtime. tcmalloc will now allocate memory in units of this page
size. It particularly helps on arms with 64k pages to return memory
back to the kernel. But it is somewhat controversial, because it
effectively bumps tcmalloc logical page size on those machines
potentially increasing fragmentation. In any case, there is now a new
environment variable TCMALLOC_OVERRIDE_PAGESIZE allowing people to
override this check. I.e. to either reduce effective page size down to
tcmalloc's logical page size or to increase it.
MallocExtension::MarkThreadTemporarilyIdle has been changed to be
identical to MarkThreadIdle. MarkThreadTemporarilyIdle is believed to
be unused, anyways. See issue #880 for details.
There are a whole bunch of smaller fixes. Many of those smaller fixes
had no associated ticket, but some had. People are advised to see here
for list of notable tickets closed in this release:
https://github.com/gperftools/gperftools/issues?q=label%3Afixed-in-2.11+
Some of those tickets are quite notable (fixes for rare deadlocks in
cpu profiler ProfilerStop or while capturing heap growth stacktraces
(aka growthz)).
Here is list of notable contributions:
* Chris Cambly has contributed initial support for AIX
* Ali Saidi has contributed SpinlockPause implementation for aarch64
* Henrik Reinstädtler has contributed fix for cpuprofiler on aarch64
OSX
* Gabriel Marin has backported Chromium's commit for always sanity
checking large frees
* User zhangyiru has contributed a fix to report the number of leaked
bytes as size_t instead of (usually 32-bit) int.
* Sergey Fedorov has contributed some fix for building on older
ppc-based OSX-es
* User tigeran has removed unused using declaration
Huge thanks to all contributors.
== 30 May 2022 ==
gperftools 2.10 is out!
Here are notable changes:
* Matt T. Proud contributed documentation fix to call Go programming
language by it's true name instead of golang.
* Robert Scott contributed debugallocator feature to use readable
(PROT_READ) fence pages. This is activated by
TCMALLOC_PAGE_FENCE_READABLE environment veriable.
* User stdpain contributed fix for cmake detection of libunwind.
* Natale Patriciello contributed fix for OSX Monterey support.
* Volodymyr Nikolaichuk contributed support for returning memory back
to OS by using mmap with MAP_FIXED and PROT_NONE. It is off by
default and enabled by preprocessor define:
FREE_MMAP_PROT_NONE. This should help OSes that don't support
Linux-style madvise MADV_DONTNEED or BSD-style MADV_FREE.
* Jingyun Hua has contributed basic support for LoongArch.
* Github issue #1338 of failing to build on some recent musl versions
has been fixed.
* Github issue #1321 of failing to ship cmake bits with .tar.gz
archive has been fixed.
== 2 March 2021 ==
gperftools 2.9.1 is out!
Minor fixes landed since previous release:
* OSX builds new prefer backtrace() and have somewhat working heap
sampling.
* Incorrect assertion failure was fixed that crashed tcmalloc if
assertions were on and sized delete was used. More details in github
issue #1254.
== 21 February 2021 ==
gperftools 2.9 is out!
Few more changes landed compared to rc:
* Venkatesh Srinivas has contributed thread-safety annotations
support.
* couple more unit test bugs that caused tcmalloc_unittest to fail on
recent clang has been fixed.
* usage of unsupportable linux_syscall_support.h has been removed from
few places. Building with --disable-heap-checker now completely
avoids it. Expect complete death of this header in next major
release.
== 14 February 2021 ==
gperftools 2.9rc is out!
Here are notable changes:
* Jarno Rajahalme has contributed fix for crashing bug in syscalls
support for aarch64.
* User SSE4 has contributed basic support for Elbrus 2000 architecture
(!)
* Venkatesh Srinivas has contributed cleanup to atomic ops.
* Đoàn Trần Công Danh has fixed cpu profiler compilation on musl.
* there is now better backtracing support for aarch64 and
riscv. x86-64 with frame pointers now also defaults to this new
"generic" frame pointer backtracer.
* emergency malloc is now enabled by default. Fixes hang on musl when
libgcc backtracer is enabled.
* bunch of legacy config tests has been removed
== 20 December 2020 ==
gperftools 2.8.1 is out!
Here are notable changes:
* previous release contained change to release memory without page
heap lock, but this change had at least one bug that caused to
crashes and corruption when running under aggressive decommit mode
(this is not default). While we check for other bugs, this feature
was reverted. See github issue #1204 and issue #1227.
* stack traces depth captured by gperftools is now up to 254 levels
deep. Thanks to Kerrick Staley for this small but useful tweak.
* Levon Ter-Grigoryan has contributed small fix for compiler warning.
* Grant Henke has contributed updated detection of program counter
register for OS X on arm64.
* Tim Gates has contributed small typo fix.
* Steve Langasek has contributed basic build fixes for riscv64 (!).
* Isaac Hier and okhowang have contributed premiliminary port of build
infrastructure to cmake. This works, but it is very premiliminary.
Autotools-based build is the only officially supported build for
now.
== 6 July 2020 ==
gperftools 2.8 is out!
Here are notable changes:
* ProfilerGetStackTrace is now officially supported API for
libprofiler. Contributed by Kirill Müller.
* Build failures on mingw were fixed. This fixed issue #1108.
* Build failure of page_heap_test on MSVC was fixed.
* Ryan Macnak contributed fix for compiling linux syscall support on
i386 and recent GCCs. This fixed issue #1076.
* test failures caused by new gcc 10 optimizations were fixed. Same
change also fixed tests on clang.
== 8 Mar 2020 ==
gperftools 2.8rc is out!
Here are notable changes:
* building code now requires c++11 or later. Bundled MSVC project was
converted to Visual Studio 2015.
* User obones contributed fix for windows x64 TLS callbacks. This
fixed leak of thread caches on thread exists in 64-bit windows.
* releasing memory back to kernel is now made with page heap lock
dropped.
* HoluWu contributed fix for correct malloc patching on debug builds
on windows. This configuration previously crashed.
* Romain Geissler contributed fix for tls access during early tls
initialization on dlopen.
* large allocation reports are now silenced by default. Since not all
programs want their stderr polluted by those messages. Contributed
by Junhao Li.
* HolyWu contributed improvements to MSVC project files. Notably,
there is now project for "overriding" version of tcmalloc.
* MS-specific _recalloc is now correctly zeroing only malloced
part. This fix was contributed by HolyWu.
* Brian Silverman contributed correctness fix to sampler_test.
* Gabriel Marin ported few fixes from chromium's fork. As part of
those fixes, we reduced number of static initializers (forbidden in
chromium). Also we now syscalls via syscall function instead of
reimplementing direct way to make syscalls on each platform.
* Brian Silverman fixed flakiness in page heap test.
* There is now configure flag to skip installing perl pprof, since
external golang pprof is much superior. --disable-deprecated-pprof
is the flag.
* Fabric Fontaine contributed fixes to drop use of nonstandard
__off64_t type.
* Fabrice Fontaine contributed build fix to check for presence of
nonstandard __sbrk functions. It is only used by mmap hooks code and
(rightfully) not available on musl.
* Fabrice Fontaine contributed build fix around mmap64 macro and
function conflict in same cases.
* there is now configure time option to enable aggressive decommit by
default. Contributed by Laurent
Stacul. --enable-aggressive-decommit-by-default is the flag.
* Tulio Magno Quites Machado Filho contributed build fixes for ppc
around ucontext access.
* User pkubaj contributed couple build fixes for FreeBSD/ppc.
* configure now always assumes we have mmap. This fixes configure
failures on some linux guests inside virtualbox. This fixed issue
#1008.
* User shipujin contributed syscall support fixes for mips64 (big and
little endian).
* Henrik Edin contributed configurable support for wide range of
malloc page sizes. 4K, 8K, 16K, 32K, 64K, 128K and 256K are now
supported via existing --with-tcmalloc-pagesize flag to configure.
* Jon Kohler added overheads fields to per-size-class textual
stats. Stats that are available via
MallocExtension::instance()->GetStats().
* tcmalloc can now avoid fallback from memfs to default sys
allocator. TCMALLOC_MEMFS_DISABLE_FALLBACK switches this on. This
was contributed by Jon Kohler.
* Ilya Leoshkevich fixed mmap syscall support on s390.
* Todd Lipcon contributed small build warning fix.
* User prehistoricpenguin contributed misc source file mode fixes (we
still had few few c++ files marked executable).
* User invalid_ms_user contributed fix for typo.
* Jakub Wilk contributed typos fixes.
== 29 Apr 2018 ==
gperftools 2.7 is out!
Few people contributed minor, but important fixes since rc.
Changes:
* bug in span stats printing introduced by new scalable page heap
change was fixed.
* Christoph Müllner has contributed couple warnings fixes and initial
support for aarch64_ilp32 architecture.
* Ben Dang contributed documentation fix for heap checker.
* Fabrice Fontaine contributed fixed for linking benchmarks with
--disable-static.
* Holy Wu has added sized deallocation unit tests.
* Holy Wu has enabled support of sized deallocation (c++14) on recent
MSVC.
* Holy Wu has fixed MSVC build in WIN32_OVERRIDE_ALLOCATORS mode. This
closed issue #716.
* Holy Wu has contributed cleanup of config.h used on windows.
* Mao Huang has contributed couple simple tcmalloc changes from
chromium code base. Making our tcmalloc forks a tiny bit closer.
* issue #946 that caused compilation failures on some Linux clang
installations has been fixed. Much thanks to github user htuch for
helping to diagnose issue and proposing a fix.
* Tulio Magno Quites Machado Filho has contributed build-time fix for
PPC (for problem introduced in one of commits since RC).
== 18 Mar 2018 ==
gperftools 2.7rc is out!
Changes:
* Most notable change in this release is that very large allocations
(>1MiB) are now handled be O(log n) implementation. This is
contributed by Todd Lipcon based on earlier work by Aliaksei
Kandratsenka and James Golick. Special thanks to Alexey Serbin for
contributing OSX fix for that commit.
* detection of sized deallocation support is improved. Which should
fix another set of issues building on OSX. Much thanks to Alexey
Serbin for reporting the issue, suggesting a fix and verifying it.
* Todd Lipcon made a change to extend page heaps freelists to 1 MiB
(up from 1MiB - 8KiB). This may help a little for some workloads.
* Ishan Arora contributed typo fix to docs
== 9 Dec 2017 ==
gperftools 2.6.3 is out!
Just two fixes were made in this release:
* Stephan Zuercher has contributed a build fix for some recent XCode
versions. See issue #942 for more details.
* assertion failure on some windows builds introduced by 2.6.2 was
fixed. Thanks to github user nkeemik for reporting it and testing
fix. See issue #944 for more details.
== 30 Nov 2017 ==
gperftools 2.6.2 is out!
Most notable change is recently added support for C++17 over-aligned
allocation operators contributed by Andrey Semashev. I've extended his
implemention to have roughly same performance as malloc/new. This
release also has native support for C11 aligned_alloc.
Rest is mostly bug fixes:
* Jianbo Yang has contributed a fix for potentially severe data race
introduced by malloc fast-path work in gperftools 2.6. This race
could cause occasional violation of total thread cache size
constraint. See issue #929 for more details.
* Correct behavior in out-of-memory condition in fast-path cases was
restored. This was another bug introduced by fast-path optimization
in gperftools 2.6 which caused operator new to silently return NULL
instead of doing correct C++ OOM handling (calling new_handler and
throwing bad_alloc).
* Khem Raj has contributed couple build fixes for newer glibcs (ucontext_t vs
struct ucontext and loff_t definition)
* Piotr Sikora has contributed build fix for OSX (not building unwind
benchmark). This was issue #910 (thanks to Yuriy Solovyov for
reporting it).
* Dorin Lazăr has contributed fix for compiler warning
* issue #912 (occasional deadlocking calling getenv too early on
windows) was fixed. Thanks to github user shangcangriluo for
reporting it.
* Couple earlier lsan-related commits still causing occasional issues
linking on OSX has been reverted. See issue #901.
* Volodimir Krylov has contributed GetProgramInvocationName for FreeBSD
* changsu lee has contributed couple minor correctness fixes (missing
va_end() and missing free() call in rarely executed Symbolize path)
* Andrew C. Morrow has contributed some more page heap stats. See issue
#935.
* some cases of built-time warnings from various gcc/clang versions
about throw() declarations have been fixes.
== 9 July 2017 ==
gperftools 2.6.1 is out! This is mostly bug-fixes release.
* issue #901: build issue on OSX introduced in last-time commit in 2.6
was fixed (contributed by Francis Ricci)
* tcmalloc_minimal now works on 32-bit ABI of mips64. This is issue
#845. Much thanks to Adhemerval Zanella and github user mtone.
* Romain Geissler contributed build fix for -std=c++17. This is pull
request #897.
* As part of fixing issue #904, tcmalloc atfork handler is now
installed early. This should fix slight chance of hitting deadlocks
at fork in some cases.
== 4 July 2017 ==
gperftools 2.6 is out!
* Kim Gräsman contributed documentation update for HEAPPROFILESIGNAL
environment variable
* KernelMaker contributed fix for population of min_object_size field
returned by MallocExtension::GetFreeListSizes
* commit 8c3dc52fcfe0 "issue-654: [pprof] handle split text segments"
was reverted. Some OSX users reported issues with this commit. Given
our pprof implementation is strongly deprecated it is best to drop
recently introduced features rather than breaking it badly.
* Francis Ricci contributed improvement for interaction with leak
sanitizer.
== 22 May 2017 ==
gperftools 2.6rc4 is out!
Dynamic sized delete is disabled by default again. There is no hope of
it working with eager dynamic symbols resolution (-z now linker
flag). More details in
https://bugzilla.redhat.com/show_bug.cgi?id=1452813
== 21 May 2017 ==
gperftools 2.6rc3 is out!
gperftools compilation on older systems (e.g. rhel 5) was fixed. This
was originally reported in github issue #888.
== 14 May 2017 ==
gperftools 2.6rc2 is out!
Just 2 small fixes on top of 2.6rc. Particularly, Rajalakshmi
Srinivasaraghavan contributed build fix for ppc32.
== 14 May 2017 ==
gperftools 2.6rc is out!
Highlights of this release are performance work on malloc fast-path
and support for more modern visual studio runtimes, and deprecation of
bundled pprof. Another significant performance-affecting changes are
reverting central free list transfer batch size back to 32 and
disabling of aggressive decommit mode by default.
Note, while we still ship perl implementation of pprof, everyone is
strongly advised to use golang reimplementation of pprof from
https://github.com/google/pprof.
Here are notable changes in more details (and see ChangeLog for full
details):
* a bunch of performance tweaks to tcmalloc fast-path were
merged. This speeds up critical path of tcmalloc by few tens of
%. Well tuned and allocation-heavy programs should see substantial
performance boost (should apply to all modern elf platforms). This
is based on Google-internal tcmalloc changes for fast-path (with
obvious exception of lacking per-cpu mode, of course). Original
changes were made by Aliaksei Kandratsenka. And Andrew Hunter,
Dmitry Vyukov and Sanjay Ghemawat contributed with reviews and
discussions.
* Architectures with 48 bits address space (x86-64 and aarch64) now
use faster 2 level page map. This was ported from Google-internal
change by Sanjay Ghemawat.
* Default value of TCMALLOC_TRANSFER_NUM_OBJ was returned back to
32. Larger values have been found to hurt certain programs (but help
some other benchmarks). Value can still be tweaked at run time via
environment variable.
* tcmalloc aggressive decommit mode is now disabled by default
again. It was found to degrade performance of certain tensorflow
benchmarks. Users who prefer smaller heap over small performance win
can still set environment variable TCMALLOC_AGGRESSIVE_DECOMMIT=t.
* runtime switchable sized delete support has be fixed and re-enabled
(on GNU/Linux). Programs that use C++ 14 or later that use sized
delete can again be sped up by setting environment variable
TCMALLOC_ENABLE_SIZED_DELETE=t. Support for enabling sized
deallication support at compile-time is still present, of course.
* tcmalloc now explicitly avoids use of MADV_FREE on Linux, unless
TCMALLOC_USE_MADV_FREE is defined at compile time. This is because
performance impact of MADV_FREE is not well known. Original issue
#780 raised by Mathias Stearn.
* issue #786 with occasional deadlocks in stack trace capturing via
libunwind was fixed. It was originally reported as Ceph issue:
http://tracker.ceph.com/issues/13522
* ChangeLog is now automatically generated from git log. Old ChangeLog
is now ChangeLog.old.
* tcmalloc now provides implementation of nallocx. Function was
originally introduced by jemalloc and can be used to return real
allocation size given allocation request size. This is ported from
Google-internal tcmalloc change contributed by Dmitry Vyukov.
* issue #843 which made tcmalloc crash when used with erlang runtime
was fixed.
* issue #839 which caused tcmalloc's aggressive decommit mode to
degrade performance in some corner cases was fixed.
* Bryan Chan contributed support for 31-bit s390.
* Brian Silverman contributed compilation fix for 32-bit ARMs
* Issue #817 that was causing tcmalloc to fail on windows 10 and
later, as well as on recent msvc was fixed. We now patch _free_base
as well.
* a bunch of minor documentaion/typos fixes by: Mike Gaffney
<mike@uberu.com>, iivlev <iivlev@productengine.com>, savefromgoogle
<savefromgoogle@users.noreply.github.com>, John McDole
<jtmcdole@gmail.com>, zmertens <zmertens@asu.edu>, Kirill Müller
<krlmlr@mailbox.org>, Eugene <n.eugene536@gmail.com>, Ola Olsson
<ola1olsson@gmail.com>, Mostyn Bramley-Moore <mostynb@opera.com>
* Tulio Magno Quites Machado Filho has contributed removal of
deprecated glibc malloc hooks.
* Issue #827 that caused intercepting malloc on osx 10.12 to fail was
fixed, by copying fix made by Mike Hommey to jemalloc. Much thanks
to Koichi Shiraishi and David Ribeiro Alves for reporting it and
testing fix.
* Aman Gupta and Kenton Varda contributed minor fixes to pprof (but
note again that pprof is deprecated)
* Ryan Macnak contributed compilation fix for aarch64
* Francis Ricci has fixed unaligned memory access in debug allocator
* TCMALLOC_PAGE_FENCE_NEVER_RECLAIM now actually works thanks to
contribution by Andrew Morrow.
== 12 Mar 2016 ==
gperftools 2.5 is out!
Just single bugfix was merged after rc2. Which was fix for issue #777.
== 5 Mar 2016 ==
gperftools 2.5rc2 is out!
New release contains just few commits on top of first release
candidate. One of them is build fix for Visual Studio. Another
significant change is that dynamic sized delete is now disabled by
default. It turned out that IFUNC relocations are not supporting our
advanced use case on all platforms and in all cases.
== 21 Feb 2016 ==
gperftools 2.5rc is out!
Here are major changes since 2.4:
* we've moved to github!
* Bryan Chan has contributed s390x support
* stacktrace capturing via libgcc's _Unwind_Backtrace was implemented
(for architectures with missing or broken libunwind).
* "emergency malloc" was implemented. Which unbreaks recursive calls
to malloc/free from stacktrace capturing functions (such us glib'c
backtrace() or libunwind on arm). It is enabled by
--enable-emergency-malloc configure flag or by default on arm when
--enable-stacktrace-via-backtrace is given. It is another fix for a
number common issues people had on platforms with missing or broken
libunwind.
* C++14 sized-deallocation is now supported (on gcc 5 and recent
clangs). It is off by default and can be enabled at configure time
via --enable-sized-delete. On GNU/Linux it can also be enabled at
run-time by either TCMALLOC_ENABLE_SIZED_DELETE environment variable
or by defining tcmalloc_sized_delete_enabled function which should
return 1 to enable it.
* we've lowered default value of transfer batch size to 512. Previous
value (bumped up in 2.1) was too high and caused performance
regression for some users. 512 should still give us performance
boost for workloads that need higher transfer batch size while not
penalizing other workloads too much.
* Brian Silverman's patch finally stopped arming profiling timer
unless profiling is started.
* Andrew Morrow has contributed support for obtaining cache size of the
current thread and softer idling (for use in MongoDB).
* we've implemented few minor performance improvements, particularly
on malloc fast-path.
A number of smaller fixes were made. Many of them were contributed:
* issue that caused spurious profiler_unittest.sh failures was fixed.
* Jonathan Lambrechts contributed improved callgrind format support to
pprof.
* Matt Cross contributed better support for debug symbols in separate
files to pprof.
* Matt Cross contributed support for printing collapsed stack frame
from pprof aimed at producing flame graphs.
* Angus Gratton has contributed documentation fix mentioning that on
windows only tcmalloc_minimal is supported.
* Anton Samokhvalov has made tcmalloc use mi_force_{un,}lock on OSX
instead of pthread_atfork. Which apparently fixes forking
issues tcmalloc had on OSX.
* Milton Chiang has contributed support for building 32-bit gperftools
on arm8.
* Patrick LoPresti has contributed support for specifying alternative
profiling signal via CPUPROFILE_TIMER_SIGNAL environment variable.
* Paolo Bonzini has contributed support configuring filename for
sending malloc tracing output via TCMALLOC_TRACE_FILE environment
variable.
* user spotrh has enabled use of futex on arm.
* user mitchblank has contributed better declaration for arg-less
profiler functions.
* Tom Conerly contributed proper freeing of memory allocated in
HeapProfileTable::FillOrderedProfile on error paths.
* user fdeweerdt has contributed curl arguments handling fix in pprof
* Frederik Mellbin fixed tcmalloc's idea of mangled new and delete
symbols on windows x64
* Dair Grant has contributed cacheline alignment for ThreadCache
objects
* Fredrik Mellbin has contributed updated windows/config.h for Visual
Studio 2015 and other windows fixes.
* we're not linking libpthread to libtcmalloc_minimal anymore. Instead
libtcmalloc_minimal links to pthread symbols weakly. As a result
single-threaded programs remain single-threaded when linking to or
preloading libtcmalloc_minimal.so.
* Boris Sazonov has contributed mips compilation fix and printf misue
in pprof.
* Adhemerval Zanella has contributed alignment fixes for statically
allocated variables.
* Jens Rosenboom has contributed fixes for heap-profiler_unittest.sh
* gshirishfree has contributed better description for GetStats method.
* cyshi has contributed spinlock pause fix.
* Chris Mayo has contributed --docdir argument support for configure.
* Duncan Sands has contributed fix for function aliases.
* Simon Que contributed better include for malloc_hook_c.h
* user wmamrak contributed struct timespec fix for Visual Studio 2015.
* user ssubotin contributed typo in PrintAvailability code.
== 10 Jan 2015 ==
gperftools 2.4 is out! The code is exactly same as 2.4rc.
== 28 Dec 2014 ==
gperftools 2.4rc is out!
Here are changes since 2.3:
* enabled aggressive decommit option by default. It was found to
significantly improve memory fragmentation with negligible impact on
performance. (Thanks to investigation work performed by Adhemerval
Zanella)
* added ./configure flags for tcmalloc pagesize and tcmalloc
allocation alignment. Larger page sizes have been reported to
improve performance occasionally. (Patch by Raphael Moreira Zinsly)
* sped-up hot-path of malloc/free. By about 5% on static library and
about 10% on shared library. Mainly due to more efficient checking
of malloc hooks.
* improved stacktrace capturing in cpu profiler (due to issue found by
Arun Sharma). As part of that issue pprof's handling of cpu profiles
was also improved.
== 7 Dec 2014 ==
gperftools 2.3 is out!
Here are changes since 2.3rc:
* (issue 658) correctly close socketpair fds on failure (patch by glider)
* libunwind integration can be disabled at configure time (patch by
Raphael Moreira Zinsly)
* libunwind integration is disabled by default for ppc64 (patch by
Raphael Moreira Zinsly)
* libunwind integration is force-disabled for OSX. It was not used by
default anyways. Fixes compilation issue I saw.
== 2 Nov 2014 ==
gperftools 2.3rc is out!
Most small improvements in this release were made to pprof tool.
New experimental Linux-only (for now) cpu profiling mode is a notable
big improvement.
Here are notable changes since 2.2.1:
* (issue-631) fixed debugallocation miscompilation on mmap-less
platforms (courtesy of user iamxujian)
* (issue-630) reference to wrong PROFILE (vs. correct CPUPROFILE)
environment variable was fixed (courtesy of WenSheng He)
* pprof now has option to display stack traces in output for heap
checker (courtesy of Michael Pasieka)
* (issue-636) pprof web command now works on mingw
* (issue-635) pprof now handles library paths that contain spaces
(courtesy of user mich...@sebesbefut.com)
* (issue-637) pprof now has an option to not strip template arguments
(patch by jiakai)
* (issue-644) possible out-of-bounds access in GetenvBeforeMain was
fixed (thanks to user abyss.7)
* (issue-641) pprof now has an option --show_addresses (thanks to user
yurivict). New option prints instruction address in addition to
function name in stack traces
* (issue-646) pprof now works around some issues of addr2line
reportedly when DWARF v4 format is used (patch by Adam McNeeney)
* (issue-645) heap profiler exit message now includes remaining memory
allocated info (patch by user yurivict)
* pprof code that finds location of /proc/<pid>/maps in cpu profile
files is now fixed (patch by Ricardo M. Correia)
* (issue-654) pprof now handles "split text segments" feature of
Chromium for Android. (patch by simonb)
* (issue-655) potential deadlock on windows caused by early call to
getenv in malloc initialization code was fixed (bug reported and fix
proposed by user zndmitry)
* incorrect detection of arm 6zk instruction set support
(-mcpu=arm1176jzf-s) was fixed. (Reported by pedronavf on old
issue-493)
* new cpu profiling mode on Linux is now implemented. It sets up
separate profiling timers for separate threads. Which improves
accuracy of profiling on Linux a lot. It is off by default. And is
enabled if both librt.f is loaded and CPUPROFILE_PER_THREAD_TIMERS
environment variable is set. But note that all threads need to be
registered via ProfilerRegisterThread.
== 21 Jun 2014 ==
gperftools 2.2.1 is out!
Here's list of fixes:
* issue-626 was closed. Which fixes initialization statically linked
tcmalloc.
* issue 628 was closed. It adds missing header file into source
tarball. This fixes for compilation on PPC Linux.
== 3 May 2014 ==
gperftools 2.2 is out!
Here are notable changes since 2.2rc:
* issue 620 (crash on windows when c runtime dll is reloaded) was
fixed
== 19 Apr 2014 ==
gperftools 2.2rc is out!
Here are notable changes since 2.1:
* a number of fixes for a number compilers and platforms. Notably
Visual Studio 2013, recent mingw with c++ threads and some OSX
fixes.
* we now have mips and mips64 support! (courtesy of Jovan Zelincevic,
Jean Lee, user xiaoyur347 and others)
* we now have aarch64 (aka arm64) support! (contributed by Riku
Voipio)
* there's now support for ppc64-le (by Raphael Moreira Zinsly and
Adhemerval Zanella)
* there's now some support of uclibc (contributed by user xiaoyur347)
* google/ headers will now give you deprecation warning. They are
deprecated since 2.0
* there's now new api: tc_malloc_skip_new_handler (ported from chromium
fork)
* issue-557: added support for dumping heap profile via signal (by
Jean Lee)
* issue-567: Petr Hosek contributed SysAllocator support for windows
* Joonsoo Kim contributed several speedups for central freelist code
* TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES environment variable now works
* configure scripts are now using AM_MAINTAINER_MODE. It'll only
affect folks who modify source from .tar.gz and want automake to
automatically rebuild Makefile-s. See automake documentation for
that.
* issue-586: detect main executable even if PIE is active (based on
patch by user themastermind1). Notably, it fixes profiler use with
ruby.
* there is now support for switching backtrace capturing method at
runtime (via TCMALLOC_STACKTRACE_METHOD and
TCMALLOC_STACKTRACE_METHOD_VERBOSE environment variables)
* there is new backtrace capturing method using -finstrument-functions
prologues contributed by user xiaoyur347
* few cases of crashes/deadlocks in profiler were addressed. See
(famous) issue-66, issue-547 and issue-579.
* issue-464 (memory corruption in debugalloc's realloc after
memallign) is now fixed
* tcmalloc is now able to release memory back to OS on windows
(issue-489). The code was ported from chromium fork (by a number of
authors).
* Together with issue-489 we ported chromium's "aggressive decommit"
mode. In this mode (settable via malloc extension and via
environment variable TCMALLOC_AGGRESSIVE_DECOMMIT), free pages are
returned back to OS immediately.
* MallocExtension::instance() is now faster (based on patch by
Adhemerval Zanella)
* issue-610 (hangs on windows in multibyte locales) is now fixed
The following people helped with ideas or patches (based on git log,
some contributions purely in bugtracker might be missing): Andrew
C. Morrow, yurivict, Wang YanQing, Thomas Klausner,
davide.italiano@10gen.com, Dai MIKURUBE, Joon-Sung Um, Jovan
Zelincevic, Jean Lee, Petr Hosek, Ben Avison, drussel, Joonsoo Kim,
Hannes Weisbach, xiaoyur347, Riku Voipio, Adhemerval Zanella, Raphael
Moreira Zinsly
== 30 July 2013 ==
gperftools 2.1 is out!
Just few fixes where merged after rc. Most notably:
* Some fixes for debug allocation on POWER/Linux
== 20 July 2013 ==
gperftools 2.1rc is out!
As a result of more than a year of contributions we're ready for 2.1
release.
But before making that step I'd like to create RC and make sure people
have chance to test it.
Here are notable changes since 2.0:
* fixes for building on newer platforms. Notably, there's now initial
support for x32 ABI (--enable-minimal only at this time))
* new getNumericProperty stats for cache sizes
* added HEAP_PROFILER_TIME_INTERVAL variable (see documentation)
* added environment variable to control heap size (TCMALLOC_HEAP_LIMIT_MB)
* added environment variable to disable release of memory back to OS
(TCMALLOC_DISABLE_MEMORY_RELEASE)
* cpu profiler can now be switched on and off by sending it a signal
(specified in CPUPROFILESIGNAL)
* (issue 491) fixed race-ful spinlock wake-ups
* (issue 496) added some support for fork-ing of process that is using
tcmalloc
* (issue 368) improved memory fragmentation when large chunks of
memory are allocated/freed
== 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://gperftools.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!
|