Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Mar 2007 03:44:11 +0000 (UTC)
From:      Jason Evans <jasone@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/lib/libc/stdlib malloc.c
Message-ID:  <200703200344.l2K3iBlg029449@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
jasone      2007-03-20 03:44:10 UTC

  FreeBSD src repository

  Modified files:
    lib/libc/stdlib      malloc.c 
  Log:
  Avoid using vsnprintf(3) unless MALLOC_STATS is defined, in order to
  avoid substantial potential bloat for static binaries that do not
  otherwise use any printf(3)-family functions. [1]
  
  Rearrange arena_run_t so that the region bitmask can be minimally sized
  according to constraints related to each bin's size class.  Previously,
  the region bitmask was the same size for all run headers, which wasted
  a measurable amount of memory.
  
  Rather than making runs for small objects as large as possible, make
  runs as small as possible such that header overhead stays below a
  certain bound.  There are two exceptions that override the header
  overhead bound:
  
          1) If the bound is impossible to honor, it is relaxed on a
             per-size-class basis.  Since there is one bit of header
             overhead per object (plus a constant), it is impossible to
             achieve a header overhead less than or equal to 1/(# of bits
             per object).  For the current setting of maximum 0.5% header
             overhead, this relaxation comes into play for {2, 4, 8,
             16}-byte objects, for which header overhead is (on 64-bit
             systems) {7.1, 4.3, 2.2, 1.2}%, respectively.
  
          2) There is still a cap on small run size, still set to 64kB.
             This comes into play for {1024, 2048}-byte objects, for which
             header overhead is {1.6, 3.1}%, respectively.
  
  In practice, this reduces the run sizes, which makes worst case
  low-water memory usage due to fragmentation less bad.  It also reduces
  worst case high-water run fragmentation due to non-full runs, but this
  is only a constant improvement (most important to small short-lived
  processes).
  
  Reduce the default chunk size from 2MB to 1MB.  Benchmarks indicate that
  the external fragmentation reduction makes 1MB the new sweet spot (as
  small as possible without adversely affecting performance).
  
  Reported by:    [1] kientzle
  
  Revision  Changes    Path
  1.141     +235 -154  src/lib/libc/stdlib/malloc.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200703200344.l2K3iBlg029449>