-
-
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
The new marking loop has a regression when marking arrays of pointers #49205
Comments
Seems like #49185 is adding a GC bit to encode whether an object is in the image. Why could that amplify a potential regression when marking large arrays of pointers? |
That PR is doing two different GC fixes, I haven't updated the title. It also fixes a behaviour where we stopped increasing the interval size when encountering many pointers which led to the regression in #49120. It's just that it seems we were doing so many GCs that it hid whatever is going on. |
I can reproduce the performance difference across Most of the degradation seems to be coming from chunking (batching mechanism we use to mark large arrays of pointers): |
I think the chunking itself is fine, if you look it's all in the hot loop of the function. |
I'm inclined to say it's coming from chunking. After increasing the batch size This is not necessarily a solution, but could suggest that our chunking algorithm may need some adjustments. |
Oh, that's quite interesting. |
CC: @vchuravy |
When looking into #49120, it seems the regression seen there was hiding a part of the new mark loop where it's slower when marking a very large array of pointers.
One of the GCs after will do a full mark of the array and take a long time to do it. This probably wasn't seen before because arrays of many pointers had really bad GC behaviour overall, but with #49185 it's quite clear.
The text was updated successfully, but these errors were encountered: