Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unionize actor heap large and small chunks #4568

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

dipinhora
Copy link
Contributor

So they can better fight for their rights..

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.

@ponylang-main ponylang-main added the discuss during sync Should be discussed during an upcoming sync label Dec 6, 2024
@jemc
Copy link
Member

jemc commented Dec 10, 2024

Looks like the CI failure is unrelated. It seems we need to update some GitHub Actions versions in our CI workflows.

@SeanTAllen
Copy link
Member

@dipinhora please rebase this against main when you have a chance.

So they can better fight for their rights..

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.
@dipinhora
Copy link
Contributor Author

rebased

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discuss during sync Should be discussed during an upcoming sync
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants