Don't dereference chunk->arena in free() hot path

When you call free() we load chunk->arena even though that
data isn't used on the tcache hot path.

In profiling some FB applications, I found that ~30% of the
dTLB misses in the free() function come from this line. With
4 MB chunks, the arena_chunk_t->map is ~ 32 KB (1024 pages
in the chunk, 4 8 byte pointers in arena_chunk_map_t). This
means there's only a 1/8 chance of the page containing
chunk->arena also comtaining the map bits.
This commit is contained in:
Ben Maurer
2014-04-05 15:59:08 -07:00
parent 46c0af68bd
commit be8e59f5a6
3 changed files with 6 additions and 9 deletions

View File

@@ -895,7 +895,7 @@ idalloct(void *ptr, bool try_tcache)
chunk = (arena_chunk_t *)CHUNK_ADDR2BASE(ptr);
if (chunk != ptr)
arena_dalloc(chunk->arena, chunk, ptr, try_tcache);
arena_dalloc(chunk, ptr, try_tcache);
else
huge_dalloc(ptr, true);
}