-
Notifications
You must be signed in to change notification settings - Fork 112
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
Refactor representation of thread local state. #751
base: main
Are you sure you want to change the base?
Conversation
318a880
to
0614a01
Compare
80d24e0
to
0fd6768
Compare
Only found time to make it into "Restrict ThreadAlloc usage to globalalloc", but so far so great. Thanks for nwfifying the commit stack. :D |
41392d1
to
654bcfd
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This continues to look really nice. (Read up through "WIP", exclusive.)
src/snmalloc/mem/localalloc.h
Outdated
return self->alloc_not_small<zero_mem, CheckInitDefault>(size); | ||
}, | ||
size, | ||
this); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's a bit of a pity that something so formulaic can't, AFAIK, be templated away.
654bcfd
to
fdab65d
Compare
94ebdca
to
1b3ca06
Compare
The check init code was tightly integrated into LocalAllocator. This commit pull that code out into ThreadAlloc, and passes a template parameter into the remaining LocalAllocator to perform the relevant TLS manipulations. This removes some of the awkward layering around register_clean_up.
Fully disable lotsofthreads test Need to investigate if the test is unreliable, or we have actually regressed perf. A quick mimalloc-bench didn't show any regressions.
This introduces one additional branch on when processing a batch of messages, but it is likely to only be hit when a lot of messages are processed.
997eed4
to
ab58e2f
Compare
This combines the notion of CoreAlloc, LocalAlloc and LocalCache into a single class. Previously, these were separated so that a more complex structure would be stored directly in the TLS. This however, proved to be bad for compatibility if the allocator is part of the libc implementation. This commit collapses all the stages of the allocator into a single class. This simplifies the sequencing and overall is a nice reduction in complexity.
295eaa4
to
ed81ba7
Compare
Change thread local state to be a single pointer to a backend allocated structure. Previously, the TLS contained a complex structure, but that didn't interact well with loading numerous copies at once.