[3.13] GH-133136: Revise QSBR to reduce excess memory held (gh-135473)#136480
Merged
nascheme merged 2 commits intopython:3.13from Jul 30, 2025
Merged
[3.13] GH-133136: Revise QSBR to reduce excess memory held (gh-135473)#136480nascheme merged 2 commits intopython:3.13from
nascheme merged 2 commits intopython:3.13from
Conversation
…35473) The free threading build uses QSBR to delay the freeing of dictionary keys and list arrays when the objects are accessed by multiple threads in order to allow concurrent reads to proceed with holding the object lock. The requests are processed in batches to reduce execution overhead, but for large memory blocks this can lead to excess memory usage. Take into account the size of the memory block when deciding when to process QSBR requests. Also track the amount of memory being held by QSBR for mimalloc pages. Advance the write sequence if this memory exceeds a limit. Advancing the sequence will allow it to be freed more quickly. Process the held QSBR items from the "eval breaker", rather than from `_PyMem_FreeDelayed()`. This gives a higher chance that the global read sequence has advanced enough so that items can be freed. (cherry picked from commit 113de85) Co-authored-by: Neil Schemenauer <nas-github@arctrix.com> Co-authored-by: Sam Gross <colesbury@gmail.com>
This was referenced Jul 9, 2025
Member
Author
|
@Yhg1s This needs release manager approval due to the ABI dump file changing. The ABI change is to the |
Member
|
To be honest I'm more concerned about _PyMem_FreeDelayed's signature change than about the structure change, but given that it's a free-threading only API and I don't think it's been used in any extension modules I'm okay with that. |
Yhg1s
approved these changes
Jul 29, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The free threading build uses QSBR to delay the freeing of dictionary keys and list arrays when the objects are accessed by multiple threads in order to allow concurrent reads to proceed with holding the object lock. The requests are processed in batches to reduce execution overhead, but for large memory blocks this can lead to excess memory usage.
Take into account the size of the memory block when deciding when to process QSBR requests.
Also track the amount of memory being held by QSBR for mimalloc pages. Advance the write sequence if this memory exceeds a limit. Advancing the sequence will allow it to be freed more quickly.
Process the held QSBR items from the "eval breaker", rather than from
_PyMem_FreeDelayed(). This gives a higher chance that the global read sequence has advanced enough so that items can be freed.(cherry picked from commit 113de85)
Co-authored-by: Sam Gross colesbury@gmail.com