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

Refactor representation of thread local state. #751

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

Conversation

mjp41
Copy link
Member

@mjp41 mjp41 commented Feb 20, 2025

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.

@mjp41 mjp41 force-pushed the thread_local_refactor branch 2 times, most recently from 318a880 to 0614a01 Compare February 20, 2025 13:52
@mjp41 mjp41 changed the title WIP: Refactor representation of local state. WIP: Refactor representation of thread local state. Feb 20, 2025
@mjp41 mjp41 force-pushed the thread_local_refactor branch 3 times, most recently from 80d24e0 to 0fd6768 Compare February 21, 2025 14:22
@nwf
Copy link
Collaborator

nwf commented Feb 21, 2025

Only found time to make it into "Restrict ThreadAlloc usage to globalalloc", but so far so great. Thanks for nwfifying the commit stack. :D

@mjp41 mjp41 force-pushed the thread_local_refactor branch 5 times, most recently from 41392d1 to 654bcfd Compare February 21, 2025 20:46
Copy link
Collaborator

@nwf nwf left a 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.)

return self->alloc_not_small<zero_mem, CheckInitDefault>(size);
},
size,
this);
Copy link
Collaborator

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.

@mjp41 mjp41 force-pushed the thread_local_refactor branch from 654bcfd to fdab65d Compare February 22, 2025 20:17
@mjp41
Copy link
Member Author

mjp41 commented Feb 22, 2025

@nwf thanks for the comments. I've addressed them. And I landed the first set of commits in #750.

@mjp41 mjp41 force-pushed the thread_local_refactor branch from 94ebdca to 1b3ca06 Compare February 26, 2025 14:47
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.
@mjp41 mjp41 force-pushed the thread_local_refactor branch from 997eed4 to ab58e2f Compare February 27, 2025 16:25
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.
@mjp41 mjp41 force-pushed the thread_local_refactor branch from 295eaa4 to ed81ba7 Compare March 7, 2025 16:02
@mjp41 mjp41 changed the title WIP: Refactor representation of thread local state. Refactor representation of thread local state. Mar 7, 2025
@mjp41 mjp41 requested a review from nwf March 7, 2025 20:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants