forked from gperftools/gperftools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NEWS
1545 lines (1079 loc) · 56.3 KB
/
NEWS
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
== 25 September 2024
gperftools 2.16 is out!
Only minor fixes have been made since RC release. See NEWS entry for
RC release for actual set of changes.
== 16 September 2024
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
== 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
<[email protected]>, iivlev <[email protected]>, savefromgoogle
<[email protected]>, John McDole
<[email protected]>, zmertens <[email protected]>, Kirill Müller
<[email protected]>, Eugene <[email protected]>, Ola Olsson
<[email protected]>, Mostyn Bramley-Moore <[email protected]>
* 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.