Skip to content

Commit

Permalink
Unionize actor heap large and small chunks (#4568)
Browse files Browse the repository at this point in the history
Prior to this commit, small_chunk_t and large_chunk_t were distinct
types. This was great for correctness but prevented a useful
optimization.

This commit changes things so that small_chunk_t and large_chunk_t
have been combined into chunk_t which has a union in it for the
small/large chunk specific fields. There are now a lot of assertions
added in the relevant functions that deal with small and large
chunks to ensure that the received chunk is of the right type
because the compiler can no longer help enforce correctness.

This allows for small and large chunk recycling to take advantage
of the fact that the block backing a small chunk is the same size
as the block backing the smallest large chunk size allowed so they
both now use the same recycled chunk list.

The large chunk recycling has also been enhanced to take advantage
of the long tail distribution of allocation sizes and there are now
multiple size specific chunk lists for large chunk recycling with
one extra large chunk list for recycling that has all chunks
bigger than the largest size specific list that is kept sorted
and searched/used as the old large chunk recycling list was.
  • Loading branch information
dipinhora authored Jan 14, 2025
1 parent 1f5607b commit e46038b
Show file tree
Hide file tree
Showing 4 changed files with 359 additions and 262 deletions.
Loading

0 comments on commit e46038b

Please sign in to comment.