NEWS 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004
  1. == 29 Apr 2018 ==
  2. gperftools 2.7 is out!
  3. Few people contributed minor, but important fixes since rc.
  4. Changes:
  5. * bug in span stats printing introduced by new scalable page heap
  6. change was fixed.
  7. * Christoph Müllner has contributed couple warnings fixes and initial
  8. support for aarch64_ilp32 architecture.
  9. * Ben Dang contributed documentation fix for heap checker.
  10. * Fabrice Fontaine contributed fixed for linking benchmarks with
  11. --disable-static.
  12. * Holy Wu has added sized deallocation unit tests.
  13. * Holy Wu has enabled support of sized deallocation (c++14) on recent
  14. MSVC.
  15. * Holy Wu has fixed MSVC build in WIN32_OVERRIDE_ALLOCATORS mode. This
  16. closed issue #716.
  17. * Holy Wu has contributed cleanup of config.h used on windows.
  18. * Mao Huang has contributed couple simple tcmalloc changes from
  19. chromium code base. Making our tcmalloc forks a tiny bit closer.
  20. * issue #946 that caused compilation failures on some Linux clang
  21. installations has been fixed. Much thanks to github user htuch for
  22. helping to diagnose issue and proposing a fix.
  23. * Tulio Magno Quites Machado Filho has contributed build-time fix for
  24. PPC (for problem introduced in one of commits since RC).
  25. == 18 Mar 2018 ==
  26. gperftools 2.7rc is out!
  27. Changes:
  28. * Most notable change in this release is that very large allocations
  29. (>1MiB) are now handled be O(log n) implementation. This is
  30. contributed by Todd Lipcon based on earlier work by Aliaksei
  31. Kandratsenka and James Golick. Special thanks to Alexey Serbin for
  32. contributing OSX fix for that commit.
  33. * detection of sized deallocation support is improved. Which should
  34. fix another set of issues building on OSX. Much thanks to Alexey
  35. Serbin for reporting the issue, suggesting a fix and verifying it.
  36. * Todd Lipcon made a change to extend page heaps freelists to 1 MiB
  37. (up from 1MiB - 8KiB). This may help a little for some workloads.
  38. * Ishan Arora contributed typo fix to docs
  39. == 9 Dec 2017 ==
  40. gperftools 2.6.3 is out!
  41. Just two fixes were made in this release:
  42. * Stephan Zuercher has contributed a build fix for some recent XCode
  43. versions. See issue #942 for more details.
  44. * assertion failure on some windows builds introduced by 2.6.2 was
  45. fixed. Thanks to github user nkeemik for reporting it and testing
  46. fix. See issue #944 for more details.
  47. == 30 Nov 2017 ==
  48. gperftools 2.6.2 is out!
  49. Most notable change is recently added support for C++17 over-aligned
  50. allocation operators contributed by Andrey Semashev. I've extended his
  51. implemention to have roughly same performance as malloc/new. This
  52. release also has native support for C11 aligned_alloc.
  53. Rest is mostly bug fixes:
  54. * Jianbo Yang has contributed a fix for potentially severe data race
  55. introduced by malloc fast-path work in gperftools 2.6. This race
  56. could cause occasional violation of total thread cache size
  57. constraint. See issue #929 for more details.
  58. * Correct behavior in out-of-memory condition in fast-path cases was
  59. restored. This was another bug introduced by fast-path optimization
  60. in gperftools 2.6 which caused operator new to silently return NULL
  61. instead of doing correct C++ OOM handling (calling new_handler and
  62. throwing bad_alloc).
  63. * Khem Raj has contributed couple build fixes for newer glibcs (ucontext_t vs
  64. struct ucontext and loff_t definition)
  65. * Piotr Sikora has contributed build fix for OSX (not building unwind
  66. benchmark). This was issue #910 (thanks to Yuriy Solovyov for
  67. reporting it).
  68. * Dorin Lazăr has contributed fix for compiler warning
  69. * issue #912 (occasional deadlocking calling getenv too early on
  70. windows) was fixed. Thanks to github user shangcangriluo for
  71. reporting it.
  72. * Couple earlier lsan-related commits still causing occasional issues
  73. linking on OSX has been reverted. See issue #901.
  74. * Volodimir Krylov has contributed GetProgramInvocationName for FreeBSD
  75. * changsu lee has contributed couple minor correctness fixes (missing
  76. va_end() and missing free() call in rarely executed Symbolize path)
  77. * Andrew C. Morrow has contributed some more page heap stats. See issue
  78. #935.
  79. * some cases of built-time warnings from various gcc/clang versions
  80. about throw() declarations have been fixes.
  81. == 9 July 2017 ==
  82. gperftools 2.6.1 is out! This is mostly bug-fixes release.
  83. * issue #901: build issue on OSX introduced in last-time commit in 2.6
  84. was fixed (contributed by Francis Ricci)
  85. * tcmalloc_minimal now works on 32-bit ABI of mips64. This is issue
  86. #845. Much thanks to Adhemerval Zanella and github user mtone.
  87. * Romain Geissler contributed build fix for -std=c++17. This is pull
  88. request #897.
  89. * As part of fixing issue #904, tcmalloc atfork handler is now
  90. installed early. This should fix slight chance of hitting deadlocks
  91. at fork in some cases.
  92. == 4 July 2017 ==
  93. gperftools 2.6 is out!
  94. * Kim Gräsman contributed documentation update for HEAPPROFILESIGNAL
  95. environment variable
  96. * KernelMaker contributed fix for population of min_object_size field
  97. returned by MallocExtension::GetFreeListSizes
  98. * commit 8c3dc52fcfe0 "issue-654: [pprof] handle split text segments"
  99. was reverted. Some OSX users reported issues with this commit. Given
  100. our pprof implementation is strongly deprecated it is best to drop
  101. recently introduced features rather than breaking it badly.
  102. * Francis Ricci contributed improvement for interaction with leak
  103. sanitizer.
  104. == 22 May 2017 ==
  105. gperftools 2.6rc4 is out!
  106. Dynamic sized delete is disabled by default again. There is no hope of
  107. it working with eager dynamic symbols resolution (-z now linker
  108. flag). More details in
  109. https://bugzilla.redhat.com/show_bug.cgi?id=1452813
  110. == 21 May 2017 ==
  111. gperftools 2.6rc3 is out!
  112. gperftools compilation on older systems (e.g. rhel 5) was fixed. This
  113. was originally reported in github issue #888.
  114. == 14 May 2017 ==
  115. gperftools 2.6rc2 is out!
  116. Just 2 small fixes on top of 2.6rc. Particularly, Rajalakshmi
  117. Srinivasaraghavan contributed build fix for ppc32.
  118. == 14 May 2017 ==
  119. gperftools 2.6rc is out!
  120. Highlights of this release are performance work on malloc fast-path
  121. and support for more modern visual studio runtimes, and deprecation of
  122. bundled pprof. Another significant performance-affecting changes are
  123. reverting central free list transfer batch size back to 32 and
  124. disabling of aggressive decommit mode by default.
  125. Note, while we still ship perl implementation of pprof, everyone is
  126. strongly advised to use golang reimplementation of pprof from
  127. https://github.com/google/pprof.
  128. Here are notable changes in more details (and see ChangeLog for full
  129. details):
  130. * a bunch of performance tweaks to tcmalloc fast-path were
  131. merged. This speeds up critical path of tcmalloc by few tens of
  132. %. Well tuned and allocation-heavy programs should see substantial
  133. performance boost (should apply to all modern elf platforms). This
  134. is based on Google-internal tcmalloc changes for fast-path (with
  135. obvious exception of lacking per-cpu mode, of course). Original
  136. changes were made by Aliaksei Kandratsenka. And Andrew Hunter,
  137. Dmitry Vyukov and Sanjay Ghemawat contributed with reviews and
  138. discussions.
  139. * Architectures with 48 bits address space (x86-64 and aarch64) now
  140. use faster 2 level page map. This was ported from Google-internal
  141. change by Sanjay Ghemawat.
  142. * Default value of TCMALLOC_TRANSFER_NUM_OBJ was returned back to
  143. 32. Larger values have been found to hurt certain programs (but help
  144. some other benchmarks). Value can still be tweaked at run time via
  145. environment variable.
  146. * tcmalloc aggressive decommit mode is now disabled by default
  147. again. It was found to degrade performance of certain tensorflow
  148. benchmarks. Users who prefer smaller heap over small performance win
  149. can still set environment variable TCMALLOC_AGGRESSIVE_DECOMMIT=t.
  150. * runtime switchable sized delete support has be fixed and re-enabled
  151. (on GNU/Linux). Programs that use C++ 14 or later that use sized
  152. delete can again be sped up by setting environment variable
  153. TCMALLOC_ENABLE_SIZED_DELETE=t. Support for enabling sized
  154. deallication support at compile-time is still present, of course.
  155. * tcmalloc now explicitly avoids use of MADV_FREE on Linux, unless
  156. TCMALLOC_USE_MADV_FREE is defined at compile time. This is because
  157. performance impact of MADV_FREE is not well known. Original issue
  158. #780 raised by Mathias Stearn.
  159. * issue #786 with occasional deadlocks in stack trace capturing via
  160. libunwind was fixed. It was originally reported as Ceph issue:
  161. http://tracker.ceph.com/issues/13522
  162. * ChangeLog is now automatically generated from git log. Old ChangeLog
  163. is now ChangeLog.old.
  164. * tcmalloc now provides implementation of nallocx. Function was
  165. originally introduced by jemalloc and can be used to return real
  166. allocation size given allocation request size. This is ported from
  167. Google-internal tcmalloc change contributed by Dmitry Vyukov.
  168. * issue #843 which made tcmalloc crash when used with erlang runtime
  169. was fixed.
  170. * issue #839 which caused tcmalloc's aggressive decommit mode to
  171. degrade performance in some corner cases was fixed.
  172. * Bryan Chan contributed support for 31-bit s390.
  173. * Brian Silverman contributed compilation fix for 32-bit ARMs
  174. * Issue #817 that was causing tcmalloc to fail on windows 10 and
  175. later, as well as on recent msvc was fixed. We now patch _free_base
  176. as well.
  177. * a bunch of minor documentaion/typos fixes by: Mike Gaffney
  178. <[email protected]>, iivlev <[email protected]>, savefromgoogle
  179. <[email protected]>, John McDole
  180. <[email protected]>, zmertens <[email protected]>, Kirill Müller
  181. <[email protected]>, Eugene <[email protected]>, Ola Olsson
  182. <[email protected]>, Mostyn Bramley-Moore <[email protected]>
  183. * Tulio Magno Quites Machado Filho has contributed removal of
  184. deprecated glibc malloc hooks.
  185. * Issue #827 that caused intercepting malloc on osx 10.12 to fail was
  186. fixed, by copying fix made by Mike Hommey to jemalloc. Much thanks
  187. to Koichi Shiraishi and David Ribeiro Alves for reporting it and
  188. testing fix.
  189. * Aman Gupta and Kenton Varda contributed minor fixes to pprof (but
  190. note again that pprof is deprecated)
  191. * Ryan Macnak contributed compilation fix for aarch64
  192. * Francis Ricci has fixed unaligned memory access in debug allocator
  193. * TCMALLOC_PAGE_FENCE_NEVER_RECLAIM now actually works thanks to
  194. contribution by Andrew Morrow.
  195. == 12 Mar 2016 ==
  196. gperftools 2.5 is out!
  197. Just single bugfix was merged after rc2. Which was fix for issue #777.
  198. == 5 Mar 2016 ==
  199. gperftools 2.5rc2 is out!
  200. New release contains just few commits on top of first release
  201. candidate. One of them is build fix for Visual Studio. Another
  202. significant change is that dynamic sized delete is now disabled by
  203. default. It turned out that IFUNC relocations are not supporting our
  204. advanced use case on all platforms and in all cases.
  205. == 21 Feb 2016 ==
  206. gperftools 2.5rc is out!
  207. Here are major changes since 2.4:
  208. * we've moved to github!
  209. * Bryan Chan has contributed s390x support
  210. * stacktrace capturing via libgcc's _Unwind_Backtrace was implemented
  211. (for architectures with missing or broken libunwind).
  212. * "emergency malloc" was implemented. Which unbreaks recursive calls
  213. to malloc/free from stacktrace capturing functions (such us glib'c
  214. backtrace() or libunwind on arm). It is enabled by
  215. --enable-emergency-malloc configure flag or by default on arm when
  216. --enable-stacktrace-via-backtrace is given. It is another fix for a
  217. number common issues people had on platforms with missing or broken
  218. libunwind.
  219. * C++14 sized-deallocation is now supported (on gcc 5 and recent
  220. clangs). It is off by default and can be enabled at configure time
  221. via --enable-sized-delete. On GNU/Linux it can also be enabled at
  222. run-time by either TCMALLOC_ENABLE_SIZED_DELETE environment variable
  223. or by defining tcmalloc_sized_delete_enabled function which should
  224. return 1 to enable it.
  225. * we've lowered default value of transfer batch size to 512. Previous
  226. value (bumped up in 2.1) was too high and caused performance
  227. regression for some users. 512 should still give us performance
  228. boost for workloads that need higher transfer batch size while not
  229. penalizing other workloads too much.
  230. * Brian Silverman's patch finally stopped arming profiling timer
  231. unless profiling is started.
  232. * Andrew Morrow has contributed support for obtaining cache size of the
  233. current thread and softer idling (for use in MongoDB).
  234. * we've implemented few minor performance improvements, particularly
  235. on malloc fast-path.
  236. A number of smaller fixes were made. Many of them were contributed:
  237. * issue that caused spurious profiler_unittest.sh failures was fixed.
  238. * Jonathan Lambrechts contributed improved callgrind format support to
  239. pprof.
  240. * Matt Cross contributed better support for debug symbols in separate
  241. files to pprof.
  242. * Matt Cross contributed support for printing collapsed stack frame
  243. from pprof aimed at producing flame graphs.
  244. * Angus Gratton has contributed documentation fix mentioning that on
  245. windows only tcmalloc_minimal is supported.
  246. * Anton Samokhvalov has made tcmalloc use mi_force_{un,}lock on OSX
  247. instead of pthread_atfork. Which apparently fixes forking
  248. issues tcmalloc had on OSX.
  249. * Milton Chiang has contributed support for building 32-bit gperftools
  250. on arm8.
  251. * Patrick LoPresti has contributed support for specifying alternative
  252. profiling signal via CPUPROFILE_TIMER_SIGNAL environment variable.
  253. * Paolo Bonzini has contributed support configuring filename for
  254. sending malloc tracing output via TCMALLOC_TRACE_FILE environment
  255. variable.
  256. * user spotrh has enabled use of futex on arm.
  257. * user mitchblank has contributed better declaration for arg-less
  258. profiler functions.
  259. * Tom Conerly contributed proper freeing of memory allocated in
  260. HeapProfileTable::FillOrderedProfile on error paths.
  261. * user fdeweerdt has contributed curl arguments handling fix in pprof
  262. * Frederik Mellbin fixed tcmalloc's idea of mangled new and delete
  263. symbols on windows x64
  264. * Dair Grant has contributed cacheline alignment for ThreadCache
  265. objects
  266. * Fredrik Mellbin has contributed updated windows/config.h for Visual
  267. Studio 2015 and other windows fixes.
  268. * we're not linking libpthread to libtcmalloc_minimal anymore. Instead
  269. libtcmalloc_minimal links to pthread symbols weakly. As a result
  270. single-threaded programs remain single-threaded when linking to or
  271. preloading libtcmalloc_minimal.so.
  272. * Boris Sazonov has contributed mips compilation fix and printf misue
  273. in pprof.
  274. * Adhemerval Zanella has contributed alignment fixes for statically
  275. allocated variables.
  276. * Jens Rosenboom has contributed fixes for heap-profiler_unittest.sh
  277. * gshirishfree has contributed better description for GetStats method.
  278. * cyshi has contributed spinlock pause fix.
  279. * Chris Mayo has contributed --docdir argument support for configure.
  280. * Duncan Sands has contributed fix for function aliases.
  281. * Simon Que contributed better include for malloc_hook_c.h
  282. * user wmamrak contributed struct timespec fix for Visual Studio 2015.
  283. * user ssubotin contributed typo in PrintAvailability code.
  284. == 10 Jan 2015 ==
  285. gperftools 2.4 is out! The code is exactly same as 2.4rc.
  286. == 28 Dec 2014 ==
  287. gperftools 2.4rc is out!
  288. Here are changes since 2.3:
  289. * enabled aggressive decommit option by default. It was found to
  290. significantly improve memory fragmentation with negligible impact on
  291. performance. (Thanks to investigation work performed by Adhemerval
  292. Zanella)
  293. * added ./configure flags for tcmalloc pagesize and tcmalloc
  294. allocation alignment. Larger page sizes have been reported to
  295. improve performance occasionally. (Patch by Raphael Moreira Zinsly)
  296. * sped-up hot-path of malloc/free. By about 5% on static library and
  297. about 10% on shared library. Mainly due to more efficient checking
  298. of malloc hooks.
  299. * improved stacktrace capturing in cpu profiler (due to issue found by
  300. Arun Sharma). As part of that issue pprof's handling of cpu profiles
  301. was also improved.
  302. == 7 Dec 2014 ==
  303. gperftools 2.3 is out!
  304. Here are changes since 2.3rc:
  305. * (issue 658) correctly close socketpair fds on failure (patch by glider)
  306. * libunwind integration can be disabled at configure time (patch by
  307. Raphael Moreira Zinsly)
  308. * libunwind integration is disabled by default for ppc64 (patch by
  309. Raphael Moreira Zinsly)
  310. * libunwind integration is force-disabled for OSX. It was not used by
  311. default anyways. Fixes compilation issue I saw.
  312. == 2 Nov 2014 ==
  313. gperftools 2.3rc is out!
  314. Most small improvements in this release were made to pprof tool.
  315. New experimental Linux-only (for now) cpu profiling mode is a notable
  316. big improvement.
  317. Here are notable changes since 2.2.1:
  318. * (issue-631) fixed debugallocation miscompilation on mmap-less
  319. platforms (courtesy of user iamxujian)
  320. * (issue-630) reference to wrong PROFILE (vs. correct CPUPROFILE)
  321. environment variable was fixed (courtesy of WenSheng He)
  322. * pprof now has option to display stack traces in output for heap
  323. checker (courtesy of Michael Pasieka)
  324. * (issue-636) pprof web command now works on mingw
  325. * (issue-635) pprof now handles library paths that contain spaces
  326. (courtesy of user [email protected])
  327. * (issue-637) pprof now has an option to not strip template arguments
  328. (patch by jiakai)
  329. * (issue-644) possible out-of-bounds access in GetenvBeforeMain was
  330. fixed (thanks to user abyss.7)
  331. * (issue-641) pprof now has an option --show_addresses (thanks to user
  332. yurivict). New option prints instruction address in addition to
  333. function name in stack traces
  334. * (issue-646) pprof now works around some issues of addr2line
  335. reportedly when DWARF v4 format is used (patch by Adam McNeeney)
  336. * (issue-645) heap profiler exit message now includes remaining memory
  337. allocated info (patch by user yurivict)
  338. * pprof code that finds location of /proc/<pid>/maps in cpu profile
  339. files is now fixed (patch by Ricardo M. Correia)
  340. * (issue-654) pprof now handles "split text segments" feature of
  341. Chromium for Android. (patch by simonb)
  342. * (issue-655) potential deadlock on windows caused by early call to
  343. getenv in malloc initialization code was fixed (bug reported and fix
  344. proposed by user zndmitry)
  345. * incorrect detection of arm 6zk instruction set support
  346. (-mcpu=arm1176jzf-s) was fixed. (Reported by pedronavf on old
  347. issue-493)
  348. * new cpu profiling mode on Linux is now implemented. It sets up
  349. separate profiling timers for separate threads. Which improves
  350. accuracy of profiling on Linux a lot. It is off by default. And is
  351. enabled if both librt.f is loaded and CPUPROFILE_PER_THREAD_TIMERS
  352. environment variable is set. But note that all threads need to be
  353. registered via ProfilerRegisterThread.
  354. == 21 Jun 2014 ==
  355. gperftools 2.2.1 is out!
  356. Here's list of fixes:
  357. * issue-626 was closed. Which fixes initialization statically linked
  358. tcmalloc.
  359. * issue 628 was closed. It adds missing header file into source
  360. tarball. This fixes for compilation on PPC Linux.
  361. == 3 May 2014 ==
  362. gperftools 2.2 is out!
  363. Here are notable changes since 2.2rc:
  364. * issue 620 (crash on windows when c runtime dll is reloaded) was
  365. fixed
  366. == 19 Apr 2014 ==
  367. gperftools 2.2rc is out!
  368. Here are notable changes since 2.1:
  369. * a number of fixes for a number compilers and platforms. Notably
  370. Visual Studio 2013, recent mingw with c++ threads and some OSX
  371. fixes.
  372. * we now have mips and mips64 support! (courtesy of Jovan Zelincevic,
  373. Jean Lee, user xiaoyur347 and others)
  374. * we now have aarch64 (aka arm64) support! (contributed by Riku
  375. Voipio)
  376. * there's now support for ppc64-le (by Raphael Moreira Zinsly and
  377. Adhemerval Zanella)
  378. * there's now some support of uclibc (contributed by user xiaoyur347)
  379. * google/ headers will now give you deprecation warning. They are
  380. deprecated since 2.0
  381. * there's now new api: tc_malloc_skip_new_handler (ported from chromium
  382. fork)
  383. * issue-557: added support for dumping heap profile via signal (by
  384. Jean Lee)
  385. * issue-567: Petr Hosek contributed SysAllocator support for windows
  386. * Joonsoo Kim contributed several speedups for central freelist code
  387. * TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES environment variable now works
  388. * configure scripts are now using AM_MAINTAINER_MODE. It'll only
  389. affect folks who modify source from .tar.gz and want automake to
  390. automatically rebuild Makefile-s. See automake documentation for
  391. that.
  392. * issue-586: detect main executable even if PIE is active (based on
  393. patch by user themastermind1). Notably, it fixes profiler use with
  394. ruby.
  395. * there is now support for switching backtrace capturing method at
  396. runtime (via TCMALLOC_STACKTRACE_METHOD and
  397. TCMALLOC_STACKTRACE_METHOD_VERBOSE environment variables)
  398. * there is new backtrace capturing method using -finstrument-functions
  399. prologues contributed by user xiaoyur347
  400. * few cases of crashes/deadlocks in profiler were addressed. See
  401. (famous) issue-66, issue-547 and issue-579.
  402. * issue-464 (memory corruption in debugalloc's realloc after
  403. memallign) is now fixed
  404. * tcmalloc is now able to release memory back to OS on windows
  405. (issue-489). The code was ported from chromium fork (by a number of
  406. authors).
  407. * Together with issue-489 we ported chromium's "aggressive decommit"
  408. mode. In this mode (settable via malloc extension and via
  409. environment variable TCMALLOC_AGGRESSIVE_DECOMMIT), free pages are
  410. returned back to OS immediately.
  411. * MallocExtension::instance() is now faster (based on patch by
  412. Adhemerval Zanella)
  413. * issue-610 (hangs on windows in multibyte locales) is now fixed
  414. The following people helped with ideas or patches (based on git log,
  415. some contributions purely in bugtracker might be missing): Andrew
  416. C. Morrow, yurivict, Wang YanQing, Thomas Klausner,
  417. [email protected], Dai MIKURUBE, Joon-Sung Um, Jovan
  418. Zelincevic, Jean Lee, Petr Hosek, Ben Avison, drussel, Joonsoo Kim,
  419. Hannes Weisbach, xiaoyur347, Riku Voipio, Adhemerval Zanella, Raphael
  420. Moreira Zinsly
  421. == 30 July 2013 ==
  422. gperftools 2.1 is out!
  423. Just few fixes where merged after rc. Most notably:
  424. * Some fixes for debug allocation on POWER/Linux
  425. == 20 July 2013 ==
  426. gperftools 2.1rc is out!
  427. As a result of more than a year of contributions we're ready for 2.1
  428. release.
  429. But before making that step I'd like to create RC and make sure people
  430. have chance to test it.
  431. Here are notable changes since 2.0:
  432. * fixes for building on newer platforms. Notably, there's now initial
  433. support for x32 ABI (--enable-minimal only at this time))
  434. * new getNumericProperty stats for cache sizes
  435. * added HEAP_PROFILER_TIME_INTERVAL variable (see documentation)
  436. * added environment variable to control heap size (TCMALLOC_HEAP_LIMIT_MB)
  437. * added environment variable to disable release of memory back to OS
  438. (TCMALLOC_DISABLE_MEMORY_RELEASE)
  439. * cpu profiler can now be switched on and off by sending it a signal
  440. (specified in CPUPROFILESIGNAL)
  441. * (issue 491) fixed race-ful spinlock wake-ups
  442. * (issue 496) added some support for fork-ing of process that is using
  443. tcmalloc
  444. * (issue 368) improved memory fragmentation when large chunks of
  445. memory are allocated/freed
  446. == 03 February 2012 ==
  447. I've just released gperftools 2.0
  448. The `google-perftools` project has been renamed to `gperftools`. I
  449. (csilvers) am stepping down as maintainer, to be replaced by
  450. David Chappelle. Welcome to the team, David! David has been an
  451. an active contributor to perftools in the past -- in fact, he's the
  452. only person other than me that already has commit status. I am
  453. pleased to have him take over as maintainer.
  454. I have both renamed the project (the Google Code site renamed a few
  455. weeks ago), and bumped the major version number up to 2, to reflect
  456. the new community ownership of the project. Almost all the
  457. [http://gperftools.googlecode.com/svn/tags/gperftools-2.0/ChangeLog changes]
  458. are related to the renaming.
  459. The main functional change from google-perftools 1.10 is that
  460. I've renamed the `google/` include-directory to be `gperftools/`
  461. instead. New code should `#include <gperftools/tcmalloc.h>`/etc.
  462. (Most users of perftools don't need any perftools-specific includes at
  463. all, so this is mostly directed to "power users.") I've kept the old
  464. names around as forwarding headers to the new, so `#include
  465. <google/tcmalloc.h>` will continue to work.
  466. (The other functional change which I snuck in is getting rid of some
  467. bash-isms in one of the unittest driver scripts, so it could run on
  468. Solaris.)
  469. Note that some internal names still contain the text `google`, such as
  470. the `google_malloc` internal linker section. I think that's a
  471. trickier transition, and can happen in a future release (if at all).
  472. === 31 January 2012 ===
  473. I've just released perftools 1.10
  474. There is an API-incompatible change: several of the methods in the
  475. `MallocExtension` class have changed from taking a `void*` to taking a
  476. `const void*`. You should not be affected by this API change
  477. unless you've written your own custom malloc extension that derives
  478. from `MallocExtension`, but since it is a user-visible change, I have
  479. upped the `.so` version number for this release.
  480. This release focuses on improvements to linux-syscall-support.h,
  481. including ARM and PPC fixups and general cleanups. I hope this will
  482. magically fix an array of bugs people have been seeing.
  483. There is also exciting news on the porting front, with support for
  484. patching win64 assembly contributed by IBM Canada! This is an
  485. important step -- perhaps the most difficult -- to getting perftools
  486. to work on 64-bit windows using the patching technique (it doesn't
  487. affect the libc-modification technique). `premable_patcher_test` has
  488. been added to help test these changes; it is meant to compile under
  489. x86_64, and won't work under win32.
  490. For the full list of changes, including improved `HEAP_PROFILE_MMAP`
  491. support, see the
  492. [http://gperftools.googlecode.com/svn/tags/google-perftools-1.10/ChangeLog ChangeLog].
  493. === 24 January 2011 ===
  494. The `google-perftools` Google Code page has been renamed to
  495. `gperftools`, in preparation for the project being renamed to
  496. `gperftools`. In the coming weeks, I'll be stepping down as
  497. maintainer for the perftools project, and as part of that Google is
  498. relinquishing ownership of the project; it will now be entirely
  499. community run. The name change reflects that shift. The 'g' in
  500. 'gperftools' stands for 'great'. :-)
  501. === 23 December 2011 ===
  502. I've just released perftools 1.9.1
  503. I missed including a file in the tarball, that is needed to compile on
  504. ARM. If you are not compiling on ARM, or have successfully compiled
  505. perftools 1.9, there is no need to upgrade.
  506. === 22 December 2011 ===
  507. I've just released perftools 1.9
  508. This change has a slew of improvements, from better ARM and freebsd
  509. support, to improved performance by moving some code outside of locks,
  510. to better pprof reporting of code with overloaded functions.
  511. The full list of changes is in the
  512. [http://google-perftools.googlecode.com/svn/tags/google-perftools-1.9/ChangeLog ChangeLog].
  513. === 26 August 2011 ===
  514. I've just released perftools 1.8.3
  515. The star-crossed 1.8 series continues; in 1.8.1, I had accidentally
  516. removed some code that was needed for FreeBSD. (Without this code
  517. many apps would crash at startup.) This release re-adds that code.
  518. If you are not on FreeBSD, or are using FreeBSD with perftools 1.8 or
  519. earlier, there is no need to upgrade.
  520. === 11 August 2011 ===
  521. I've just released perftools 1.8.2
  522. I was incorrectly calculating the patch-level in the configuration
  523. step, meaning the TC_VERSION_PATCH #define in tcmalloc.h was wrong.
  524. Since the testing framework checks for this, it was failing. Now it
  525. should work again. This time, I was careful to re-run my tests after
  526. upping the version number. :-)
  527. If you don't care about the TC_VERSION_PATCH #define, there's no
  528. reason to upgrae.
  529. === 26 July 2011 ===
  530. I've just released perftools 1.8.1
  531. I was missing an #include that caused the build to break under some
  532. compilers, especially newer gcc's, that wanted it. This only affects
  533. people who build from source, so only the .tar.gz file is updated from
  534. perftools 1.8. If you didn't have any problems compiling perftools
  535. 1.8, there's no reason to upgrade.
  536. === 15 July 2011 ===
  537. I've just released perftools 1.8
  538. Of the many changes in this release, a good number pertain to porting.
  539. I've revamped OS X support to use the malloc-zone framework; it should
  540. now Just Work to link in tcmalloc, without needing
  541. `DYLD_FORCE_FLAT_NAMESPACE` or the like. (This is a pretty major
  542. change, so please feel free to report feedback at
  543. [email protected].) 64-bit Windows support is also
  544. improved, as is ARM support, and the hooks are in place to improve
  545. FreeBSD support as well.
  546. On the other hand, I'm seeing hanging tests on Cygwin. I see the same
  547. hanging even with (the old) perftools 1.7, so I'm guessing this is
  548. either a problem specific to my Cygwin installation, or nobody is
  549. trying to use perftools under Cygwin. If you can reproduce the
  550. problem, and even better have a solution, you can report it at
  551. [email protected].
  552. Internal changes include several performance and space-saving tweaks.
  553. One is user-visible (but in "stealth mode", and otherwise
  554. undocumented): you can compile with `-DTCMALLOC_SMALL_BUT_SLOW`. In
  555. this mode, tcmalloc will use less memory overhead, at the cost of
  556. running (likely not noticeably) slower.
  557. There are many other changes as well, too numerous to recount here,
  558. but present in the
  559. [http://google-perftools.googlecode.com/svn/tags/google-perftools-1.8/ChangeLog ChangeLog].
  560. === 7 February 2011 ===
  561. Thanks to endlessr..., who
  562. [http://code.google.com/p/google-perftools/issues/detail?id=307 identified]
  563. why some tests were failing under MSVC 10 in release mode. It does not look
  564. like these failures point toward any problem with tcmalloc itself; rather, the
  565. problem is with the test, which made some assumptions that broke under the
  566. some aggressive optimizations used in MSVC 10. I'll fix the test, but in
  567. the meantime, feel free to use perftools even when compiled under MSVC
  568. 10.
  569. === 4 February 2011 ===
  570. I've just released perftools 1.7
  571. I apologize for the delay since the last release; so many great new
  572. patches and bugfixes kept coming in (and are still coming in; I also
  573. apologize to those folks who have to slip until the next release). I
  574. picked this arbitrary time to make a cut.
  575. Among the many new features in this release is a multi-megabyte
  576. reduction in the amount of tcmalloc overhead uder x86_64, improved
  577. performance in the case of contention, and many many bugfixes,
  578. especially architecture-specific bugfixes. See the
  579. [http://google-perftools.googlecode.com/svn/tags/google-perftools-1.7/ChangeLog ChangeLog]
  580. for full details.
  581. One architecture-specific change of note is added comments in the
  582. [http://google-perftools.googlecode.com/svn/tags/perftools-1.7/README README]
  583. for using tcmalloc under OS X. I'm trying to get my head around the
  584. exact behavior of the OS X linker, and hope to have more improvements
  585. for the next release, but I hope these notes help folks who have been
  586. having trouble with tcmalloc on OS X.
  587. *Windows users*: I've heard reports that some unittests fail on
  588. Windows when compiled with MSVC 10 in Release mode. All tests pass in
  589. Debug mode. I've not heard of any problems with earlier versions of
  590. MSVC. I don't know if this is a problem with the runtime patching (so
  591. the static patching discussed in README_windows.txt will still work),
  592. a problem with perftools more generally, or a bug in MSVC 10. Anyone
  593. with windows expertise that can debug this, I'd be glad to hear from!
  594. === 5 August 2010 ===
  595. I've just released perftools 1.6
  596. This version also has a large number of minor changes, including
  597. support for `malloc_usable_size()` as a glibc-compatible alias to
  598. `malloc_size()`, the addition of SVG-based output to `pprof`, and
  599. experimental support for tcmalloc large pages, which may speed up
  600. tcmalloc at the cost of greater memory use. To use tcmalloc large
  601. pages, see the
  602. [http://google-perftools.googlecode.com/svn/tags/perftools-1.6/INSTALL
  603. INSTALL file]; for all changes, see the
  604. [http://google-perftools.googlecode.com/svn/tags/perftools-1.6/ChangeLog
  605. ChangeLog].
  606. OS X NOTE: improvements in the profiler unittest have turned up an OS
  607. X issue: in multithreaded programs, it seems that OS X often delivers
  608. the profiling signal (from sigitimer()) to the main thread, even when
  609. it's sleeping, rather than spawned threads that are doing actual work.
  610. If anyone knows details of how OS X handles SIGPROF events (from
  611. setitimer) in threaded programs, and has insight into this problem,
  612. please send mail to [email protected].
  613. To see if you're affected by this, look for profiling time that pprof
  614. attributes to `___semwait_signal`. This is work being done in other
  615. threads, that is being attributed to sleeping-time in the main thread.
  616. === 20 January 2010 ===
  617. I've just released perftools 1.5
  618. This version has a slew of changes, leading to somewhat faster
  619. performance and improvements in portability. It adds features like
  620. `ITIMER_REAL` support to the cpu profiler, and `tc_set_new_mode` to
  621. mimic the windows function of the same name. Full details are in the
  622. [http://google-perftools.googlecode.com/svn/tags/perftools-1.5/ChangeLog
  623. ChangeLog].
  624. === 11 September 2009 ===
  625. I've just released perftools 1.4
  626. The major change this release is the addition of a debugging malloc
  627. library! If you link with `libtcmalloc_debug.so` instead of
  628. `libtcmalloc.so` (and likewise for the `minimal` variants) you'll get
  629. a debugging malloc, which will catch double-frees, writes to freed
  630. data, `free`/`delete` and `delete`/`delete[]` mismatches, and even
  631. (optionally) writes past the end of an allocated block.
  632. We plan to do more with this library in the future, including
  633. supporting it on Windows, and adding the ability to use the debugging
  634. library with your default malloc in addition to using it with
  635. tcmalloc.
  636. There are also the usual complement of bug fixes, documented in the
  637. ChangeLog, and a few minor user-tunable knobs added to components like
  638. the system allocator.
  639. === 9 June 2009 ===
  640. I've just released perftools 1.3
  641. Like 1.2, this has a variety of bug fixes, especially related to the
  642. Windows build. One of my bugfixes is to undo the weird `ld -r` fix to
  643. `.a` files that I introduced in perftools 1.2: it caused problems on
  644. too many platforms. I've reverted back to normal `.a` files. To work
  645. around the original problem that prompted the `ld -r` fix, I now
  646. provide `libtcmalloc_and_profiler.a`, for folks who want to link in
  647. both.
  648. The most interesting API change is that I now not only override
  649. `malloc`/`free`/etc, I also expose them via a unique set of symbols:
  650. `tc_malloc`/`tc_free`/etc. This enables clients to write their own
  651. memory wrappers that use tcmalloc:
  652. {{{
  653. void* malloc(size_t size) { void* r = tc_malloc(size); Log(r); return r; }
  654. }}}
  655. === 17 April 2009 ===
  656. I've just released perftools 1.2.
  657. This is mostly a bugfix release. The major change is internal: I have
  658. a new system for creating packages, which allows me to create 64-bit
  659. packages. (I still don't do that for perftools, because there is
  660. still no great 64-bit solution, with libunwind still giving problems
  661. and --disable-frame-pointers not practical in every environment.)
  662. Another interesting change involves Windows: a
  663. [http://code.google.com/p/google-perftools/issues/detail?id=126 new
  664. patch] allows users to choose to override malloc/free/etc on Windows
  665. rather than patching, as is done now. This can be used to create
  666. custom CRTs.
  667. My fix for this
  668. [http://groups.google.com/group/google-perftools/browse_thread/thread/1ff9b50043090d9d/a59210c4206f2060?lnk=gst&q=dynamic#a59210c4206f2060
  669. bug involving static linking] ended up being to make libtcmalloc.a and
  670. libperftools.a a big .o file, rather than a true `ar` archive. This
  671. should not yield any problems in practice -- in fact, it should be
  672. better, since the heap profiler, leak checker, and cpu profiler will
  673. now all work even with the static libraries -- but if you find it
  674. does, please file a bug report.
  675. Finally, the profile_handler_unittest provided in the perftools
  676. testsuite (new in this release) is failing on FreeBSD. The end-to-end
  677. test that uses the profile-handler is passing, so I suspect the
  678. problem may be with the test, not the perftools code itself. However,
  679. I do not know enough about how itimers work on FreeBSD to be able to
  680. debug it. If you can figure it out, please let me know!
  681. === 11 March 2009 ===
  682. I've just released perftools 1.1!
  683. It has many changes since perftools 1.0 including
  684. * Faster performance due to dynamically sized thread caches
  685. * Better heap-sampling for more realistic profiles
  686. * Improved support on Windows (MSVC 7.1 and cygwin)
  687. * Better stacktraces in linux (using VDSO)
  688. * Many bug fixes and feature requests
  689. Note: if you use the CPU-profiler with applications that fork without
  690. doing an exec right afterwards, please see the README. Recent testing
  691. has shown that profiles are unreliable in that case. The problem has
  692. existed since the first release of perftools. We expect to have a fix
  693. for perftools 1.2. For more details, see
  694. [http://code.google.com/p/google-perftools/issues/detail?id=105 issue 105].
  695. Everyone who uses perftools 1.0 is encouraged to upgrade to perftools
  696. 1.1. If you see any problems with the new release, please file a bug
  697. report at http://code.google.com/p/google-perftools/issues/list.
  698. Enjoy!