Merge pull request #103089 from chendave/ratio_cleanup

Simplify the formula used in the `RequestedToCapacityRatio` plugin
This commit is contained in:
Kubernetes Prow Robot 2021-06-22 12:00:23 -07:00 committed by GitHub
commit 72fc6d9ea0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 27 deletions

View File

@ -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 {

View File

@ -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) int64 {
var nodeScore, weightSum int64

View File

@ -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},