Launch 5.4.0 · jemalloc/jemalloc · GitHub


This launch comprises over 160 commits, specializing in the technical money owed
cleansing together with refactorings, bug fixes, take a look at protection enchancment, and
choice cleanups. The launch additionally contains portability enhancements per
upstream points report.

New options:

  • Add EXTENT_ALLOC_FLAG_PINNED so customized extent-allocation hooks can
    mark non-reclaimable mappings, akin to HugeTLB pages, for preferential
    reuse outdoors the decay and purge pipeline. Add the mallctl interfaces
    stats.pinned, stats.arenas..pinned,
    stats.arenas..extents..npinned,
    stats.arenas..extents..pinned_bytes, and
    stats.arenas..mutexes.extents_pinned.{counter} to report
    pinned-memory utilization and mutex statistics. (@binliu19: be2de8c)
  • Allow resuming per-CPU area choice through thread.area.
    (@Algunenano: 68c35f6)
  • Better align the contents of human-readable and JSON malloc statistics.
    (@spredolac: 68fe1be, 30b1a41, 04aad97)
  • Replace the runtime experimental_infallible_new choice with the
    compile-time --enable-cxx-infallible-new choice, enabling
    compiler-level optimizations and optimization in transfer constructors,
    and repair the new(std::nothrow) contract (@spredolac: 160ab9d, fe33667)

Incompatible modifications:

  • Adapt tcache fill and retention targets per bin to demand noticed
    between GC occasions, changing the fastened refill/flush coverage. Remove
    seven legacy non-experimental controls: lg_tcache_nslots_mul,
    tcache_nslots_small_min, tcache_nslots_small_max,
    tcache_nslots_large, tcache_gc_delay_bytes,
    lg_tcache_flush_small_div, and lg_tcache_flush_large_div.
    Corresponding malloc_conf settings are silently ignored, matching
    decide.* mallctls return ENOENT, and tcache_ncached_max stays
    supported. (@spredolac: d13fe91)

Bug fixes:

  • Preserve errno throughout free, free_sized, and free_aligned_sized,
    and throughout process_madvise-based web page purging. (@spredolac: 3a77966,
    86f0582)
  • Fix numeric overflow checks in measurement courses. (@spredolac: 6b24522)
  • Accept NULL in free_sized() and free_aligned_sized() (C23
    correctness). (@bigbruno: 7ce8b91)
  • Fix TSD lifecycle edge instances by 1) initializing thread-cache bins earlier than
    marking the cache enabled, stopping reentrant bootstrap allocations
    from utilizing uninitialized state, and a pair of) avoiding TSD recreation for late
    deallocations after thread teardown on generic-TSD platforms.
    (@fzakaria: 54f22c8, @spredolac: fb5499a)
  • Use O_CLOEXEC when opening the THP sysfs file in init_thp_state.
    (@ibookstein: d070554)
  • Fix duplicate decide.stats_print and decide.stats_print_opts fields in
    malloc_stats_print output. (@spredolac: dfe3a2e)
  • Fix a possible impasse throughout arena_reset. (@guangli-dai: 6957341)
  • Fix a prof-sampling / guard-page interplay bug within the SAN. (@gctony:
    e36a0fa)

Optimizations and refactors:

  • Modularize jemalloc’s entrance finish by extracting area administration,
    initialization, fork orchestration, and allocation dispatch from
    jemalloc.c; untangle tcache/area possession; and consolidate the
    inside header graph to remove round dependencies. (@spredolac:
    ba1e2fe, 8874597, 9d75722, de9ad14, …)
  • Simplify ctl dispatch by refactoring area helpers, internalizing an
    implementation-only management, changing control-flow macros with typed
    helpers, and organizing ctl.c by subsystem. (@spredolac: 9e14346,
    901365d, 4e903a0, 5bc8d6e)
  • Cap the base-block progress heuristic to keep away from virtual-memory exhaustion
    below uncommon racy situations. (@guangli-dai: 2f4db8c)
  • Move background-thread lifecycle and state operations into the
    background-thread module, clarifying possession independently of PAC/HPA
    callers. (@guangli-dai: f1f0792)
  • Simplify the page-allocation boundary by changing PAI vtable dispatch
    with direct PAC/HPA calls, eradicating the out of date pai_t/pai.h
    abstraction, and shifting deferred-work and decay orchestration out of the
    area. (@guangli-dai: 1dfa6f7, 8edd101, d410f43)
  • Refactor statistics assortment and rendering into separate
    collect/emission levels and descriptor-driven tables. (@spredolac:
    184f304, 80c8fcb)
  • Introduce an OS abstraction layer and transfer platform-dependent
    file/course of I/O, time, synchronization, CPU, virtual-memory, atfork,
    error-handling, profiling, thread-yield, and configuration-access
    operations out of allocator core code. (@guangli-dai: c4158ac,
    c8e2e01, …)

Portability enhancements:

  • Replace the std::__throw_bad_alloc name with customary C++ (#2900).
    (@lexprfuncall: 1a15fe3)
  • Make arena_s use a versatile array member (bin_t all_bins[]) for C99
    or newer. (@grueninger: 300b58b)
  • Fix rdtscp detection with --with-lg-vaddr. (@xinydev: e8a0d2b)
  • Fix malloc_getcpu on macOS to learn the present CPU quantity appropriately.
    (@Algunenano: 5aabbc8)
  • Use CLOCK_MONOTONIC for background-thread sleep to forestall
    clock-rollback stalls, and detect monotonic-condvar assist at configure
    time. (@antonio2368: ebacec3, 8361239)
  • Fix compilation warnings on macOS. (@gctony: abb0a8a)
  • Fix thread-exit TSD cleanup on MinGW builds. (@gctony: 1e92317)
  • Fix GCC 16 construct warnings by eradicating -Wpedantic violations in macro
    and performance syntax and explicitly NUL-terminating profiling thread-name
    copies to resolve -Wstringop-truncation. (@grueninger: 5acdcee,
    c22d929, @jasonangelov: 6a245e0)
  • Parse PID-namespace symlinks with out glibc-dependent strtok/atol,
    and return identifiers as uint64_t. (@guangli-dai: 278d90a)



Source link