From af994babcb49cb4627395a1e9a27297b79952dd4 Mon Sep 17 00:00:00 2001 From: Jonathan Innis Date: Fri, 31 Jan 2025 14:58:56 -0800 Subject: [PATCH] perf: Remove `Available()` call inside of filterInstanceTypesByRequirements (#1947) --- pkg/controllers/provisioning/scheduling/nodeclaim.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pkg/controllers/provisioning/scheduling/nodeclaim.go b/pkg/controllers/provisioning/scheduling/nodeclaim.go index db79322b36..6c380f0d5e 100644 --- a/pkg/controllers/provisioning/scheduling/nodeclaim.go +++ b/pkg/controllers/provisioning/scheduling/nodeclaim.go @@ -262,7 +262,16 @@ func filterInstanceTypesByRequirements(instanceTypes []*cloudprovider.InstanceTy // about why scheduling failed itCompat := compatible(it, requirements) itFits := fits(it, requests) - itHasOffering := it.Offerings.Available().HasCompatible(requirements) + + // By using this iterative approach vs. the Available() function it prevents allocations + // which have to be garbage collected and slow down Karpenter's scheduling algorithm + itHasOffering := false + for _, of := range it.Offerings { + if of.Available && requirements.IsCompatible(of.Requirements, scheduling.AllowUndefinedWellKnownLabels) { + itHasOffering = true + break + } + } // track if any single instance type met a single criteria results.requirementsMet = results.requirementsMet || itCompat