From ab7a38220fe6c58aa5f2a7487d852120d3644776 Mon Sep 17 00:00:00 2001 From: Aldo Culquicondor Date: Thu, 22 Oct 2020 16:09:06 -0400 Subject: [PATCH 1/2] Add 5k nodes benchmark for pod topology spreading Change-Id: I1a5ed73ba03570671c0a92277678c0f3f786385f --- .../framework/plugins/podtopologyspread/scoring_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/scoring_test.go b/pkg/scheduler/framework/plugins/podtopologyspread/scoring_test.go index 5a90841723b..69e6b2dbfe3 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/scoring_test.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/scoring_test.go @@ -807,6 +807,11 @@ var ( existingPodsNum: 10000, allNodesNum: 1000, }, + { + name: "5000nodes", + existingPodsNum: 50000, + allNodesNum: 5000, + }, } ) From e721576d558679e845d957274e2b0f5785f042cd Mon Sep 17 00:00:00 2001 From: Aldo Culquicondor Date: Thu, 22 Oct 2020 17:05:00 -0400 Subject: [PATCH 2/2] Optimize NormalizeScore for PodTopologySpread Change-Id: I928174a220c8c0f4b69180fdfb2f075278a482be --- .../framework/plugins/podtopologyspread/scoring.go | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go b/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go index 5a33f097028..b137577a9be 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go @@ -30,6 +30,7 @@ import ( ) const preScoreStateKey = "PreScore" + Name +const invalidScore = -1 // preScoreState computed at PreScore and used at Score. // Fields are exported for comparison during testing. @@ -219,9 +220,10 @@ func (pl *PodTopologySpread) NormalizeScore(ctx context.Context, cycleState *fra // Calculate and var minScore int64 = math.MaxInt64 var maxScore int64 - for _, score := range scores { + for i, score := range scores { // it's mandatory to check if is present in m.IgnoredNodes if s.IgnoredNodes.Has(score.Name) { + scores[i].Score = invalidScore continue } if score.Score < minScore { @@ -233,22 +235,14 @@ func (pl *PodTopologySpread) NormalizeScore(ctx context.Context, cycleState *fra } for i := range scores { - nodeInfo, err := pl.sharedLister.NodeInfos().Get(scores[i].Name) - if err != nil { - return framework.AsStatus(err) - } - node := nodeInfo.Node() - - if s.IgnoredNodes.Has(node.Name) { + if scores[i].Score == invalidScore { scores[i].Score = 0 continue } - if maxScore == 0 { scores[i].Score = framework.MaxNodeScore continue } - s := scores[i].Score scores[i].Score = framework.MaxNodeScore * (maxScore + minScore - s) / maxScore }