From 0f922b200f3cb81203e096436bd9061e910d8d91 Mon Sep 17 00:00:00 2001 From: Dave Chen Date: Tue, 22 Jun 2021 17:11:26 +0800 Subject: [PATCH] Simplify the formula used in the RequestedToCapacityRatio plugin Signed-off-by: Dave Chen --- .../framework/plugins/helper/shape_score.go | 3 +- .../requested_to_capacity_ratio.go | 2 +- .../requested_to_capacity_ratio_test.go | 48 +++++++++---------- 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/pkg/scheduler/framework/plugins/helper/shape_score.go b/pkg/scheduler/framework/plugins/helper/shape_score.go index 4da1e76f17a..dc34b71290c 100644 --- a/pkg/scheduler/framework/plugins/helper/shape_score.go +++ b/pkg/scheduler/framework/plugins/helper/shape_score.go @@ -32,8 +32,7 @@ type FunctionShapePoint struct { // Shape[i].Score represents function values at meeting points. // // function f(p) is defined as: -// shape[0].Score for p < f[0].Utilization -// shape[i].Score for p == shape[i].Utilization +// shape[0].Score for p < shape[0].Utilization // shape[n-1].Score for p > shape[n-1].Utilization // and linear between points (p < shape[i].Utilization) func BuildBrokenLinearFunction(shape FunctionShape) func(int64) int64 { diff --git a/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio.go b/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio.go index d8599fcfeba..7f3e96afdf0 100644 --- a/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio.go +++ b/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio.go @@ -121,7 +121,7 @@ func buildRequestedToCapacityRatioScorerFunction(scoringFunctionShape helper.Fun return rawScoringFunction(maxUtilization) } - return rawScoringFunction(maxUtilization - (capacity-requested)*maxUtilization/capacity) + return rawScoringFunction(requested * maxUtilization / capacity) } return func(requested, allocable resourceToValueMap, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 { var nodeScore, weightSum int64 diff --git a/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio_test.go b/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio_test.go index 62d5e7829da..da990a81266 100644 --- a/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio_test.go +++ b/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio_test.go @@ -236,12 +236,12 @@ func TestResourceBinPackingSingleExtended(t *testing.T) { // Node1 Score: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+0),8) - // = maxUtilization - (8-0)*(maxUtilization/8) = 0 = rawScoringFunction(0) + // = 0/8 * maxUtilization = 0 = rawScoringFunction(0) // Node1 Score: 0 // Node2 scores (used resources) on 0-MaxNodeScore scale // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+0),4) - // = maxUtilization - (4-0)*(maxUtilization/4) = 0 = rawScoringFunction(0) + // = 0/4 * maxUtilization = 0 = rawScoringFunction(0) // Node2 Score: 0 pod: &v1.Pod{Spec: noResources}, @@ -256,12 +256,12 @@ func TestResourceBinPackingSingleExtended(t *testing.T) { // Node1 Score: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+2),8) - // = maxUtilization - (8-2)*(maxUtilization/8) = 25 = rawScoringFunction(25) + // = 2/8 * maxUtilization = 25 = rawScoringFunction(25) // Node1 Score: 2 // Node2 scores (used resources) on 0-MaxNodeScore scale // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+2),4) - // = maxUtilization - (4-2)*(maxUtilization/4) = 50 = rawScoringFunction(50) + // = 2/4 * maxUtilization = 50 = rawScoringFunction(50) // Node2 Score: 5 pod: &v1.Pod{Spec: extendedResourcePod1}, @@ -279,12 +279,12 @@ func TestResourceBinPackingSingleExtended(t *testing.T) { // Node1 Score: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+2),8) - // = maxUtilization - (8-2)*(maxUtilization/8) = 25 = rawScoringFunction(25) + // = 2/8 * maxUtilization = 25 = rawScoringFunction(25) // Node1 Score: 2 // Node2 scores (used resources) on 0-MaxNodeScore scale // rawScoringFunction(used + requested / available) // resourceScoringFunction((2+2),4) - // = maxUtilization - (4-4)*(maxUtilization/4) = maxUtilization = rawScoringFunction(maxUtilization) + // = 4/4 * maxUtilization = maxUtilization = rawScoringFunction(maxUtilization) // Node2 Score: 10 pod: &v1.Pod{Spec: extendedResourcePod1}, @@ -302,12 +302,12 @@ func TestResourceBinPackingSingleExtended(t *testing.T) { // Node1 Score: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+4),8) - // = maxUtilization - (8-4)*(maxUtilization/8) = 50 = rawScoringFunction(50) + // = 4/8 * maxUtilization = 50 = rawScoringFunction(50) // Node1 Score: 5 // Node2 scores (used resources) on 0-MaxNodeScore scale // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+4),4) - // = maxUtilization - (4-4)*(maxUtilization/4) = maxUtilization = rawScoringFunction(maxUtilization) + // = 4/4 * maxUtilization = maxUtilization = rawScoringFunction(maxUtilization) // Node2 Score: 10 pod: &v1.Pod{Spec: extendedResourcePod2}, @@ -413,11 +413,11 @@ func TestResourceBinPackingMultipleExtended(t *testing.T) { // intel.com/foo: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+0),8) - // = 100 - (8-0)*(100/8) = 0 = rawScoringFunction(0) + // = 0/8 * 100 = 0 = rawScoringFunction(0) // intel.com/bar: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+0),4) - // = 100 - (4-0)*(100/4) = 0 = rawScoringFunction(0) + // = 0/4 * 100 = 0 = rawScoringFunction(0) // Node1 Score: (0 * 3) + (0 * 5) / 8 = 0 // Node2 scores (used resources) on 0-10 scale @@ -425,11 +425,11 @@ func TestResourceBinPackingMultipleExtended(t *testing.T) { // intel.com/foo: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+0),4) - // = 100 - (4-0)*(100/4) = 0 = rawScoringFunction(0) + // = 0/4 * 100 = 0 = rawScoringFunction(0) // intel.com/bar: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+0),8) - // = 100 - (8-0)*(100/8) = 0 = rawScoringFunction(0) + // = 0/8 * 100 = 0 = rawScoringFunction(0) // Node2 Score: (0 * 3) + (0 * 5) / 8 = 0 pod: &v1.Pod{Spec: noResources}, @@ -447,11 +447,11 @@ func TestResourceBinPackingMultipleExtended(t *testing.T) { // intel.com/foo: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+2),8) - // = 100 - (8-2)*(100/8) = 25 = rawScoringFunction(25) + // = 2/8 * 100 = 25 = rawScoringFunction(25) // intel.com/bar: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+2),4) - // = 100 - (4-2)*(100/4) = 50 = rawScoringFunction(50) + // = 2/4 * 100 = 50 = rawScoringFunction(50) // Node1 Score: (2 * 3) + (5 * 5) / 8 = 4 // Node2 scores (used resources) on 0-10 scale @@ -459,11 +459,11 @@ func TestResourceBinPackingMultipleExtended(t *testing.T) { // intel.com/foo: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+2),4) - // = 100 - (4-2)*(100/4) = 50 = rawScoringFunction(50) + // = 2/4 * 100 = 50 = rawScoringFunction(50) // intel.com/bar: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+2),8) - // = 100 - (8-2)*(100/8) = 25 = rawScoringFunction(25) + // = 2/8 * 100 = 25 = rawScoringFunction(25) // Node2 Score: (5 * 3) + (2 * 5) / 8 = 3 pod: &v1.Pod{Spec: extnededResourcePod1}, @@ -484,22 +484,22 @@ func TestResourceBinPackingMultipleExtended(t *testing.T) { // intel.com/foo: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+2),8) - // = 100 - (8-2)*(100/8) = 25 = rawScoringFunction(25) + // = 2/8 * 100 = 25 = rawScoringFunction(25) // intel.com/bar: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+2),4) - // = 100 - (4-2)*(100/4) = 50 = rawScoringFunction(50) + // = 2/4 * 100 = 50 = rawScoringFunction(50) // Node1 Score: (2 * 3) + (5 * 5) / 8 = 4 // Node2 scores (used resources) on 0-10 scale // rawScoringFunction(used + requested / available) // intel.com/foo: // rawScoringFunction(used + requested / available) // resourceScoringFunction((2+2),4) - // = 100 - (4-4)*(100/4) = 100 = rawScoringFunction(100) + // = 4/4 * 100 = 100 = rawScoringFunction(100) // intel.com/bar: // rawScoringFunction(used + requested / available) // resourceScoringFunction((2+2),8) - // = 100 - (8-4)*(100/8) = 50 = rawScoringFunction(50) + // = 4/8 *100 = 50 = rawScoringFunction(50) // Node2 Score: (10 * 3) + (5 * 5) / 8 = 7 pod: &v1.Pod{Spec: extnededResourcePod1}, @@ -535,22 +535,22 @@ func TestResourceBinPackingMultipleExtended(t *testing.T) { // intel.com/foo: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+4),8) - // = 100 - (8-4)*(100/8) = 50 = rawScoringFunction(50) + // 4/8 * 100 = 50 = rawScoringFunction(50) // intel.com/bar: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+2),4) - // = 100 - (4-2)*(100/4) = 50 = rawScoringFunction(50) + // = 2/4 * 100 = 50 = rawScoringFunction(50) // Node1 Score: (5 * 3) + (5 * 5) / 8 = 5 // Node2 scores (used resources) on 0-10 scale // rawScoringFunction(used + requested / available) // intel.com/foo: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+4),4) - // = 100 - (4-4)*(100/4) = 100 = rawScoringFunction(100) + // = 4/4 * 100 = 100 = rawScoringFunction(100) // intel.com/bar: // rawScoringFunction(used + requested / available) // resourceScoringFunction((0+2),8) - // = 100 - (8-2)*(100/8) = 25 = rawScoringFunction(25) + // = 2/8 * 100 = 25 = rawScoringFunction(25) // Node2 Score: (10 * 3) + (2 * 5) / 8 = 5 pod: &v1.Pod{Spec: extnededResourcePod2},