b97aec1d61
fit regions are available, use the delayed regions in LIFO order, in order to increase locality of reference. We might expect this to cause delayed regions to be removed from the delay ring buffer more often (since we're now re-using more recently buffered regions), but numerous tests indicate that the overall impact on memory usage tends to be good (reduced fragmentation). Re-work arena_frag_reg_alloc() so that when large free regions are exhausted, it uses small regions in a way that favors contiguous allocation of sequentially allocated small regions. Use arena_frag_reg_alloc() in this capacity, rather than directly attempting over-fitting of small requests when no large regions are available. Remove the bin overfit statistic, since it is no longer relevant due to the arena_frag_reg_alloc() changes. Do not specify arena_frag_reg_alloc() as an inline function. It is too large to benefit much from being inlined, and it is also called in two places, only one of which is in the critical path (the other call bloated arena_reg_alloc()). Call arena_coalesce() for a region before caching it with arena_mru_cache(). Add assertions that detect the attempted caching of adjacent free regions, so that we notice this problem when it is first created, rather than in arena_coalesce(), when it's too late to know how the problem arose. Reported by: Hans Blancke |
||
---|---|---|
.. | ||
alpha | ||
amd64 | ||
arm | ||
compat-43 | ||
db | ||
gdtoa | ||
gen | ||
gmon | ||
i386 | ||
ia64 | ||
include | ||
locale | ||
net | ||
nls | ||
posix1e | ||
powerpc | ||
quad | ||
regex | ||
rpc | ||
softfloat | ||
sparc64 | ||
stdio | ||
stdlib | ||
stdtime | ||
string | ||
sys | ||
uuid | ||
xdr | ||
yp | ||
Makefile |