gh-132657: Avoid locks and refcounts in frozenset operations #136107
+25
−10
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.
See the corresponding issue for the rationale.
The PR improves performance of the frozenset operations under the FT build. A benchmark:
Script
Results on main (interleaved benchmark)
Results on PR (interleaved benchmark)
The benchmark "frozenset" is improved since this triggers the path taken by the adaptive interpreter for
z in s
.The two dunder benchmarks use
s.__contains__(z)
.The FT scaling performance is not improved a lot. This is probably due to refcount contention on the global objects (the set and frozenset). Because the operation itself is faster, the scaling performance itself looks worse.
Script adapted from the ftscalingbench.py
Results on main
Results on PR