-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
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
optimize remset marking #52476
optimize remset marking #52476
Conversation
I wonder if we can do something like this for the chunks, because currently only one thread can take pieces of a chunk at a time, and ideally we should be able to fully split the chunk up so that everyone can work on it at once |
Sorry about the delay. Not sure if I can see how to use this pointer tagging for chunks? Could you elaborate? |
2469bd4
to
44c1316
Compare
This seems like a clear improvement in GC time for the
|
I guess it wouldn't be pointer tagging for the chunks, it would probably need to be a heap allocated object, or at least something that's reachable by all threads, but this change lgtm. |
44c1316
to
734b913
Compare
Good to go since the benchmarks seemed to look good? @d-netto |
Sorry about the delay. Have been OOO these days and not checking GH notifications very frequently. We didn't assess the performance impact of this change at RAI yet, so I'd prefer to hold this PR for now. |
734b913
to
3e91c69
Compare
Have benchmarked it with the new extended suite from GCBenchmarks. Seems like a win for the multithreaded benchmarks. master
PR
|
Tag the lowest bit of a pointer to indicate it's in the remset and enqueue objects in the remset for later processing when GC threads have woken up, instead of sequentially marking them all at once. In principle, this should allow for more parallelism in the mark phase, though I didn't benchmark it yet.
Tag the lowest bit of a pointer to indicate it's in the remset and enqueue objects in the remset for later processing when GC threads have woken up, instead of sequentially marking them all at once. In principle, this should allow for more parallelism in the mark phase, though I didn't benchmark it yet.
Tag the lowest bit of a pointer to indicate it's in the remset and enqueue objects in the remset for later processing when GC threads have woken up, instead of sequentially marking them all at once. In principle, this should allow for more parallelism in the mark phase, though I didn't benchmark it yet.
Tag the lowest bit of a pointer to indicate it's in the remset and enqueue objects in the remset for later processing when GC threads have woken up, instead of sequentially marking them all at once.
In principle, this should allow for more parallelism in the mark phase, though I didn't benchmark it yet.