diff options
author | Jason Evans <jasone@canonware.com> | 2015-01-31 06:54:08 (GMT) |
---|---|---|
committer | Jason Evans <jasone@canonware.com> | 2015-02-05 00:51:53 (GMT) |
commit | 8d0e04d42f4750970ac3052a6c76379b60aba5dc (patch) | |
tree | 25d71a94a914eb4f69c524f14b5f8d28eaf01881 /src/ckh.c | |
parent | c810fcea1fa7983ef5bcabe6556cdc19dde6dd8d (diff) | |
download | jemalloc-8d0e04d42f4750970ac3052a6c76379b60aba5dc.zip jemalloc-8d0e04d42f4750970ac3052a6c76379b60aba5dc.tar.gz jemalloc-8d0e04d42f4750970ac3052a6c76379b60aba5dc.tar.bz2 |
Refactor rtree to be lock-free.
Recent huge allocation refactoring associates huge allocations with
arenas, but it remains necessary to quickly look up huge allocation
metadata during reallocation/deallocation. A global radix tree remains
a good solution to this problem, but locking would have become the
primary bottleneck after (upcoming) migration of chunk management from
global to per arena data structures.
This lock-free implementation uses double-checked reads to traverse the
tree, so that in the steady state, each read or write requires only a
single atomic operation.
This implementation also assures that no more than two tree levels
actually exist, through a combination of careful virtual memory
allocation which makes large sparse nodes cheap, and skipping the root
node on x64 (possible because the top 16 bits are all 0 in practice).
Diffstat (limited to 'src/ckh.c')
0 files changed, 0 insertions, 0 deletions