1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618 |
- Following are change highlights associated with official releases. Important
- bug fixes are all mentioned, but some internal enhancements are omitted here for
- brevity. Much more detail can be found in the git revision history:
- https://github.com/jemalloc/jemalloc
- * 5.3.0 (May 6, 2022)
- This release contains many speed and space optimizations, from micro
- optimizations on common paths to rework of internal data structures and
- locking schemes, and many more too detailed to list below. Multiple percent
- of system level metric improvements were measured in tested production
- workloads. The release has gone through large-scale production testing.
- New features:
- - Add the thread.idle mallctl which hints that the calling thread will be
- idle for a nontrivial period of time. (@davidtgoldblatt)
- - Allow small size classes to be the maximum size class to cache in the
- thread-specific cache, through the opt.[lg_]tcache_max option. (@interwq,
- @jordalgo)
- - Make the behavior of realloc(ptr, 0) configurable with opt.zero_realloc.
- (@davidtgoldblatt)
- - Add 'make uninstall' support. (@sangshuduo, @Lapenkov)
- - Support C++17 over-aligned allocation. (@marksantaniello)
- - Add the thread.peak mallctl for approximate per-thread peak memory tracking.
- (@davidtgoldblatt)
- - Add interval-based stats output opt.stats_interval. (@interwq)
- - Add prof.prefix to override filename prefixes for dumps. (@zhxchen17)
- - Add high resolution timestamp support for profiling. (@tyroguru)
- - Add the --collapsed flag to jeprof for flamegraph generation.
- (@igorwwwwwwwwwwwwwwwwwwww)
- - Add the --debug-syms-by-id option to jeprof for debug symbols discovery.
- (@DeannaGelbart)
- - Add the opt.prof_leak_error option to exit with error code when leak is
- detected using opt.prof_final. (@yunxuo)
- - Add opt.cache_oblivious as an runtime alternative to config.cache_oblivious.
- (@interwq)
- - Add mallctl interfaces:
- + opt.zero_realloc (@davidtgoldblatt)
- + opt.cache_oblivious (@interwq)
- + opt.prof_leak_error (@yunxuo)
- + opt.stats_interval (@interwq)
- + opt.stats_interval_opts (@interwq)
- + opt.tcache_max (@interwq)
- + opt.trust_madvise (@azat)
- + prof.prefix (@zhxchen17)
- + stats.zero_reallocs (@davidtgoldblatt)
- + thread.idle (@davidtgoldblatt)
- + thread.peak.{read,reset} (@davidtgoldblatt)
- Bug fixes:
- - Fix the synchronization around explicit tcache creation which could cause
- invalid tcache identifiers. This regression was first released in 5.0.0.
- (@yoshinorim, @davidtgoldblatt)
- - Fix a profiling biasing issue which could cause incorrect heap usage and
- object counts. This issue existed in all previous releases with the heap
- profiling feature. (@davidtgoldblatt)
- - Fix the order of stats counter updating on large realloc which could cause
- failed assertions. This regression was first released in 5.0.0. (@azat)
- - Fix the locking on the arena destroy mallctl, which could cause concurrent
- arena creations to fail. This functionality was first introduced in 5.0.0.
- (@interwq)
- Portability improvements:
- - Remove nothrow from system function declarations on macOS and FreeBSD.
- (@davidtgoldblatt, @fredemmott, @leres)
- - Improve overcommit and page alignment settings on NetBSD. (@zoulasc)
- - Improve CPU affinity support on BSD platforms. (@devnexen)
- - Improve utrace detection and support. (@devnexen)
- - Improve QEMU support with MADV_DONTNEED zeroed pages detection. (@azat)
- - Add memcntl support on Solaris / illumos. (@devnexen)
- - Improve CPU_SPINWAIT on ARM. (@AWSjswinney)
- - Improve TSD cleanup on FreeBSD. (@Lapenkov)
- - Disable percpu_arena if the CPU count cannot be reliably detected. (@azat)
- - Add malloc_size(3) override support. (@devnexen)
- - Add mmap VM_MAKE_TAG support. (@devnexen)
- - Add support for MADV_[NO]CORE. (@devnexen)
- - Add support for DragonFlyBSD. (@devnexen)
- - Fix the QUANTUM setting on MIPS64. (@brooksdavis)
- - Add the QUANTUM setting for ARC. (@vineetgarc)
- - Add the QUANTUM setting for LoongArch. (@wangjl-uos)
- - Add QNX support. (@jqian-aurora)
- - Avoid atexit(3) calls unless the relevant profiling features are enabled.
- (@BusyJay, @laiwei-rice, @interwq)
- - Fix unknown option detection when using Clang. (@Lapenkov)
- - Fix symbol conflict with musl libc. (@georgthegreat)
- - Add -Wimplicit-fallthrough checks. (@nickdesaulniers)
- - Add __forceinline support on MSVC. (@santagada)
- - Improve FreeBSD and Windows CI support. (@Lapenkov)
- - Add CI support for PPC64LE architecture. (@ezeeyahoo)
- Incompatible changes:
- - Maximum size class allowed in tcache (opt.[lg_]tcache_max) now has an upper
- bound of 8MiB. (@interwq)
- Optimizations and refactors (@davidtgoldblatt, @Lapenkov, @interwq):
- - Optimize the common cases of the thread cache operations.
- - Optimize internal data structures, including RB tree and pairing heap.
- - Optimize the internal locking on extent management.
- - Extract and refactor the internal page allocator and interface modules.
- Documentation:
- - Fix doc build with --with-install-suffix. (@lawmurray, @interwq)
- - Add PROFILING_INTERNALS.md. (@davidtgoldblatt)
- - Ensure the proper order of doc building and installation. (@Mingli-Yu)
- * 5.2.1 (August 5, 2019)
- This release is primarily about Windows. A critical virtual memory leak is
- resolved on all Windows platforms. The regression was present in all releases
- since 5.0.0.
- Bug fixes:
- - Fix a severe virtual memory leak on Windows. This regression was first
- released in 5.0.0. (@Ignition, @j0t, @frederik-h, @davidtgoldblatt,
- @interwq)
- - Fix size 0 handling in posix_memalign(). This regression was first released
- in 5.2.0. (@interwq)
- - Fix the prof_log unit test which may observe unexpected backtraces from
- compiler optimizations. The test was first added in 5.2.0. (@marxin,
- @gnzlbg, @interwq)
- - Fix the declaration of the extent_avail tree. This regression was first
- released in 5.1.0. (@zoulasc)
- - Fix an incorrect reference in jeprof. This functionality was first released
- in 3.0.0. (@prehistoric-penguin)
- - Fix an assertion on the deallocation fast-path. This regression was first
- released in 5.2.0. (@yinan1048576)
- - Fix the TLS_MODEL attribute in headers. This regression was first released
- in 5.0.0. (@zoulasc, @interwq)
- Optimizations and refactors:
- - Implement opt.retain on Windows and enable by default on 64-bit. (@interwq,
- @davidtgoldblatt)
- - Optimize away a branch on the operator delete[] path. (@mgrice)
- - Add format annotation to the format generator function. (@zoulasc)
- - Refactor and improve the size class header generation. (@yinan1048576)
- - Remove best fit. (@djwatson)
- - Avoid blocking on background thread locks for stats. (@oranagra, @interwq)
- * 5.2.0 (April 2, 2019)
- This release includes a few notable improvements, which are summarized below:
- 1) improved fast-path performance from the optimizations by @djwatson; 2)
- reduced virtual memory fragmentation and metadata usage; and 3) bug fixes on
- setting the number of background threads. In addition, peak / spike memory
- usage is improved with certain allocation patterns. As usual, the release and
- prior dev versions have gone through large-scale production testing.
- New features:
- - Implement oversize_threshold, which uses a dedicated arena for allocations
- crossing the specified threshold to reduce fragmentation. (@interwq)
- - Add extents usage information to stats. (@tyleretzel)
- - Log time information for sampled allocations. (@tyleretzel)
- - Support 0 size in sdallocx. (@djwatson)
- - Output rate for certain counters in malloc_stats. (@zinoale)
- - Add configure option --enable-readlinkat, which allows the use of readlinkat
- over readlink. (@davidtgoldblatt)
- - Add configure options --{enable,disable}-{static,shared} to allow not
- building unwanted libraries. (@Ericson2314)
- - Add configure option --disable-libdl to enable fully static builds.
- (@interwq)
- - Add mallctl interfaces:
- + opt.oversize_threshold (@interwq)
- + stats.arenas.<i>.extent_avail (@tyleretzel)
- + stats.arenas.<i>.extents.<j>.n{dirty,muzzy,retained} (@tyleretzel)
- + stats.arenas.<i>.extents.<j>.{dirty,muzzy,retained}_bytes
- (@tyleretzel)
- Portability improvements:
- - Update MSVC builds. (@maksqwe, @rustyx)
- - Workaround a compiler optimizer bug on s390x. (@rkmisra)
- - Make use of pthread_set_name_np(3) on FreeBSD. (@trasz)
- - Implement malloc_getcpu() to enable percpu_arena for windows. (@santagada)
- - Link against -pthread instead of -lpthread. (@paravoid)
- - Make background_thread not dependent on libdl. (@interwq)
- - Add stringify to fix a linker directive issue on MSVC. (@daverigby)
- - Detect and fall back when 8-bit atomics are unavailable. (@interwq)
- - Fall back to the default pthread_create if dlsym(3) fails. (@interwq)
- Optimizations and refactors:
- - Refactor the TSD module. (@davidtgoldblatt)
- - Avoid taking extents_muzzy mutex when muzzy is disabled. (@interwq)
- - Avoid taking large_mtx for auto arenas on the tcache flush path. (@interwq)
- - Optimize ixalloc by avoiding a size lookup. (@interwq)
- - Implement opt.oversize_threshold which uses a dedicated arena for requests
- crossing the threshold, also eagerly purges the oversize extents. Default
- the threshold to 8 MiB. (@interwq)
- - Clean compilation with -Wextra. (@gnzlbg, @jasone)
- - Refactor the size class module. (@davidtgoldblatt)
- - Refactor the stats emitter. (@tyleretzel)
- - Optimize pow2_ceil. (@rkmisra)
- - Avoid runtime detection of lazy purging on FreeBSD. (@trasz)
- - Optimize mmap(2) alignment handling on FreeBSD. (@trasz)
- - Improve error handling for THP state initialization. (@jsteemann)
- - Rework the malloc() fast path. (@djwatson)
- - Rework the free() fast path. (@djwatson)
- - Refactor and optimize the tcache fill / flush paths. (@djwatson)
- - Optimize sync / lwsync on PowerPC. (@chmeeedalf)
- - Bypass extent_dalloc() when retain is enabled. (@interwq)
- - Optimize the locking on large deallocation. (@interwq)
- - Reduce the number of pages committed from sanity checking in debug build.
- (@trasz, @interwq)
- - Deprecate OSSpinLock. (@interwq)
- - Lower the default number of background threads to 4 (when the feature
- is enabled). (@interwq)
- - Optimize the trylock spin wait. (@djwatson)
- - Use arena index for arena-matching checks. (@interwq)
- - Avoid forced decay on thread termination when using background threads.
- (@interwq)
- - Disable muzzy decay by default. (@djwatson, @interwq)
- - Only initialize libgcc unwinder when profiling is enabled. (@paravoid,
- @interwq)
- Bug fixes (all only relevant to jemalloc 5.x):
- - Fix background thread index issues with max_background_threads. (@djwatson,
- @interwq)
- - Fix stats output for opt.lg_extent_max_active_fit. (@interwq)
- - Fix opt.prof_prefix initialization. (@davidtgoldblatt)
- - Properly trigger decay on tcache destroy. (@interwq, @amosbird)
- - Fix tcache.flush. (@interwq)
- - Detect whether explicit extent zero out is necessary with huge pages or
- custom extent hooks, which may change the purge semantics. (@interwq)
- - Fix a side effect caused by extent_max_active_fit combined with decay-based
- purging, where freed extents can accumulate and not be reused for an
- extended period of time. (@interwq, @mpghf)
- - Fix a missing unlock on extent register error handling. (@zoulasc)
- Testing:
- - Simplify the Travis script output. (@gnzlbg)
- - Update the test scripts for FreeBSD. (@devnexen)
- - Add unit tests for the producer-consumer pattern. (@interwq)
- - Add Cirrus-CI config for FreeBSD builds. (@jasone)
- - Add size-matching sanity checks on tcache flush. (@davidtgoldblatt,
- @interwq)
- Incompatible changes:
- - Remove --with-lg-page-sizes. (@davidtgoldblatt)
- Documentation:
- - Attempt to build docs by default, however skip doc building when xsltproc
- is missing. (@interwq, @cmuellner)
- * 5.1.0 (May 4, 2018)
- This release is primarily about fine-tuning, ranging from several new features
- to numerous notable performance and portability enhancements. The release and
- prior dev versions have been running in multiple large scale applications for
- months, and the cumulative improvements are substantial in many cases.
- Given the long and successful production runs, this release is likely a good
- candidate for applications to upgrade, from both jemalloc 5.0 and before. For
- performance-critical applications, the newly added TUNING.md provides
- guidelines on jemalloc tuning.
- New features:
- - Implement transparent huge page support for internal metadata. (@interwq)
- - Add opt.thp to allow enabling / disabling transparent huge pages for all
- mappings. (@interwq)
- - Add maximum background thread count option. (@djwatson)
- - Allow prof_active to control opt.lg_prof_interval and prof.gdump.
- (@interwq)
- - Allow arena index lookup based on allocation addresses via mallctl.
- (@lionkov)
- - Allow disabling initial-exec TLS model. (@davidtgoldblatt, @KenMacD)
- - Add opt.lg_extent_max_active_fit to set the max ratio between the size of
- the active extent selected (to split off from) and the size of the requested
- allocation. (@interwq, @davidtgoldblatt)
- - Add retain_grow_limit to set the max size when growing virtual address
- space. (@interwq)
- - Add mallctl interfaces:
- + arena.<i>.retain_grow_limit (@interwq)
- + arenas.lookup (@lionkov)
- + max_background_threads (@djwatson)
- + opt.lg_extent_max_active_fit (@interwq)
- + opt.max_background_threads (@djwatson)
- + opt.metadata_thp (@interwq)
- + opt.thp (@interwq)
- + stats.metadata_thp (@interwq)
- Portability improvements:
- - Support GNU/kFreeBSD configuration. (@paravoid)
- - Support m68k, nios2 and SH3 architectures. (@paravoid)
- - Fall back to FD_CLOEXEC when O_CLOEXEC is unavailable. (@zonyitoo)
- - Fix symbol listing for cross-compiling. (@tamird)
- - Fix high bits computation on ARM. (@davidtgoldblatt, @paravoid)
- - Disable the CPU_SPINWAIT macro for Power. (@davidtgoldblatt, @marxin)
- - Fix MSVC 2015 & 2017 builds. (@rustyx)
- - Improve RISC-V support. (@EdSchouten)
- - Set name mangling script in strict mode. (@nicolov)
- - Avoid MADV_HUGEPAGE on ARM. (@marxin)
- - Modify configure to determine return value of strerror_r.
- (@davidtgoldblatt, @cferris1000)
- - Make sure CXXFLAGS is tested with CPP compiler. (@nehaljwani)
- - Fix 32-bit build on MSVC. (@rustyx)
- - Fix external symbol on MSVC. (@maksqwe)
- - Avoid a printf format specifier warning. (@jasone)
- - Add configure option --disable-initial-exec-tls which can allow jemalloc to
- be dynamically loaded after program startup. (@davidtgoldblatt, @KenMacD)
- - AArch64: Add ILP32 support. (@cmuellner)
- - Add --with-lg-vaddr configure option to support cross compiling.
- (@cmuellner, @davidtgoldblatt)
- Optimizations and refactors:
- - Improve active extent fit with extent_max_active_fit. This considerably
- reduces fragmentation over time and improves virtual memory and metadata
- usage. (@davidtgoldblatt, @interwq)
- - Eagerly coalesce large extents to reduce fragmentation. (@interwq)
- - sdallocx: only read size info when page aligned (i.e. possibly sampled),
- which speeds up the sized deallocation path significantly. (@interwq)
- - Avoid attempting new mappings for in place expansion with retain, since
- it rarely succeeds in practice and causes high overhead. (@interwq)
- - Refactor OOM handling in newImpl. (@wqfish)
- - Add internal fine-grained logging functionality for debugging use.
- (@davidtgoldblatt)
- - Refactor arena / tcache interactions. (@davidtgoldblatt)
- - Refactor extent management with dumpable flag. (@davidtgoldblatt)
- - Add runtime detection of lazy purging. (@interwq)
- - Use pairing heap instead of red-black tree for extents_avail. (@djwatson)
- - Use sysctl on startup in FreeBSD. (@trasz)
- - Use thread local prng state instead of atomic. (@djwatson)
- - Make decay to always purge one more extent than before, because in
- practice large extents are usually the ones that cross the decay threshold.
- Purging the additional extent helps save memory as well as reduce VM
- fragmentation. (@interwq)
- - Fast division by dynamic values. (@davidtgoldblatt)
- - Improve the fit for aligned allocation. (@interwq, @edwinsmith)
- - Refactor extent_t bitpacking. (@rkmisra)
- - Optimize the generated assembly for ticker operations. (@davidtgoldblatt)
- - Convert stats printing to use a structured text emitter. (@davidtgoldblatt)
- - Remove preserve_lru feature for extents management. (@djwatson)
- - Consolidate two memory loads into one on the fast deallocation path.
- (@davidtgoldblatt, @interwq)
- Bug fixes (most of the issues are only relevant to jemalloc 5.0):
- - Fix deadlock with multithreaded fork in OS X. (@davidtgoldblatt)
- - Validate returned file descriptor before use. (@zonyitoo)
- - Fix a few background thread initialization and shutdown issues. (@interwq)
- - Fix an extent coalesce + decay race by taking both coalescing extents off
- the LRU list. (@interwq)
- - Fix potentially unbound increase during decay, caused by one thread keep
- stashing memory to purge while other threads generating new pages. The
- number of pages to purge is checked to prevent this. (@interwq)
- - Fix a FreeBSD bootstrap assertion. (@strejda, @interwq)
- - Handle 32 bit mutex counters. (@rkmisra)
- - Fix a indexing bug when creating background threads. (@davidtgoldblatt,
- @binliu19)
- - Fix arguments passed to extent_init. (@yuleniwo, @interwq)
- - Fix addresses used for ordering mutexes. (@rkmisra)
- - Fix abort_conf processing during bootstrap. (@interwq)
- - Fix include path order for out-of-tree builds. (@cmuellner)
- Incompatible changes:
- - Remove --disable-thp. (@interwq)
- - Remove mallctl interfaces:
- + config.thp (@interwq)
- Documentation:
- - Add TUNING.md. (@interwq, @davidtgoldblatt, @djwatson)
- * 5.0.1 (July 1, 2017)
- This bugfix release fixes several issues, most of which are obscure enough
- that typical applications are not impacted.
- Bug fixes:
- - Update decay->nunpurged before purging, in order to avoid potential update
- races and subsequent incorrect purging volume. (@interwq)
- - Only abort on dlsym(3) error if the failure impacts an enabled feature (lazy
- locking and/or background threads). This mitigates an initialization
- failure bug for which we still do not have a clear reproduction test case.
- (@interwq)
- - Modify tsd management so that it neither crashes nor leaks if a thread's
- only allocation activity is to call free() after TLS destructors have been
- executed. This behavior was observed when operating with GNU libc, and is
- unlikely to be an issue with other libc implementations. (@interwq)
- - Mask signals during background thread creation. This prevents signals from
- being inadvertently delivered to background threads. (@jasone,
- @davidtgoldblatt, @interwq)
- - Avoid inactivity checks within background threads, in order to prevent
- recursive mutex acquisition. (@interwq)
- - Fix extent_grow_retained() to use the specified hooks when the
- arena.<i>.extent_hooks mallctl is used to override the default hooks.
- (@interwq)
- - Add missing reentrancy support for custom extent hooks which allocate.
- (@interwq)
- - Post-fork(2), re-initialize the list of tcaches associated with each arena
- to contain no tcaches except the forking thread's. (@interwq)
- - Add missing post-fork(2) mutex reinitialization for extent_grow_mtx. This
- fixes potential deadlocks after fork(2). (@interwq)
- - Enforce minimum autoconf version (currently 2.68), since 2.63 is known to
- generate corrupt configure scripts. (@jasone)
- - Ensure that the configured page size (--with-lg-page) is no larger than the
- configured huge page size (--with-lg-hugepage). (@jasone)
- * 5.0.0 (June 13, 2017)
- Unlike all previous jemalloc releases, this release does not use naturally
- aligned "chunks" for virtual memory management, and instead uses page-aligned
- "extents". This change has few externally visible effects, but the internal
- impacts are... extensive. Many other internal changes combine to make this
- the most cohesively designed version of jemalloc so far, with ample
- opportunity for further enhancements.
- Continuous integration is now an integral aspect of development thanks to the
- efforts of @davidtgoldblatt, and the dev branch tends to remain reasonably
- stable on the tested platforms (Linux, FreeBSD, macOS, and Windows). As a
- side effect the official release frequency may decrease over time.
- New features:
- - Implement optional per-CPU arena support; threads choose which arena to use
- based on current CPU rather than on fixed thread-->arena associations.
- (@interwq)
- - Implement two-phase decay of unused dirty pages. Pages transition from
- dirty-->muzzy-->clean, where the first phase transition relies on
- madvise(... MADV_FREE) semantics, and the second phase transition discards
- pages such that they are replaced with demand-zeroed pages on next access.
- (@jasone)
- - Increase decay time resolution from seconds to milliseconds. (@jasone)
- - Implement opt-in per CPU background threads, and use them for asynchronous
- decay-driven unused dirty page purging. (@interwq)
- - Add mutex profiling, which collects a variety of statistics useful for
- diagnosing overhead/contention issues. (@interwq)
- - Add C++ new/delete operator bindings. (@djwatson)
- - Support manually created arena destruction, such that all data and metadata
- are discarded. Add MALLCTL_ARENAS_DESTROYED for accessing merged stats
- associated with destroyed arenas. (@jasone)
- - Add MALLCTL_ARENAS_ALL as a fixed index for use in accessing
- merged/destroyed arena statistics via mallctl. (@jasone)
- - Add opt.abort_conf to optionally abort if invalid configuration options are
- detected during initialization. (@interwq)
- - Add opt.stats_print_opts, so that e.g. JSON output can be selected for the
- stats dumped during exit if opt.stats_print is true. (@jasone)
- - Add --with-version=VERSION for use when embedding jemalloc into another
- project's git repository. (@jasone)
- - Add --disable-thp to support cross compiling. (@jasone)
- - Add --with-lg-hugepage to support cross compiling. (@jasone)
- - Add mallctl interfaces (various authors):
- + background_thread
- + opt.abort_conf
- + opt.retain
- + opt.percpu_arena
- + opt.background_thread
- + opt.{dirty,muzzy}_decay_ms
- + opt.stats_print_opts
- + arena.<i>.initialized
- + arena.<i>.destroy
- + arena.<i>.{dirty,muzzy}_decay_ms
- + arena.<i>.extent_hooks
- + arenas.{dirty,muzzy}_decay_ms
- + arenas.bin.<i>.slab_size
- + arenas.nlextents
- + arenas.lextent.<i>.size
- + arenas.create
- + stats.background_thread.{num_threads,num_runs,run_interval}
- + stats.mutexes.{ctl,background_thread,prof,reset}.
- {num_ops,num_spin_acq,num_wait,max_wait_time,total_wait_time,max_num_thds,
- num_owner_switch}
- + stats.arenas.<i>.{dirty,muzzy}_decay_ms
- + stats.arenas.<i>.uptime
- + stats.arenas.<i>.{pmuzzy,base,internal,resident}
- + stats.arenas.<i>.{dirty,muzzy}_{npurge,nmadvise,purged}
- + stats.arenas.<i>.bins.<j>.{nslabs,reslabs,curslabs}
- + stats.arenas.<i>.bins.<j>.mutex.
- {num_ops,num_spin_acq,num_wait,max_wait_time,total_wait_time,max_num_thds,
- num_owner_switch}
- + stats.arenas.<i>.lextents.<j>.{nmalloc,ndalloc,nrequests,curlextents}
- + stats.arenas.i.mutexes.{large,extent_avail,extents_dirty,extents_muzzy,
- extents_retained,decay_dirty,decay_muzzy,base,tcache_list}.
- {num_ops,num_spin_acq,num_wait,max_wait_time,total_wait_time,max_num_thds,
- num_owner_switch}
- Portability improvements:
- - Improve reentrant allocation support, such that deadlock is less likely if
- e.g. a system library call in turn allocates memory. (@davidtgoldblatt,
- @interwq)
- - Support static linking of jemalloc with glibc. (@djwatson)
- Optimizations and refactors:
- - Organize virtual memory as "extents" of virtual memory pages, rather than as
- naturally aligned "chunks", and store all metadata in arbitrarily distant
- locations. This reduces virtual memory external fragmentation, and will
- interact better with huge pages (not yet explicitly supported). (@jasone)
- - Fold large and huge size classes together; only small and large size classes
- remain. (@jasone)
- - Unify the allocation paths, and merge most fast-path branching decisions.
- (@davidtgoldblatt, @interwq)
- - Embed per thread automatic tcache into thread-specific data, which reduces
- conditional branches and dereferences. Also reorganize tcache to increase
- fast-path data locality. (@interwq)
- - Rewrite atomics to closely model the C11 API, convert various
- synchronization from mutex-based to atomic, and use the explicit memory
- ordering control to resolve various hypothetical races without increasing
- synchronization overhead. (@davidtgoldblatt)
- - Extensively optimize rtree via various methods:
- + Add multiple layers of rtree lookup caching, since rtree lookups are now
- part of fast-path deallocation. (@interwq)
- + Determine rtree layout at compile time. (@jasone)
- + Make the tree shallower for common configurations. (@jasone)
- + Embed the root node in the top-level rtree data structure, thus avoiding
- one level of indirection. (@jasone)
- + Further specialize leaf elements as compared to internal node elements,
- and directly embed extent metadata needed for fast-path deallocation.
- (@jasone)
- + Ignore leading always-zero address bits (architecture-specific).
- (@jasone)
- - Reorganize headers (ongoing work) to make them hermetic, and disentangle
- various module dependencies. (@davidtgoldblatt)
- - Convert various internal data structures such as size class metadata from
- boot-time-initialized to compile-time-initialized. Propagate resulting data
- structure simplifications, such as making arena metadata fixed-size.
- (@jasone)
- - Simplify size class lookups when constrained to size classes that are
- multiples of the page size. This speeds lookups, but the primary benefit is
- complexity reduction in code that was the source of numerous regressions.
- (@jasone)
- - Lock individual extents when possible for localized extent operations,
- rather than relying on a top-level arena lock. (@davidtgoldblatt, @jasone)
- - Use first fit layout policy instead of best fit, in order to improve
- packing. (@jasone)
- - If munmap(2) is not in use, use an exponential series to grow each arena's
- virtual memory, so that the number of disjoint virtual memory mappings
- remains low. (@jasone)
- - Implement per arena base allocators, so that arenas never share any virtual
- memory pages. (@jasone)
- - Automatically generate private symbol name mangling macros. (@jasone)
- Incompatible changes:
- - Replace chunk hooks with an expanded/normalized set of extent hooks.
- (@jasone)
- - Remove ratio-based purging. (@jasone)
- - Remove --disable-tcache. (@jasone)
- - Remove --disable-tls. (@jasone)
- - Remove --enable-ivsalloc. (@jasone)
- - Remove --with-lg-size-class-group. (@jasone)
- - Remove --with-lg-tiny-min. (@jasone)
- - Remove --disable-cc-silence. (@jasone)
- - Remove --enable-code-coverage. (@jasone)
- - Remove --disable-munmap (replaced by opt.retain). (@jasone)
- - Remove Valgrind support. (@jasone)
- - Remove quarantine support. (@jasone)
- - Remove redzone support. (@jasone)
- - Remove mallctl interfaces (various authors):
- + config.munmap
- + config.tcache
- + config.tls
- + config.valgrind
- + opt.lg_chunk
- + opt.purge
- + opt.lg_dirty_mult
- + opt.decay_time
- + opt.quarantine
- + opt.redzone
- + opt.thp
- + arena.<i>.lg_dirty_mult
- + arena.<i>.decay_time
- + arena.<i>.chunk_hooks
- + arenas.initialized
- + arenas.lg_dirty_mult
- + arenas.decay_time
- + arenas.bin.<i>.run_size
- + arenas.nlruns
- + arenas.lrun.<i>.size
- + arenas.nhchunks
- + arenas.hchunk.<i>.size
- + arenas.extend
- + stats.cactive
- + stats.arenas.<i>.lg_dirty_mult
- + stats.arenas.<i>.decay_time
- + stats.arenas.<i>.metadata.{mapped,allocated}
- + stats.arenas.<i>.{npurge,nmadvise,purged}
- + stats.arenas.<i>.huge.{allocated,nmalloc,ndalloc,nrequests}
- + stats.arenas.<i>.bins.<j>.{nruns,reruns,curruns}
- + stats.arenas.<i>.lruns.<j>.{nmalloc,ndalloc,nrequests,curruns}
- + stats.arenas.<i>.hchunks.<j>.{nmalloc,ndalloc,nrequests,curhchunks}
- Bug fixes:
- - Improve interval-based profile dump triggering to dump only one profile when
- a single allocation's size exceeds the interval. (@jasone)
- - Use prefixed function names (as controlled by --with-jemalloc-prefix) when
- pruning backtrace frames in jeprof. (@jasone)
- * 4.5.0 (February 28, 2017)
- This is the first release to benefit from much broader continuous integration
- testing, thanks to @davidtgoldblatt. Had we had this testing infrastructure
- in place for prior releases, it would have caught all of the most serious
- regressions fixed by this release.
- New features:
- - Add --disable-thp and the opt.thp mallctl to provide opt-out mechanisms for
- transparent huge page integration. (@jasone)
- - Update zone allocator integration to work with macOS 10.12. (@glandium)
- - Restructure *CFLAGS configuration, so that CFLAGS behaves typically, and
- EXTRA_CFLAGS provides a way to specify e.g. -Werror during building, but not
- during configuration. (@jasone, @ronawho)
- Bug fixes:
- - Fix DSS (sbrk(2)-based) allocation. This regression was first released in
- 4.3.0. (@jasone)
- - Handle race in per size class utilization computation. This functionality
- was first released in 4.0.0. (@interwq)
- - Fix lock order reversal during gdump. (@jasone)
- - Fix/refactor tcache synchronization. This regression was first released in
- 4.0.0. (@jasone)
- - Fix various JSON-formatted malloc_stats_print() bugs. This functionality
- was first released in 4.3.0. (@jasone)
- - Fix huge-aligned allocation. This regression was first released in 4.4.0.
- (@jasone)
- - When transparent huge page integration is enabled, detect what state pages
- start in according to the kernel's current operating mode, and only convert
- arena chunks to non-huge during purging if that is not their initial state.
- This functionality was first released in 4.4.0. (@jasone)
- - Fix lg_chunk clamping for the --enable-cache-oblivious --disable-fill case.
- This regression was first released in 4.0.0. (@jasone, @428desmo)
- - Properly detect sparc64 when building for Linux. (@glaubitz)
- * 4.4.0 (December 3, 2016)
- New features:
- - Add configure support for *-*-linux-android. (@cferris1000, @jasone)
- - Add the --disable-syscall configure option, for use on systems that place
- security-motivated limitations on syscall(2). (@jasone)
- - Add support for Debian GNU/kFreeBSD. (@thesam)
- Optimizations:
- - Add extent serial numbers and use them where appropriate as a sort key that
- is higher priority than address, so that the allocation policy prefers older
- extents. This tends to improve locality (decrease fragmentation) when
- memory grows downward. (@jasone)
- - Refactor madvise(2) configuration so that MADV_FREE is detected and utilized
- on Linux 4.5 and newer. (@jasone)
- - Mark partially purged arena chunks as non-huge-page. This improves
- interaction with Linux's transparent huge page functionality. (@jasone)
- Bug fixes:
- - Fix size class computations for edge conditions involving extremely large
- allocations. This regression was first released in 4.0.0. (@jasone,
- @ingvarha)
- - Remove overly restrictive assertions related to the cactive statistic. This
- regression was first released in 4.1.0. (@jasone)
- - Implement a more reliable detection scheme for os_unfair_lock on macOS.
- (@jszakmeister)
- * 4.3.1 (November 7, 2016)
- Bug fixes:
- - Fix a severe virtual memory leak. This regression was first released in
- 4.3.0. (@interwq, @jasone)
- - Refactor atomic and prng APIs to restore support for 32-bit platforms that
- use pre-C11 toolchains, e.g. FreeBSD's mips. (@jasone)
- * 4.3.0 (November 4, 2016)
- This is the first release that passes the test suite for multiple Windows
- configurations, thanks in large part to @glandium setting up continuous
- integration via AppVeyor (and Travis CI for Linux and OS X).
- New features:
- - Add "J" (JSON) support to malloc_stats_print(). (@jasone)
- - Add Cray compiler support. (@ronawho)
- Optimizations:
- - Add/use adaptive spinning for bootstrapping and radix tree node
- initialization. (@jasone)
- Bug fixes:
- - Fix large allocation to search starting in the optimal size class heap,
- which can substantially reduce virtual memory churn and fragmentation. This
- regression was first released in 4.0.0. (@mjp41, @jasone)
- - Fix stats.arenas.<i>.nthreads accounting. (@interwq)
- - Fix and simplify decay-based purging. (@jasone)
- - Make DSS (sbrk(2)-related) operations lockless, which resolves potential
- deadlocks during thread exit. (@jasone)
- - Fix over-sized allocation of radix tree leaf nodes. (@mjp41, @ogaun,
- @jasone)
- - Fix over-sized allocation of arena_t (plus associated stats) data
- structures. (@jasone, @interwq)
- - Fix EXTRA_CFLAGS to not affect configuration. (@jasone)
- - Fix a Valgrind integration bug. (@ronawho)
- - Disallow 0x5a junk filling when running in Valgrind. (@jasone)
- - Fix a file descriptor leak on Linux. This regression was first released in
- 4.2.0. (@vsarunas, @jasone)
- - Fix static linking of jemalloc with glibc. (@djwatson)
- - Use syscall(2) rather than {open,read,close}(2) during boot on Linux. This
- works around other libraries' system call wrappers performing reentrant
- allocation. (@kspinka, @Whissi, @jasone)
- - Fix OS X default zone replacement to work with OS X 10.12. (@glandium,
- @jasone)
- - Fix cached memory management to avoid needless commit/decommit operations
- during purging, which resolves permanent virtual memory map fragmentation
- issues on Windows. (@mjp41, @jasone)
- - Fix TSD fetches to avoid (recursive) allocation. This is relevant to
- non-TLS and Windows configurations. (@jasone)
- - Fix malloc_conf overriding to work on Windows. (@jasone)
- - Forcibly disable lazy-lock on Windows (was forcibly *enabled*). (@jasone)
- * 4.2.1 (June 8, 2016)
- Bug fixes:
- - Fix bootstrapping issues for configurations that require allocation during
- tsd initialization (e.g. --disable-tls). (@cferris1000, @jasone)
- - Fix gettimeofday() version of nstime_update(). (@ronawho)
- - Fix Valgrind regressions in calloc() and chunk_alloc_wrapper(). (@ronawho)
- - Fix potential VM map fragmentation regression. (@jasone)
- - Fix opt_zero-triggered in-place huge reallocation zeroing. (@jasone)
- - Fix heap profiling context leaks in reallocation edge cases. (@jasone)
- * 4.2.0 (May 12, 2016)
- New features:
- - Add the arena.<i>.reset mallctl, which makes it possible to discard all of
- an arena's allocations in a single operation. (@jasone)
- - Add the stats.retained and stats.arenas.<i>.retained statistics. (@jasone)
- - Add the --with-version configure option. (@jasone)
- - Support --with-lg-page values larger than actual page size. (@jasone)
- Optimizations:
- - Use pairing heaps rather than red-black trees for various hot data
- structures. (@djwatson, @jasone)
- - Streamline fast paths of rtree operations. (@jasone)
- - Optimize the fast paths of calloc() and [m,d,sd]allocx(). (@jasone)
- - Decommit unused virtual memory if the OS does not overcommit. (@jasone)
- - Specify MAP_NORESERVE on Linux if [heuristic] overcommit is active, in order
- to avoid unfortunate interactions during fork(2). (@jasone)
- Bug fixes:
- - Fix chunk accounting related to triggering gdump profiles. (@jasone)
- - Link against librt for clock_gettime(2) if glibc < 2.17. (@jasone)
- - Scale leak report summary according to sampling probability. (@jasone)
- * 4.1.1 (May 3, 2016)
- This bugfix release resolves a variety of mostly minor issues, though the
- bitmap fix is critical for 64-bit Windows.
- Bug fixes:
- - Fix the linear scan version of bitmap_sfu() to shift by the proper amount
- even when sizeof(long) is not the same as sizeof(void *), as on 64-bit
- Windows. (@jasone)
- - Fix hashing functions to avoid unaligned memory accesses (and resulting
- crashes). This is relevant at least to some ARM-based platforms.
- (@rkmisra)
- - Fix fork()-related lock rank ordering reversals. These reversals were
- unlikely to cause deadlocks in practice except when heap profiling was
- enabled and active. (@jasone)
- - Fix various chunk leaks in OOM code paths. (@jasone)
- - Fix malloc_stats_print() to print opt.narenas correctly. (@jasone)
- - Fix MSVC-specific build/test issues. (@rustyx, @yuslepukhin)
- - Fix a variety of test failures that were due to test fragility rather than
- core bugs. (@jasone)
- * 4.1.0 (February 28, 2016)
- This release is primarily about optimizations, but it also incorporates a lot
- of portability-motivated refactoring and enhancements. Many people worked on
- this release, to an extent that even with the omission here of minor changes
- (see git revision history), and of the people who reported and diagnosed
- issues, so much of the work was contributed that starting with this release,
- changes are annotated with author credits to help reflect the collaborative
- effort involved.
- New features:
- - Implement decay-based unused dirty page purging, a major optimization with
- mallctl API impact. This is an alternative to the existing ratio-based
- unused dirty page purging, and is intended to eventually become the sole
- purging mechanism. New mallctls:
- + opt.purge
- + opt.decay_time
- + arena.<i>.decay
- + arena.<i>.decay_time
- + arenas.decay_time
- + stats.arenas.<i>.decay_time
- (@jasone, @cevans87)
- - Add --with-malloc-conf, which makes it possible to embed a default
- options string during configuration. This was motivated by the desire to
- specify --with-malloc-conf=purge:decay , since the default must remain
- purge:ratio until the 5.0.0 release. (@jasone)
- - Add MS Visual Studio 2015 support. (@rustyx, @yuslepukhin)
- - Make *allocx() size class overflow behavior defined. The maximum
- size class is now less than PTRDIFF_MAX to protect applications against
- numerical overflow, and all allocation functions are guaranteed to indicate
- errors rather than potentially crashing if the request size exceeds the
- maximum size class. (@jasone)
- - jeprof:
- + Add raw heap profile support. (@jasone)
- + Add --retain and --exclude for backtrace symbol filtering. (@jasone)
- Optimizations:
- - Optimize the fast path to combine various bootstrapping and configuration
- checks and execute more streamlined code in the common case. (@interwq)
- - Use linear scan for small bitmaps (used for small object tracking). In
- addition to speeding up bitmap operations on 64-bit systems, this reduces
- allocator metadata overhead by approximately 0.2%. (@djwatson)
- - Separate arena_avail trees, which substantially speeds up run tree
- operations. (@djwatson)
- - Use memoization (boot-time-computed table) for run quantization. Separate
- arena_avail trees reduced the importance of this optimization. (@jasone)
- - Attempt mmap-based in-place huge reallocation. This can dramatically speed
- up incremental huge reallocation. (@jasone)
- Incompatible changes:
- - Make opt.narenas unsigned rather than size_t. (@jasone)
- Bug fixes:
- - Fix stats.cactive accounting regression. (@rustyx, @jasone)
- - Handle unaligned keys in hash(). This caused problems for some ARM systems.
- (@jasone, @cferris1000)
- - Refactor arenas array. In addition to fixing a fork-related deadlock, this
- makes arena lookups faster and simpler. (@jasone)
- - Move retained memory allocation out of the default chunk allocation
- function, to a location that gets executed even if the application installs
- a custom chunk allocation function. This resolves a virtual memory leak.
- (@buchgr)
- - Fix a potential tsd cleanup leak. (@cferris1000, @jasone)
- - Fix run quantization. In practice this bug had no impact unless
- applications requested memory with alignment exceeding one page.
- (@jasone, @djwatson)
- - Fix LinuxThreads-specific bootstrapping deadlock. (Cosmin Paraschiv)
- - jeprof:
- + Don't discard curl options if timeout is not defined. (@djwatson)
- + Detect failed profile fetches. (@djwatson)
- - Fix stats.arenas.<i>.{dss,lg_dirty_mult,decay_time,pactive,pdirty} for
- --disable-stats case. (@jasone)
- * 4.0.4 (October 24, 2015)
- This bugfix release fixes another xallocx() regression. No other regressions
- have come to light in over a month, so this is likely a good starting point
- for people who prefer to wait for "dot one" releases with all the major issues
- shaken out.
- Bug fixes:
- - Fix xallocx(..., MALLOCX_ZERO to zero the last full trailing page of large
- allocations that have been randomly assigned an offset of 0 when
- --enable-cache-oblivious configure option is enabled.
- * 4.0.3 (September 24, 2015)
- This bugfix release continues the trend of xallocx() and heap profiling fixes.
- Bug fixes:
- - Fix xallocx(..., MALLOCX_ZERO) to zero all trailing bytes of large
- allocations when --enable-cache-oblivious configure option is enabled.
- - Fix xallocx(..., MALLOCX_ZERO) to zero trailing bytes of huge allocations
- when resizing from/to a size class that is not a multiple of the chunk size.
- - Fix prof_tctx_dump_iter() to filter out nodes that were created after heap
- profile dumping started.
- - Work around a potentially bad thread-specific data initialization
- interaction with NPTL (glibc's pthreads implementation).
- * 4.0.2 (September 21, 2015)
- This bugfix release addresses a few bugs specific to heap profiling.
- Bug fixes:
- - Fix ixallocx_prof_sample() to never modify nor create sampled small
- allocations. xallocx() is in general incapable of moving small allocations,
- so this fix removes buggy code without loss of generality.
- - Fix irallocx_prof_sample() to always allocate large regions, even when
- alignment is non-zero.
- - Fix prof_alloc_rollback() to read tdata from thread-specific data rather
- than dereferencing a potentially invalid tctx.
- * 4.0.1 (September 15, 2015)
- This is a bugfix release that is somewhat high risk due to the amount of
- refactoring required to address deep xallocx() problems. As a side effect of
- these fixes, xallocx() now tries harder to partially fulfill requests for
- optional extra space. Note that a couple of minor heap profiling
- optimizations are included, but these are better thought of as performance
- fixes that were integral to discovering most of the other bugs.
- Optimizations:
- - Avoid a chunk metadata read in arena_prof_tctx_set(), since it is in the
- fast path when heap profiling is enabled. Additionally, split a special
- case out into arena_prof_tctx_reset(), which also avoids chunk metadata
- reads.
- - Optimize irallocx_prof() to optimistically update the sampler state. The
- prior implementation appears to have been a holdover from when
- rallocx()/xallocx() functionality was combined as rallocm().
- Bug fixes:
- - Fix TLS configuration such that it is enabled by default for platforms on
- which it works correctly.
- - Fix arenas_cache_cleanup() and arena_get_hard() to handle
- allocation/deallocation within the application's thread-specific data
- cleanup functions even after arenas_cache is torn down.
- - Fix xallocx() bugs related to size+extra exceeding HUGE_MAXCLASS.
- - Fix chunk purge hook calls for in-place huge shrinking reallocation to
- specify the old chunk size rather than the new chunk size. This bug caused
- no correctness issues for the default chunk purge function, but was
- visible to custom functions set via the "arena.<i>.chunk_hooks" mallctl.
- - Fix heap profiling bugs:
- + Fix heap profiling to distinguish among otherwise identical sample sites
- with interposed resets (triggered via the "prof.reset" mallctl). This bug
- could cause data structure corruption that would most likely result in a
- segfault.
- + Fix irealloc_prof() to prof_alloc_rollback() on OOM.
- + Make one call to prof_active_get_unlocked() per allocation event, and use
- the result throughout the relevant functions that handle an allocation
- event. Also add a missing check in prof_realloc(). These fixes protect
- allocation events against concurrent prof_active changes.
- + Fix ixallocx_prof() to pass usize_max and zero to ixallocx_prof_sample()
- in the correct order.
- + Fix prof_realloc() to call prof_free_sampled_object() after calling
- prof_malloc_sample_object(). Prior to this fix, if tctx and old_tctx were
- the same, the tctx could have been prematurely destroyed.
- - Fix portability bugs:
- + Don't bitshift by negative amounts when encoding/decoding run sizes in
- chunk header maps. This affected systems with page sizes greater than 8
- KiB.
- + Rename index_t to szind_t to avoid an existing type on Solaris.
- + Add JEMALLOC_CXX_THROW to the memalign() function prototype, in order to
- match glibc and avoid compilation errors when including both
- jemalloc/jemalloc.h and malloc.h in C++ code.
- + Don't assume that /bin/sh is appropriate when running size_classes.sh
- during configuration.
- + Consider __sparcv9 a synonym for __sparc64__ when defining LG_QUANTUM.
- + Link tests to librt if it contains clock_gettime(2).
- * 4.0.0 (August 17, 2015)
- This version contains many speed and space optimizations, both minor and
- major. The major themes are generalization, unification, and simplification.
- Although many of these optimizations cause no visible behavior change, their
- cumulative effect is substantial.
- New features:
- - Normalize size class spacing to be consistent across the complete size
- range. By default there are four size classes per size doubling, but this
- is now configurable via the --with-lg-size-class-group option. Also add the
- --with-lg-page, --with-lg-page-sizes, --with-lg-quantum, and
- --with-lg-tiny-min options, which can be used to tweak page and size class
- settings. Impacts:
- + Worst case performance for incrementally growing/shrinking reallocation
- is improved because there are far fewer size classes, and therefore
- copying happens less often.
- + Internal fragmentation is limited to 20% for all but the smallest size
- classes (those less than four times the quantum). (1B + 4 KiB)
- and (1B + 4 MiB) previously suffered nearly 50% internal fragmentation.
- + Chunk fragmentation tends to be lower because there are fewer distinct run
- sizes to pack.
- - Add support for explicit tcaches. The "tcache.create", "tcache.flush", and
- "tcache.destroy" mallctls control tcache lifetime and flushing, and the
- MALLOCX_TCACHE(tc) and MALLOCX_TCACHE_NONE flags to the *allocx() API
- control which tcache is used for each operation.
- - Implement per thread heap profiling, as well as the ability to
- enable/disable heap profiling on a per thread basis. Add the "prof.reset",
- "prof.lg_sample", "thread.prof.name", "thread.prof.active",
- "opt.prof_thread_active_init", "prof.thread_active_init", and
- "thread.prof.active" mallctls.
- - Add support for per arena application-specified chunk allocators, configured
- via the "arena.<i>.chunk_hooks" mallctl.
- - Refactor huge allocation to be managed by arenas, so that arenas now
- function as general purpose independent allocators. This is important in
- the context of user-specified chunk allocators, aside from the scalability
- benefits. Related new statistics:
- + The "stats.arenas.<i>.huge.allocated", "stats.arenas.<i>.huge.nmalloc",
- "stats.arenas.<i>.huge.ndalloc", and "stats.arenas.<i>.huge.nrequests"
- mallctls provide high level per arena huge allocation statistics.
- + The "arenas.nhchunks", "arenas.hchunk.<i>.size",
- "stats.arenas.<i>.hchunks.<j>.nmalloc",
- "stats.arenas.<i>.hchunks.<j>.ndalloc",
- "stats.arenas.<i>.hchunks.<j>.nrequests", and
- "stats.arenas.<i>.hchunks.<j>.curhchunks" mallctls provide per size class
- statistics.
- - Add the 'util' column to malloc_stats_print() output, which reports the
- proportion of available regions that are currently in use for each small
- size class.
- - Add "alloc" and "free" modes for for junk filling (see the "opt.junk"
- mallctl), so that it is possible to separately enable junk filling for
- allocation versus deallocation.
- - Add the jemalloc-config script, which provides information about how
- jemalloc was configured, and how to integrate it into application builds.
- - Add metadata statistics, which are accessible via the "stats.metadata",
- "stats.arenas.<i>.metadata.mapped", and
- "stats.arenas.<i>.metadata.allocated" mallctls.
- - Add the "stats.resident" mallctl, which reports the upper limit of
- physically resident memory mapped by the allocator.
- - Add per arena control over unused dirty page purging, via the
- "arenas.lg_dirty_mult", "arena.<i>.lg_dirty_mult", and
- "stats.arenas.<i>.lg_dirty_mult" mallctls.
- - Add the "prof.gdump" mallctl, which makes it possible to toggle the gdump
- feature on/off during program execution.
- - Add sdallocx(), which implements sized deallocation. The primary
- optimization over dallocx() is the removal of a metadata read, which often
- suffers an L1 cache miss.
- - Add missing header includes in jemalloc/jemalloc.h, so that applications
- only have to #include <jemalloc/jemalloc.h>.
- - Add support for additional platforms:
- + Bitrig
- + Cygwin
- + DragonFlyBSD
- + iOS
- + OpenBSD
- + OpenRISC/or1k
- Optimizations:
- - Maintain dirty runs in per arena LRUs rather than in per arena trees of
- dirty-run-containing chunks. In practice this change significantly reduces
- dirty page purging volume.
- - Integrate whole chunks into the unused dirty page purging machinery. This
- reduces the cost of repeated huge allocation/deallocation, because it
- effectively introduces a cache of chunks.
- - Split the arena chunk map into two separate arrays, in order to increase
- cache locality for the frequently accessed bits.
- - Move small run metadata out of runs, into arena chunk headers. This reduces
- run fragmentation, smaller runs reduce external fragmentation for small size
- classes, and packed (less uniformly aligned) metadata layout improves CPU
- cache set distribution.
- - Randomly distribute large allocation base pointer alignment relative to page
- boundaries in order to more uniformly utilize CPU cache sets. This can be
- disabled via the --disable-cache-oblivious configure option, and queried via
- the "config.cache_oblivious" mallctl.
- - Micro-optimize the fast paths for the public API functions.
- - Refactor thread-specific data to reside in a single structure. This assures
- that only a single TLS read is necessary per call into the public API.
- - Implement in-place huge allocation growing and shrinking.
- - Refactor rtree (radix tree for chunk lookups) to be lock-free, and make
- additional optimizations that reduce maximum lookup depth to one or two
- levels. This resolves what was a concurrency bottleneck for per arena huge
- allocation, because a global data structure is critical for determining
- which arenas own which huge allocations.
- Incompatible changes:
- - Replace --enable-cc-silence with --disable-cc-silence to suppress spurious
- warnings by default.
- - Assure that the constness of malloc_usable_size()'s return type matches that
- of the system implementation.
- - Change the heap profile dump format to support per thread heap profiling,
- rename pprof to jeprof, and enhance it with the --thread=<n> option. As a
- result, the bundled jeprof must now be used rather than the upstream
- (gperftools) pprof.
- - Disable "opt.prof_final" by default, in order to avoid atexit(3), which can
- internally deadlock on some platforms.
- - Change the "arenas.nlruns" mallctl type from size_t to unsigned.
- - Replace the "stats.arenas.<i>.bins.<j>.allocated" mallctl with
- "stats.arenas.<i>.bins.<j>.curregs".
- - Ignore MALLOC_CONF in set{uid,gid,cap} binaries.
- - Ignore MALLOCX_ARENA(a) in dallocx(), in favor of using the
- MALLOCX_TCACHE(tc) and MALLOCX_TCACHE_NONE flags to control tcache usage.
- Removed features:
- - Remove the *allocm() API, which is superseded by the *allocx() API.
- - Remove the --enable-dss options, and make dss non-optional on all platforms
- which support sbrk(2).
- - Remove the "arenas.purge" mallctl, which was obsoleted by the
- "arena.<i>.purge" mallctl in 3.1.0.
- - Remove the unnecessary "opt.valgrind" mallctl; jemalloc automatically
- detects whether it is running inside Valgrind.
- - Remove the "stats.huge.allocated", "stats.huge.nmalloc", and
- "stats.huge.ndalloc" mallctls.
- - Remove the --enable-mremap option.
- - Remove the "stats.chunks.current", "stats.chunks.total", and
- "stats.chunks.high" mallctls.
- Bug fixes:
- - Fix the cactive statistic to decrease (rather than increase) when active
- memory decreases. This regression was first released in 3.5.0.
- - Fix OOM handling in memalign() and valloc(). A variant of this bug existed
- in all releases since 2.0.0, which introduced these functions.
- - Fix an OOM-related regression in arena_tcache_fill_small(), which could
- cause cache corruption on OOM. This regression was present in all releases
- from 2.2.0 through 3.6.0.
- - Fix size class overflow handling for malloc(), posix_memalign(), memalign(),
- calloc(), and realloc() when profiling is enabled.
- - Fix the "arena.<i>.dss" mallctl to return an error if "primary" or
- "secondary" precedence is specified, but sbrk(2) is not supported.
- - Fix fallback lg_floor() implementations to handle extremely large inputs.
- - Ensure the default purgeable zone is after the default zone on OS X.
- - Fix latent bugs in atomic_*().
- - Fix the "arena.<i>.dss" mallctl to handle read-only calls.
- - Fix tls_model configuration to enable the initial-exec model when possible.
- - Mark malloc_conf as a weak symbol so that the application can override it.
- - Correctly detect glibc's adaptive pthread mutexes.
- - Fix the --without-export configure option.
- * 3.6.0 (March 31, 2014)
- This version contains a critical bug fix for a regression present in 3.5.0 and
- 3.5.1.
- Bug fixes:
- - Fix a regression in arena_chunk_alloc() that caused crashes during
- small/large allocation if chunk allocation failed. In the absence of this
- bug, chunk allocation failure would result in allocation failure, e.g. NULL
- return from malloc(). This regression was introduced in 3.5.0.
- - Fix backtracing for gcc intrinsics-based backtracing by specifying
- -fno-omit-frame-pointer to gcc. Note that the application (and all the
- libraries it links to) must also be compiled with this option for
- backtracing to be reliable.
- - Use dss allocation precedence for huge allocations as well as small/large
- allocations.
- - Fix test assertion failure message formatting. This bug did not manifest on
- x86_64 systems because of implementation subtleties in va_list.
- - Fix inconsequential test failures for hash and SFMT code.
- New features:
- - Support heap profiling on FreeBSD. This feature depends on the proc
- filesystem being mounted during heap profile dumping.
- * 3.5.1 (February 25, 2014)
- This version primarily addresses minor bugs in test code.
- Bug fixes:
- - Configure Solaris/Illumos to use MADV_FREE.
- - Fix junk filling for mremap(2)-based huge reallocation. This is only
- relevant if configuring with the --enable-mremap option specified.
- - Avoid compilation failure if 'restrict' C99 keyword is not supported by the
- compiler.
- - Add a configure test for SSE2 rather than assuming it is usable on i686
- systems. This fixes test compilation errors, especially on 32-bit Linux
- systems.
- - Fix mallctl argument size mismatches (size_t vs. uint64_t) in the stats unit
- test.
- - Fix/remove flawed alignment-related overflow tests.
- - Prevent compiler optimizations that could change backtraces in the
- prof_accum unit test.
- * 3.5.0 (January 22, 2014)
- This version focuses on refactoring and automated testing, though it also
- includes some non-trivial heap profiling optimizations not mentioned below.
- New features:
- - Add the *allocx() API, which is a successor to the experimental *allocm()
- API. The *allocx() functions are slightly simpler to use because they have
- fewer parameters, they directly return the results of primary interest, and
- mallocx()/rallocx() avoid the strict aliasing pitfall that
- allocm()/rallocm() share with posix_memalign(). Note that *allocm() is
- slated for removal in the next non-bugfix release.
- - Add support for LinuxThreads.
- Bug fixes:
- - Unless heap profiling is enabled, disable floating point code and don't link
- with libm. This, in combination with e.g. EXTRA_CFLAGS=-mno-sse on x64
- systems, makes it possible to completely disable floating point register
- use. Some versions of glibc neglect to save/restore caller-saved floating
- point registers during dynamic lazy symbol loading, and the symbol loading
- code uses whatever malloc the application happens to have linked/loaded
- with, the result being potential floating point register corruption.
- - Report ENOMEM rather than EINVAL if an OOM occurs during heap profiling
- backtrace creation in imemalign(). This bug impacted posix_memalign() and
- aligned_alloc().
- - Fix a file descriptor leak in a prof_dump_maps() error path.
- - Fix prof_dump() to close the dump file descriptor for all relevant error
- paths.
- - Fix rallocm() to use the arena specified by the ALLOCM_ARENA(s) flag for
- allocation, not just deallocation.
- - Fix a data race for large allocation stats counters.
- - Fix a potential infinite loop during thread exit. This bug occurred on
- Solaris, and could affect other platforms with similar pthreads TSD
- implementations.
- - Don't junk-fill reallocations unless usable size changes. This fixes a
- violation of the *allocx()/*allocm() semantics.
- - Fix growing large reallocation to junk fill new space.
- - Fix huge deallocation to junk fill when munmap is disabled.
- - Change the default private namespace prefix from empty to je_, and change
- --with-private-namespace-prefix so that it prepends an additional prefix
- rather than replacing je_. This reduces the likelihood of applications
- which statically link jemalloc experiencing symbol name collisions.
- - Add missing private namespace mangling (relevant when
- --with-private-namespace is specified).
- - Add and use JEMALLOC_INLINE_C so that static inline functions are marked as
- static even for debug builds.
- - Add a missing mutex unlock in a malloc_init_hard() error path. In practice
- this error path is never executed.
- - Fix numerous bugs in malloc_strotumax() error handling/reporting. These
- bugs had no impact except for malformed inputs.
- - Fix numerous bugs in malloc_snprintf(). These bugs were not exercised by
- existing calls, so they had no impact.
- * 3.4.1 (October 20, 2013)
- Bug fixes:
- - Fix a race in the "arenas.extend" mallctl that could cause memory corruption
- of internal data structures and subsequent crashes.
- - Fix Valgrind integration flaws that caused Valgrind warnings about reads of
- uninitialized memory in:
- + arena chunk headers
- + internal zero-initialized data structures (relevant to tcache and prof
- code)
- - Preserve errno during the first allocation. A readlink(2) call during
- initialization fails unless /etc/malloc.conf exists, so errno was typically
- set during the first allocation prior to this fix.
- - Fix compilation warnings reported by gcc 4.8.1.
- * 3.4.0 (June 2, 2013)
- This version is essentially a small bugfix release, but the addition of
- aarch64 support requires that the minor version be incremented.
- Bug fixes:
- - Fix race-triggered deadlocks in chunk_record(). These deadlocks were
- typically triggered by multiple threads concurrently deallocating huge
- objects.
- New features:
- - Add support for the aarch64 architecture.
- * 3.3.1 (March 6, 2013)
- This version fixes bugs that are typically encountered only when utilizing
- custom run-time options.
- Bug fixes:
- - Fix a locking order bug that could cause deadlock during fork if heap
- profiling were enabled.
- - Fix a chunk recycling bug that could cause the allocator to lose track of
- whether a chunk was zeroed. On FreeBSD, NetBSD, and OS X, it could cause
- corruption if allocating via sbrk(2) (unlikely unless running with the
- "dss:primary" option specified). This was completely harmless on Linux
- unless using mlockall(2) (and unlikely even then, unless the
- --disable-munmap configure option or the "dss:primary" option was
- specified). This regression was introduced in 3.1.0 by the
- mlockall(2)/madvise(2) interaction fix.
- - Fix TLS-related memory corruption that could occur during thread exit if the
- thread never allocated memory. Only the quarantine and prof facilities were
- susceptible.
- - Fix two quarantine bugs:
- + Internal reallocation of the quarantined object array leaked the old
- array.
- + Reallocation failure for internal reallocation of the quarantined object
- array (very unlikely) resulted in memory corruption.
- - Fix Valgrind integration to annotate all internally allocated memory in a
- way that keeps Valgrind happy about internal data structure access.
- - Fix building for s390 systems.
- * 3.3.0 (January 23, 2013)
- This version includes a few minor performance improvements in addition to the
- listed new features and bug fixes.
- New features:
- - Add clipping support to lg_chunk option processing.
- - Add the --enable-ivsalloc option.
- - Add the --without-export option.
- - Add the --disable-zone-allocator option.
- Bug fixes:
- - Fix "arenas.extend" mallctl to output the number of arenas.
- - Fix chunk_recycle() to unconditionally inform Valgrind that returned memory
- is undefined.
- - Fix build break on FreeBSD related to alloca.h.
- * 3.2.0 (November 9, 2012)
- In addition to a couple of bug fixes, this version modifies page run
- allocation and dirty page purging algorithms in order to better control
- page-level virtual memory fragmentation.
- Incompatible changes:
- - Change the "opt.lg_dirty_mult" default from 5 to 3 (32:1 to 8:1).
- Bug fixes:
- - Fix dss/mmap allocation precedence code to use recyclable mmap memory only
- after primary dss allocation fails.
- - Fix deadlock in the "arenas.purge" mallctl. This regression was introduced
- in 3.1.0 by the addition of the "arena.<i>.purge" mallctl.
- * 3.1.0 (October 16, 2012)
- New features:
- - Auto-detect whether running inside Valgrind, thus removing the need to
- manually specify MALLOC_CONF=valgrind:true.
- - Add the "arenas.extend" mallctl, which allows applications to create
- manually managed arenas.
- - Add the ALLOCM_ARENA() flag for {,r,d}allocm().
- - Add the "opt.dss", "arena.<i>.dss", and "stats.arenas.<i>.dss" mallctls,
- which provide control over dss/mmap precedence.
- - Add the "arena.<i>.purge" mallctl, which obsoletes "arenas.purge".
- - Define LG_QUANTUM for hppa.
- Incompatible changes:
- - Disable tcache by default if running inside Valgrind, in order to avoid
- making unallocated objects appear reachable to Valgrind.
- - Drop const from malloc_usable_size() argument on Linux.
- Bug fixes:
- - Fix heap profiling crash if sampled object is freed via realloc(p, 0).
- - Remove const from __*_hook variable declarations, so that glibc can modify
- them during process forking.
- - Fix mlockall(2)/madvise(2) interaction.
- - Fix fork(2)-related deadlocks.
- - Fix error return value for "thread.tcache.enabled" mallctl.
- * 3.0.0 (May 11, 2012)
- Although this version adds some major new features, the primary focus is on
- internal code cleanup that facilitates maintainability and portability, most
- of which is not reflected in the ChangeLog. This is the first release to
- incorporate substantial contributions from numerous other developers, and the
- result is a more broadly useful allocator (see the git revision history for
- contribution details). Note that the license has been unified, thanks to
- Facebook granting a license under the same terms as the other copyright
- holders (see COPYING).
- New features:
- - Implement Valgrind support, redzones, and quarantine.
- - Add support for additional platforms:
- + FreeBSD
- + Mac OS X Lion
- + MinGW
- + Windows (no support yet for replacing the system malloc)
- - Add support for additional architectures:
- + MIPS
- + SH4
- + Tilera
- - Add support for cross compiling.
- - Add nallocm(), which rounds a request size up to the nearest size class
- without actually allocating.
- - Implement aligned_alloc() (blame C11).
- - Add the "thread.tcache.enabled" mallctl.
- - Add the "opt.prof_final" mallctl.
- - Update pprof (from gperftools 2.0).
- - Add the --with-mangling option.
- - Add the --disable-experimental option.
- - Add the --disable-munmap option, and make it the default on Linux.
- - Add the --enable-mremap option, which disables use of mremap(2) by default.
- Incompatible changes:
- - Enable stats by default.
- - Enable fill by default.
- - Disable lazy locking by default.
- - Rename the "tcache.flush" mallctl to "thread.tcache.flush".
- - Rename the "arenas.pagesize" mallctl to "arenas.page".
- - Change the "opt.lg_prof_sample" default from 0 to 19 (1 B to 512 KiB).
- - Change the "opt.prof_accum" default from true to false.
- Removed features:
- - Remove the swap feature, including the "config.swap", "swap.avail",
- "swap.prezeroed", "swap.nfds", and "swap.fds" mallctls.
- - Remove highruns statistics, including the
- "stats.arenas.<i>.bins.<j>.highruns" and
- "stats.arenas.<i>.lruns.<j>.highruns" mallctls.
- - As part of small size class refactoring, remove the "opt.lg_[qc]space_max",
- "arenas.cacheline", "arenas.subpage", "arenas.[tqcs]space_{min,max}", and
- "arenas.[tqcs]bins" mallctls.
- - Remove the "arenas.chunksize" mallctl.
- - Remove the "opt.lg_prof_tcmax" option.
- - Remove the "opt.lg_prof_bt_max" option.
- - Remove the "opt.lg_tcache_gc_sweep" option.
- - Remove the --disable-tiny option, including the "config.tiny" mallctl.
- - Remove the --enable-dynamic-page-shift configure option.
- - Remove the --enable-sysv configure option.
- Bug fixes:
- - Fix a statistics-related bug in the "thread.arena" mallctl that could cause
- invalid statistics and crashes.
- - Work around TLS deallocation via free() on Linux. This bug could cause
- write-after-free memory corruption.
- - Fix a potential deadlock that could occur during interval- and
- growth-triggered heap profile dumps.
- - Fix large calloc() zeroing bugs due to dropping chunk map unzeroed flags.
- - Fix chunk_alloc_dss() to stop claiming memory is zeroed. This bug could
- cause memory corruption and crashes with --enable-dss specified.
- - Fix fork-related bugs that could cause deadlock in children between fork
- and exec.
- - Fix malloc_stats_print() to honor 'b' and 'l' in the opts parameter.
- - Fix realloc(p, 0) to act like free(p).
- - Do not enforce minimum alignment in memalign().
- - Check for NULL pointer in malloc_usable_size().
- - Fix an off-by-one heap profile statistics bug that could be observed in
- interval- and growth-triggered heap profiles.
- - Fix the "epoch" mallctl to update cached stats even if the passed in epoch
- is 0.
- - Fix bin->runcur management to fix a layout policy bug. This bug did not
- affect correctness.
- - Fix a bug in choose_arena_hard() that potentially caused more arenas to be
- initialized than necessary.
- - Add missing "opt.lg_tcache_max" mallctl implementation.
- - Use glibc allocator hooks to make mixed allocator usage less likely.
- - Fix build issues for --disable-tcache.
- - Don't mangle pthread_create() when --with-private-namespace is specified.
- * 2.2.5 (November 14, 2011)
- Bug fixes:
- - Fix huge_ralloc() race when using mremap(2). This is a serious bug that
- could cause memory corruption and/or crashes.
- - Fix huge_ralloc() to maintain chunk statistics.
- - Fix malloc_stats_print(..., "a") output.
- * 2.2.4 (November 5, 2011)
- Bug fixes:
- - Initialize arenas_tsd before using it. This bug existed for 2.2.[0-3], as
- well as for --disable-tls builds in earlier releases.
- - Do not assume a 4 KiB page size in test/rallocm.c.
- * 2.2.3 (August 31, 2011)
- This version fixes numerous bugs related to heap profiling.
- Bug fixes:
- - Fix a prof-related race condition. This bug could cause memory corruption,
- but only occurred in non-default configurations (prof_accum:false).
- - Fix off-by-one backtracing issues (make sure that prof_alloc_prep() is
- excluded from backtraces).
- - Fix a prof-related bug in realloc() (only triggered by OOM errors).
- - Fix prof-related bugs in allocm() and rallocm().
- - Fix prof_tdata_cleanup() for --disable-tls builds.
- - Fix a relative include path, to fix objdir builds.
- * 2.2.2 (July 30, 2011)
- Bug fixes:
- - Fix a build error for --disable-tcache.
- - Fix assertions in arena_purge() (for real this time).
- - Add the --with-private-namespace option. This is a workaround for symbol
- conflicts that can inadvertently arise when using static libraries.
- * 2.2.1 (March 30, 2011)
- Bug fixes:
- - Implement atomic operations for x86/x64. This fixes compilation failures
- for versions of gcc that are still in wide use.
- - Fix an assertion in arena_purge().
- * 2.2.0 (March 22, 2011)
- This version incorporates several improvements to algorithms and data
- structures that tend to reduce fragmentation and increase speed.
- New features:
- - Add the "stats.cactive" mallctl.
- - Update pprof (from google-perftools 1.7).
- - Improve backtracing-related configuration logic, and add the
- --disable-prof-libgcc option.
- Bug fixes:
- - Change default symbol visibility from "internal", to "hidden", which
- decreases the overhead of library-internal function calls.
- - Fix symbol visibility so that it is also set on OS X.
- - Fix a build dependency regression caused by the introduction of the .pic.o
- suffix for PIC object files.
- - Add missing checks for mutex initialization failures.
- - Don't use libgcc-based backtracing except on x64, where it is known to work.
- - Fix deadlocks on OS X that were due to memory allocation in
- pthread_mutex_lock().
- - Heap profiling-specific fixes:
- + Fix memory corruption due to integer overflow in small region index
- computation, when using a small enough sample interval that profiling
- context pointers are stored in small run headers.
- + Fix a bootstrap ordering bug that only occurred with TLS disabled.
- + Fix a rallocm() rsize bug.
- + Fix error detection bugs for aligned memory allocation.
- * 2.1.3 (March 14, 2011)
- Bug fixes:
- - Fix a cpp logic regression (due to the "thread.{de,}allocatedp" mallctl fix
- for OS X in 2.1.2).
- - Fix a "thread.arena" mallctl bug.
- - Fix a thread cache stats merging bug.
- * 2.1.2 (March 2, 2011)
- Bug fixes:
- - Fix "thread.{de,}allocatedp" mallctl for OS X.
- - Add missing jemalloc.a to build system.
- * 2.1.1 (January 31, 2011)
- Bug fixes:
- - Fix aligned huge reallocation (affected allocm()).
- - Fix the ALLOCM_LG_ALIGN macro definition.
- - Fix a heap dumping deadlock.
- - Fix a "thread.arena" mallctl bug.
- * 2.1.0 (December 3, 2010)
- This version incorporates some optimizations that can't quite be considered
- bug fixes.
- New features:
- - Use Linux's mremap(2) for huge object reallocation when possible.
- - Avoid locking in mallctl*() when possible.
- - Add the "thread.[de]allocatedp" mallctl's.
- - Convert the manual page source from roff to DocBook, and generate both roff
- and HTML manuals.
- Bug fixes:
- - Fix a crash due to incorrect bootstrap ordering. This only impacted
- --enable-debug --enable-dss configurations.
- - Fix a minor statistics bug for mallctl("swap.avail", ...).
- * 2.0.1 (October 29, 2010)
- Bug fixes:
- - Fix a race condition in heap profiling that could cause undefined behavior
- if "opt.prof_accum" were disabled.
- - Add missing mutex unlocks for some OOM error paths in the heap profiling
- code.
- - Fix a compilation error for non-C99 builds.
- * 2.0.0 (October 24, 2010)
- This version focuses on the experimental *allocm() API, and on improved
- run-time configuration/introspection. Nonetheless, numerous performance
- improvements are also included.
- New features:
- - Implement the experimental {,r,s,d}allocm() API, which provides a superset
- of the functionality available via malloc(), calloc(), posix_memalign(),
- realloc(), malloc_usable_size(), and free(). These functions can be used to
- allocate/reallocate aligned zeroed memory, ask for optional extra memory
- during reallocation, prevent object movement during reallocation, etc.
- - Replace JEMALLOC_OPTIONS/JEMALLOC_PROF_PREFIX with MALLOC_CONF, which is
- more human-readable, and more flexible. For example:
- JEMALLOC_OPTIONS=AJP
- is now:
- MALLOC_CONF=abort:true,fill:true,stats_print:true
- - Port to Apple OS X. Sponsored by Mozilla.
- - Make it possible for the application to control thread-->arena mappings via
- the "thread.arena" mallctl.
- - Add compile-time support for all TLS-related functionality via pthreads TSD.
- This is mainly of interest for OS X, which does not support TLS, but has a
- TSD implementation with similar performance.
- - Override memalign() and valloc() if they are provided by the system.
- - Add the "arenas.purge" mallctl, which can be used to synchronously purge all
- dirty unused pages.
- - Make cumulative heap profiling data optional, so that it is possible to
- limit the amount of memory consumed by heap profiling data structures.
- - Add per thread allocation counters that can be accessed via the
- "thread.allocated" and "thread.deallocated" mallctls.
- Incompatible changes:
- - Remove JEMALLOC_OPTIONS and malloc_options (see MALLOC_CONF above).
- - Increase default backtrace depth from 4 to 128 for heap profiling.
- - Disable interval-based profile dumps by default.
- Bug fixes:
- - Remove bad assertions in fork handler functions. These assertions could
- cause aborts for some combinations of configure settings.
- - Fix strerror_r() usage to deal with non-standard semantics in GNU libc.
- - Fix leak context reporting. This bug tended to cause the number of contexts
- to be underreported (though the reported number of objects and bytes were
- correct).
- - Fix a realloc() bug for large in-place growing reallocation. This bug could
- cause memory corruption, but it was hard to trigger.
- - Fix an allocation bug for small allocations that could be triggered if
- multiple threads raced to create a new run of backing pages.
- - Enhance the heap profiler to trigger samples based on usable size, rather
- than request size.
- - Fix a heap profiling bug due to sometimes losing track of requested object
- size for sampled objects.
- * 1.0.3 (August 12, 2010)
- Bug fixes:
- - Fix the libunwind-based implementation of stack backtracing (used for heap
- profiling). This bug could cause zero-length backtraces to be reported.
- - Add a missing mutex unlock in library initialization code. If multiple
- threads raced to initialize malloc, some of them could end up permanently
- blocked.
- * 1.0.2 (May 11, 2010)
- Bug fixes:
- - Fix junk filling of large objects, which could cause memory corruption.
- - Add MAP_NORESERVE support for chunk mapping, because otherwise virtual
- memory limits could cause swap file configuration to fail. Contributed by
- Jordan DeLong.
- * 1.0.1 (April 14, 2010)
- Bug fixes:
- - Fix compilation when --enable-fill is specified.
- - Fix threads-related profiling bugs that affected accuracy and caused memory
- to be leaked during thread exit.
- - Fix dirty page purging race conditions that could cause crashes.
- - Fix crash in tcache flushing code during thread destruction.
- * 1.0.0 (April 11, 2010)
- This release focuses on speed and run-time introspection. Numerous
- algorithmic improvements make this release substantially faster than its
- predecessors.
- New features:
- - Implement autoconf-based configuration system.
- - Add mallctl*(), for the purposes of introspection and run-time
- configuration.
- - Make it possible for the application to manually flush a thread's cache, via
- the "tcache.flush" mallctl.
- - Base maximum dirty page count on proportion of active memory.
- - Compute various additional run-time statistics, including per size class
- statistics for large objects.
- - Expose malloc_stats_print(), which can be called repeatedly by the
- application.
- - Simplify the malloc_message() signature to only take one string argument,
- and incorporate an opaque data pointer argument for use by the application
- in combination with malloc_stats_print().
- - Add support for allocation backed by one or more swap files, and allow the
- application to disable over-commit if swap files are in use.
- - Implement allocation profiling and leak checking.
- Removed features:
- - Remove the dynamic arena rebalancing code, since thread-specific caching
- reduces its utility.
- Bug fixes:
- - Modify chunk allocation to work when address space layout randomization
- (ASLR) is in use.
- - Fix thread cleanup bugs related to TLS destruction.
- - Handle 0-size allocation requests in posix_memalign().
- - Fix a chunk leak. The leaked chunks were never touched, so this impacted
- virtual memory usage, but not physical memory usage.
- * linux_2008082[78]a (August 27/28, 2008)
- These snapshot releases are the simple result of incorporating Linux-specific
- support into the FreeBSD malloc sources.
- --------------------------------------------------------------------------------
- vim:filetype=text:textwidth=80
|