Commit 4c793097 authored by Mike Hommey's avatar Mike Hommey Committed by Georg Koppen
Browse files

Bug 1254850 - Update jemalloc 4 to version 4.1.0. r=njn

parent 4d4da978
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -19,12 +19,15 @@ UNIFIED_SOURCES += [
    'src/src/jemalloc.c',
    'src/src/mb.c',
    'src/src/mutex.c',
    'src/src/nstime.c',
    'src/src/pages.c',
    'src/src/prng.c',
    'src/src/prof.c',
    'src/src/quarantine.c',
    'src/src/rtree.c',
    'src/src/stats.c',
    'src/src/tcache.c',
    'src/src/ticker.c',
    'src/src/tsd.c',
    'src/src/util.c',
    # FIXME do we ever want valgrind.c?
@@ -76,3 +79,5 @@ LOCAL_INCLUDES += [

# We allow warnings for third-party code that can be updated from upstream.
ALLOW_COMPILER_WARNINGS = True

OS_LIBS += CONFIG['REALTIME_LIBS']
+73 −0
Original line number Diff line number Diff line
@@ -4,6 +4,79 @@ brevity. Much more detail can be found in the git revision history:

    https://github.com/jemalloc/jemalloc

* 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, Christopher Ferris)
  - 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.  (Christopher Ferris, @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
+8 −0
Original line number Diff line number Diff line
@@ -84,6 +84,14 @@ any of the following arguments (not a definitive list) to 'configure':
    versions of jemalloc can coexist in the same installation directory.  For
    example, libjemalloc.so.0 becomes libjemalloc<suffix>.so.0.

--with-malloc-conf=<malloc_conf>
    Embed <malloc_conf> as a run-time options string that is processed prior to
    the malloc_conf global variable, the /etc/malloc.conf symlink, and the
    MALLOC_CONF environment variable.  For example, to change the default chunk
    size to 256 KiB:

      --with-malloc-conf=lg_chunk:18

--disable-cc-silence
    Disable code that silences non-useful compiler warnings.  This is mainly
    useful during development when auditing the set of warnings that are being
+40 −13
Original line number Diff line number Diff line
@@ -78,15 +78,32 @@ LIBJEMALLOC := $(LIBPREFIX)jemalloc$(install_suffix)
# Lists of files.
BINS := $(objroot)bin/jemalloc-config $(objroot)bin/jemalloc.sh $(objroot)bin/jeprof
C_HDRS := $(objroot)include/jemalloc/jemalloc$(install_suffix).h
C_SRCS := $(srcroot)src/jemalloc.c $(srcroot)src/arena.c \
	$(srcroot)src/atomic.c $(srcroot)src/base.c $(srcroot)src/bitmap.c \
	$(srcroot)src/chunk.c $(srcroot)src/chunk_dss.c \
	$(srcroot)src/chunk_mmap.c $(srcroot)src/ckh.c $(srcroot)src/ctl.c \
	$(srcroot)src/extent.c $(srcroot)src/hash.c $(srcroot)src/huge.c \
	$(srcroot)src/mb.c $(srcroot)src/mutex.c $(srcroot)src/pages.c \
	$(srcroot)src/prof.c $(srcroot)src/quarantine.c $(srcroot)src/rtree.c \
	$(srcroot)src/stats.c $(srcroot)src/tcache.c $(srcroot)src/util.c \
	$(srcroot)src/tsd.c
C_SRCS := $(srcroot)src/jemalloc.c \
	$(srcroot)src/arena.c \
	$(srcroot)src/atomic.c \
	$(srcroot)src/base.c \
	$(srcroot)src/bitmap.c \
	$(srcroot)src/chunk.c \
	$(srcroot)src/chunk_dss.c \
	$(srcroot)src/chunk_mmap.c \
	$(srcroot)src/ckh.c \
	$(srcroot)src/ctl.c \
	$(srcroot)src/extent.c \
	$(srcroot)src/hash.c \
	$(srcroot)src/huge.c \
	$(srcroot)src/mb.c \
	$(srcroot)src/mutex.c \
	$(srcroot)src/nstime.c \
	$(srcroot)src/pages.c \
	$(srcroot)src/prng.c \
	$(srcroot)src/prof.c \
	$(srcroot)src/quarantine.c \
	$(srcroot)src/rtree.c \
	$(srcroot)src/stats.c \
	$(srcroot)src/tcache.c \
	$(srcroot)src/ticker.c \
	$(srcroot)src/tsd.c \
	$(srcroot)src/util.c
ifeq ($(enable_valgrind), 1)
C_SRCS += $(srcroot)src/valgrind.c
endif
@@ -116,10 +133,11 @@ C_TESTLIB_SRCS := $(srcroot)test/src/btalloc.c $(srcroot)test/src/btalloc_0.c \
	$(srcroot)test/src/mtx.c $(srcroot)test/src/mq.c \
	$(srcroot)test/src/SFMT.c $(srcroot)test/src/test.c \
	$(srcroot)test/src/thd.c $(srcroot)test/src/timer.c
C_UTIL_INTEGRATION_SRCS := $(srcroot)src/util.c
C_UTIL_INTEGRATION_SRCS := $(srcroot)src/nstime.c $(srcroot)src/util.c
TESTS_UNIT := $(srcroot)test/unit/atomic.c \
	$(srcroot)test/unit/bitmap.c \
	$(srcroot)test/unit/ckh.c \
	$(srcroot)test/unit/decay.c \
	$(srcroot)test/unit/hash.c \
	$(srcroot)test/unit/junk.c \
	$(srcroot)test/unit/junk_alloc.c \
@@ -129,6 +147,7 @@ TESTS_UNIT := $(srcroot)test/unit/atomic.c \
	$(srcroot)test/unit/math.c \
	$(srcroot)test/unit/mq.c \
	$(srcroot)test/unit/mtx.c \
	$(srcroot)test/unit/prng.c \
	$(srcroot)test/unit/prof_accum.c \
	$(srcroot)test/unit/prof_active.c \
	$(srcroot)test/unit/prof_gdump.c \
@@ -140,9 +159,13 @@ TESTS_UNIT := $(srcroot)test/unit/atomic.c \
	$(srcroot)test/unit/quarantine.c \
	$(srcroot)test/unit/rb.c \
	$(srcroot)test/unit/rtree.c \
	$(srcroot)test/unit/run_quantize.c \
	$(srcroot)test/unit/SFMT.c \
	$(srcroot)test/unit/size_classes.c \
	$(srcroot)test/unit/smoothstep.c \
	$(srcroot)test/unit/stats.c \
	$(srcroot)test/unit/ticker.c \
	$(srcroot)test/unit/nstime.c \
	$(srcroot)test/unit/tsd.c \
	$(srcroot)test/unit/util.c \
	$(srcroot)test/unit/zero.c
@@ -349,18 +372,22 @@ stress_dir:
check_dir: check_unit_dir check_integration_dir

check_unit: tests_unit check_unit_dir
	$(SHELL) $(objroot)test/test.sh $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%)
	$(MALLOC_CONF)="purge:ratio" $(SHELL) $(objroot)test/test.sh $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%)
	$(MALLOC_CONF)="purge:decay" $(SHELL) $(objroot)test/test.sh $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%)
check_integration_prof: tests_integration check_integration_dir
ifeq ($(enable_prof), 1)
	$(MALLOC_CONF)="prof:true" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
	$(MALLOC_CONF)="prof:true,prof_active:false" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
endif
check_integration_decay: tests_integration check_integration_dir
	$(MALLOC_CONF)="purge:decay,decay_time:-1" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
	$(MALLOC_CONF)="purge:decay,decay_time:0" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
	$(MALLOC_CONF)="purge:decay" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
check_integration: tests_integration check_integration_dir
	$(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
stress: tests_stress stress_dir
	$(SHELL) $(objroot)test/test.sh $(TESTS_STRESS:$(srcroot)%.c=$(objroot)%)
check: tests check_dir check_integration_prof
	$(SHELL) $(objroot)test/test.sh $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%) $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
check: check_unit check_integration check_integration_decay check_integration_prof

ifeq ($(enable_code_coverage), 1)
coverage_unit: check_unit
+1 −1
Original line number Diff line number Diff line
4.0.4-12-g3a92319ddc5610b755f755cbbbd12791ca9d0c3d
4.1.0-0-gdf900dbfaf4835d3efc06d771535f3e781544913
Loading