perf: Don't create new sets when checking compatibility #1953
+41
−2
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.
Fixes #N/A
Description
This change adds the
HasIntersection
method which allows theIntersects
check to validate whether two keys have an intersection with their values without creating new sets under the hood -- greatly reducing the number of allocations that we do for sets and reducing the amount of time that the garbage collector needs to spend cleaning them up.These changes were executed against the scheduling benchmark (which showed negligible performance changes) and a live test that deploys 20,000 pods to the cluster and generates 10,000 nodes (with two pods per node constrained by the size of the instance types on NodePools). Prior to the change, this test took 27m17s. After the change, the same test case takes 21m36s (a 5m41s improvement).
Before PR
Scheduling Benchmark
CPU Flamegraph
Heap Profile
Live Test
Scheduling Time: 27m17s
After PR
Scheduling Benchmark
CPU Flamegraph
Heap Profile
Live Test
Scheduling Time: 21m36s
How was this change tested?
make presubmit
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.