From 199dc03bdd4c739c234cd6e13d5b58919b674554 Mon Sep 17 00:00:00 2001 From: Aleksandra Malinowska Date: Mon, 27 Nov 2023 09:50:57 +0100 Subject: [PATCH] Don't evaluate extra nodes if there's no score plugin defined --- pkg/scheduler/extender.go | 5 +++++ pkg/scheduler/framework/extender.go | 3 +++ pkg/scheduler/schedule_one.go | 16 ++++++++++++++++ pkg/scheduler/schedule_one_test.go | 5 +++++ pkg/scheduler/testing/framework/fake_extender.go | 5 +++++ 5 files changed, 34 insertions(+) diff --git a/pkg/scheduler/extender.go b/pkg/scheduler/extender.go index 7ccb9e6ca69..932c98ccfee 100644 --- a/pkg/scheduler/extender.go +++ b/pkg/scheduler/extender.go @@ -382,6 +382,11 @@ func (h *HTTPExtender) IsBinder() bool { return h.bindVerb != "" } +// IsPrioritizer returns whether this extender is configured for the Prioritize method. +func (h *HTTPExtender) IsPrioritizer() bool { + return h.prioritizeVerb != "" +} + // Helper function to send messages to the extender func (h *HTTPExtender) send(action string, args interface{}, result interface{}) error { out, err := json.Marshal(args) diff --git a/pkg/scheduler/framework/extender.go b/pkg/scheduler/framework/extender.go index d47c89bf1e4..1f1b67ad3b0 100644 --- a/pkg/scheduler/framework/extender.go +++ b/pkg/scheduler/framework/extender.go @@ -50,6 +50,9 @@ type Extender interface { // this pod is managed by this extender. IsInterested(pod *v1.Pod) bool + // IsPrioritizer returns whether this extender is configured for the Prioritize method. + IsPrioritizer() bool + // ProcessPreemption returns nodes with their victim pods processed by extender based on // given: // 1. Pod to schedule diff --git a/pkg/scheduler/schedule_one.go b/pkg/scheduler/schedule_one.go index b9ded88732c..753eab6c14e 100644 --- a/pkg/scheduler/schedule_one.go +++ b/pkg/scheduler/schedule_one.go @@ -527,6 +527,19 @@ func (sched *Scheduler) evaluateNominatedNode(ctx context.Context, pod *v1.Pod, return feasibleNodes, nil } +// hasScoring checks if scoring nodes is configured. +func (sched *Scheduler) hasScoring(fwk framework.Framework) bool { + if fwk.HasScorePlugins() { + return true + } + for _, extender := range sched.Extenders { + if extender.IsPrioritizer() { + return true + } + } + return false +} + // findNodesThatPassFilters finds the nodes that fit the filter plugins. func (sched *Scheduler) findNodesThatPassFilters( ctx context.Context, @@ -537,6 +550,9 @@ func (sched *Scheduler) findNodesThatPassFilters( nodes []*framework.NodeInfo) ([]*v1.Node, error) { numAllNodes := len(nodes) numNodesToFind := sched.numFeasibleNodesToFind(fwk.PercentageOfNodesToScore(), int32(numAllNodes)) + if !sched.hasScoring(fwk) { + numNodesToFind = 1 + } // Create feasible list with enough space to avoid growing it // and allow assigning. diff --git a/pkg/scheduler/schedule_one_test.go b/pkg/scheduler/schedule_one_test.go index 9a70a62921a..655b3f0ae15 100644 --- a/pkg/scheduler/schedule_one_test.go +++ b/pkg/scheduler/schedule_one_test.go @@ -91,6 +91,7 @@ type fakeExtender struct { interestedPodName string ignorable bool gotBind bool + isPrioritizer bool } func (f *fakeExtender) Name() string { @@ -140,6 +141,10 @@ func (f *fakeExtender) IsInterested(pod *v1.Pod) bool { return pod != nil && pod.Name == f.interestedPodName } +func (f *fakeExtender) IsPrioritizer() bool { + return f.isPrioritizer +} + type falseMapPlugin struct{} func newFalseMapPlugin() frameworkruntime.PluginFactory { diff --git a/pkg/scheduler/testing/framework/fake_extender.go b/pkg/scheduler/testing/framework/fake_extender.go index 8e1575dd365..82f9836b47f 100644 --- a/pkg/scheduler/testing/framework/fake_extender.go +++ b/pkg/scheduler/testing/framework/fake_extender.go @@ -380,6 +380,11 @@ func (f *FakeExtender) IsBinder() bool { return true } +// IsPrioritizer returns true if there are any prioritizers. +func (f *FakeExtender) IsPrioritizer() bool { + return len(f.Prioritizers) > 0 +} + // IsInterested returns a bool indicating whether this extender is interested in this Pod. func (f *FakeExtender) IsInterested(pod *v1.Pod) bool { return !f.UnInterested