From: Tomislav Novak Date: Fri, 24 Oct 2014 18:46:51 +0000 (-0700) Subject: Fix large size class category handling in folly::goodMallocSize() X-Git-Tag: v0.22.0~210 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3bcf918f9140d6478cfc0c283523d210d20cff61;p=folly.git Fix large size class category handling in folly::goodMallocSize() Summary: jemalloc seems to now use `4064 * 1024` as `arena_maxclass`. Therefore, allocations that fall in the range `(4064*1024, 4072*1024]` will trigger an assert in `folly::goodMallocSize()` (`nallocx()` will round up sizes within that range up to the next multiple of 4 MB (chunk size)). Test Plan: Call to `folly::goodMallocSize(4161568)` no longer triggeres an assert. Reviewed By: je@fb.com Subscribers: aalexandre, trunkagent, njormrod, folly-diffs@ FB internal diff: D1638370 Signature: t1:1638370:1414703429:f3ed2cc8dcb183ff4e8367e2c1f884e122605cba --- diff --git a/folly/Malloc.h b/folly/Malloc.h index fb81eb7f..1b9c74d2 100644 --- a/folly/Malloc.h +++ b/folly/Malloc.h @@ -140,18 +140,11 @@ inline size_t goodMallocSize(size_t minSize) noexcept { // Round up to the next multiple of 64; we don't want to trip over // cache line boundaries. goodSize = (minSize + 63) & ~size_t(63); - } else if (minSize <= 3584) { - // Round up to the next multiple of 256. For some size classes jemalloc - // will additionally round up to the nearest multiple of 512, hence the - // nallocx() call. - goodSize = nallocx((minSize + 255) & ~size_t(255), 0); - } else if (minSize <= 4072 * 1024) { - // Round up to the next multiple of 4KB - goodSize = (minSize + 4095) & ~size_t(4095); } else { - // Holy Moly - // Round up to the next multiple of 4MB - goodSize = (minSize + 4194303) & ~size_t(4194303); + // Boundaries between size classes depend on numerious factors, some of + // which can even be modified at run-time. Determine the good allocation + // size by calling nallocx() directly. + goodSize = nallocx(minSize, 0); } assert(nallocx(goodSize, 0) == goodSize); return goodSize;