author | Justin Lebar <justin.lebar@gmail.com> |
Wed, 05 Oct 2011 14:03:39 -0400 | |
changeset 78168 | b74a2b87a8286b559ee48b4fccf5323273bec428 |
parent 78167 | e6e18c92ea805e7e2ef1672494a7f9c5489af7f9 |
child 78169 | cdcfb799ff509e737c645daf2ece2e122de63ab7 |
push id | 21275 |
push user | bmo@edmorley.co.uk |
push date | Thu, 06 Oct 2011 10:15:46 +0000 |
treeherder | mozilla-central@f107192c7d59 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | khuey |
bugs | 691003 |
milestone | 10.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/memory/jemalloc/jemalloc.c +++ b/memory/jemalloc/jemalloc.c @@ -77,16 +77,20 @@ * | | 1020 kB | * |=====================================| * | Huge | 1 MB | * | | 2 MB | * | | 3 MB | * | | ... | * |=====================================| * + * NOTE: Due to Mozilla bug 691003, we cannot reserve less than one word for an + * allocation on Linux or Mac. So on 32-bit *nix, the smallest bucket size is + * 4 bytes, and on 64-bit, the smallest bucket size is 8 bytes. + * * A different mechanism is used for each category: * * Small : Each size class is segregated into its own set of runs. Each run * maintains a bitmap of which regions are free/allocated. * * Large : Each allocation is backed by a dedicated run. Metadata are stored * in the associated arena chunk header maps. * @@ -421,17 +425,17 @@ static const bool __isthreaded = true; #endif # define inline #endif /* Size of stack-allocated buffer passed to strerror_r(). */ #define STRERROR_BUF 64 -/* Minimum alignment of allocations is 2^QUANTUM_2POW_MIN bytes. */ +/* Minimum alignment of non-tiny allocations is 2^QUANTUM_2POW_MIN bytes. */ # define QUANTUM_2POW_MIN 4 #ifdef MOZ_MEMORY_SIZEOF_PTR_2POW # define SIZEOF_PTR_2POW MOZ_MEMORY_SIZEOF_PTR_2POW #else # define SIZEOF_PTR_2POW 2 #endif #define PIC #ifndef MOZ_MEMORY_DARWIN @@ -510,18 +514,25 @@ static const bool __isthreaded = true; /* * Maximum size of L1 cache line. This is used to avoid cache line aliasing, * so over-estimates are okay (up to a point), but under-estimates will * negatively affect performance. */ #define CACHELINE_2POW 6 #define CACHELINE ((size_t)(1U << CACHELINE_2POW)) -/* Smallest size class to support. */ +/* + * Smallest size class to support. On Linux and Mac, even malloc(1) must + * reserve a word's worth of memory (see Mozilla bug 691003). + */ +#ifdef MOZ_MEMORY_WINDOWS #define TINY_MIN_2POW 1 +#else +#define TINY_MIN_2POW (sizeof(void*) == 8 ? 3 : 2) +#endif /* * Maximum size class that is a multiple of the quantum, but not (necessarily) * a power of 2. Above this size, allocations are rounded up to the nearest * power of 2. */ #define SMALL_MAX_2POW_DEFAULT 9 #define SMALL_MAX_DEFAULT (1U << SMALL_MAX_2POW_DEFAULT)