Skip to content
  1. Nov 03, 2016
  2. Nov 02, 2016
    • Jason Evans's avatar
      Force no lazy-lock on Windows. · eee1ca65
      Jason Evans authored
      Monitoring thread creation is unimplemented for Windows, which means
      lazy-lock cannot function correctly.
      
      This resolves #310.
      eee1ca65
  3. Nov 01, 2016
  4. Oct 31, 2016
  5. Oct 30, 2016
  6. Oct 29, 2016
    • Jason Evans's avatar
      Do not mark malloc_conf as weak on Windows. · 1dcd0aa0
      Jason Evans authored
      This works around malloc_conf not being properly initialized by at least
      the cygwin toolchain.  Prior build system changes to use
      -Wl,--[no-]whole-archive may be necessary for malloc_conf resolution to
      work properly as a non-weak symbol (not tested).
      1dcd0aa0
    • Jason Evans's avatar
      Do not mark malloc_conf as weak for unit tests. · 6ec2d8e2
      Jason Evans authored
      This is generally correct (no need for weak symbols since no jemalloc
      library is involved in the link phase), and avoids linking problems
      (apparently unininitialized non-NULL malloc_conf) when using cygwin with
      gcc.
      6ec2d8e2
    • Dave Watson's avatar
      Support static linking of jemalloc with glibc · 83093884
      Dave Watson authored
      glibc defines its malloc implementation with several weak and strong
      symbols:
      
      strong_alias (__libc_calloc, __calloc) weak_alias (__libc_calloc, calloc)
      strong_alias (__libc_free, __cfree) weak_alias (__libc_free, cfree)
      strong_alias (__libc_free, __free) strong_alias (__libc_free, free)
      strong_alias (__libc_malloc, __malloc) strong_alias (__libc_malloc, malloc)
      
      The issue is not with the weak symbols, but that other parts of glibc
      depend on __libc_malloc explicitly.  Defining them in terms of jemalloc
      API's allows the linker to drop glibc's malloc.o completely from the link,
      and static linking no longer results in symbol collisions.
      
      Another wrinkle: jemalloc during initialization calls sysconf to
      get the number of CPU's.  GLIBC allocates for the first time before
      setting up isspace (and other related) tables, which are used by
      sysconf.  Instead, use the pthread API to get the number of
      CPUs with GLIBC, which seems to work.
      
      This resolves #442.
      83093884
  7. Oct 28, 2016
  8. Oct 26, 2016
    • Jason Evans's avatar
      Use --whole-archive when linking integration tests on MinGW. · 7b24c6e5
      Jason Evans authored
      Prior to this change, the malloc_conf weak symbol provided by the
      jemalloc dynamic library is always used, even if the application
      provides a malloc_conf symbol.  Use the --whole-archive linker option
      to allow the weak symbol to be overridden.
      7b24c6e5
  9. Oct 21, 2016
  10. Oct 14, 2016
    • Jason Evans's avatar
      Make dss operations lockless. · 577d4572
      Jason Evans authored
      Rather than protecting dss operations with a mutex, use atomic
      operations.  This has negligible impact on synchronization overhead
      during typical dss allocation, but is a substantial improvement for
      extent_in_dss() and the newly added extent_dss_mergeable(), which can be
      called multiple times during extent deallocations.
      
      This change also has the advantage of avoiding tsd in deallocation paths
      associated with purging, which resolves potential deadlocks during
      thread exit due to attempted tsd resurrection.
      
      This resolves #425.
      577d4572
  11. Oct 13, 2016
    • Jason Evans's avatar
      Add/use adaptive spinning. · e5effef4
      Jason Evans authored
      Add spin_t and spin_{init,adaptive}(), which provide a simple
      abstraction for adaptive spinning.
      
      Adaptively spin during busy waits in bootstrapping and rtree node
      initialization.
      e5effef4
  12. Oct 12, 2016
    • Jason Evans's avatar
      Remove all vestiges of chunks. · 9acd5cf1
      Jason Evans authored
      Remove mallctls:
      - opt.lg_chunk
      - stats.cactive
      
      This resolves #464.
      9acd5cf1
    • Jason Evans's avatar
      Remove ratio-based purging. · 63b5657a
      Jason Evans authored
      Make decay-based purging the default (and only) mode.
      
      Remove associated mallctls:
      - opt.purge
      - opt.lg_dirty_mult
      - arena.<i>.lg_dirty_mult
      - arenas.lg_dirty_mult
      - stats.arenas.<i>.lg_dirty_mult
      
      This resolves #385.
      63b5657a
    • Jason Evans's avatar
      Fix and simplify decay-based purging. · b4b4a778
      Jason Evans authored
      Simplify decay-based purging attempts to only be triggered when the
      epoch is advanced, rather than every time purgeable memory increases.
      In a correctly functioning system (not previously the case; see below),
      this only causes a behavior difference if during subsequent purge
      attempts the least recently used (LRU) purgeable memory extent is
      initially too large to be purged, but that memory is reused between
      attempts and one or more of the next LRU purgeable memory extents are
      small enough to be purged.  In practice this is an arbitrary behavior
      change that is within the set of acceptable behaviors.
      
      As for the purging fix, assure that arena->decay.ndirty is recorded
      *after* the epoch advance and associated purging occurs.  Prior to this
      fix, it was possible for purging during epoch advance to cause a
      substantially underrepresentative (arena->ndirty - arena->decay.ndirty),
      i.e. the number of dirty pages attributed to the current epoch was too
      low, and a series of unintended purges could result.  This fix is also
      relevant in the context of the simplification described above, but the
      bug's impact would be limited to over-purging at epoch advances.
      b4b4a778
    • Jason Evans's avatar
      48993ed5