Skip to content

Commit

Permalink
Merge pull request #91016 from chendave/nits
Browse files Browse the repository at this point in the history
Fix nits in comments for NodeResources plugins
  • Loading branch information
k8s-ci-robot committed May 15, 2020
2 parents 78abe8b + 6b9fb2c commit 95e5985
Show file tree
Hide file tree
Showing 5 changed files with 121 additions and 123 deletions.
Expand Up @@ -220,42 +220,42 @@ func TestNodeResourcesBalancedAllocation(t *testing.T) {
name string
}{
{
// Node1 scores (remaining resources) on 0-10 scale
// Node1 scores (remaining resources) on 0-MaxNodeScore scale
// CPU Fraction: 0 / 4000 = 0%
// Memory Fraction: 0 / 10000 = 0%
// Node1 Score: 10 - (0-0)*100 = 100
// Node2 scores (remaining resources) on 0-10 scale
// Node1 Score: MaxNodeScore - (0-0)*MaxNodeScore = MaxNodeScore
// Node2 scores (remaining resources) on 0-MaxNodeScore scale
// CPU Fraction: 0 / 4000 = 0 %
// Memory Fraction: 0 / 10000 = 0%
// Node2 Score: 10 - (0-0)*100 = 100
// Node2 Score: MaxNodeScore - (0-0)*MaxNodeScore = MaxNodeScore
pod: &v1.Pod{Spec: noResources},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)},
expectedList: []framework.NodeScore{{Name: "machine1", Score: framework.MaxNodeScore}, {Name: "machine2", Score: framework.MaxNodeScore}},
name: "nothing scheduled, nothing requested",
},
{
// Node1 scores on 0-10 scale
// Node1 scores on 0-MaxNodeScore scale
// CPU Fraction: 3000 / 4000= 75%
// Memory Fraction: 5000 / 10000 = 50%
// Node1 Score: 10 - (0.75-0.5)*100 = 75
// Node2 scores on 0-10 scale
// Node1 Score: MaxNodeScore - (0.75-0.5)*MaxNodeScore = 75
// Node2 scores on 0-MaxNodeScore scale
// CPU Fraction: 3000 / 6000= 50%
// Memory Fraction: 5000/10000 = 50%
// Node2 Score: 10 - (0.5-0.5)*100 = 100
// Node2 Score: MaxNodeScore - (0.5-0.5)*MaxNodeScore = MaxNodeScore
pod: &v1.Pod{Spec: cpuAndMemory},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 6000, 10000)},
expectedList: []framework.NodeScore{{Name: "machine1", Score: 75}, {Name: "machine2", Score: framework.MaxNodeScore}},
name: "nothing scheduled, resources requested, differently sized machines",
},
{
// Node1 scores on 0-10 scale
// Node1 scores on 0-MaxNodeScore scale
// CPU Fraction: 0 / 4000= 0%
// Memory Fraction: 0 / 10000 = 0%
// Node1 Score: 10 - (0-0)*100 = 100
// Node2 scores on 0-10 scale
// Node1 Score: MaxNodeScore - (0-0)*MaxNodeScore = MaxNodeScore
// Node2 scores on 0-MaxNodeScore scale
// CPU Fraction: 0 / 4000= 0%
// Memory Fraction: 0 / 10000 = 0%
// Node2 Score: 10 - (0-0)*100 = 100
// Node2 Score: MaxNodeScore - (0-0)*MaxNodeScore= MaxNodeScore
pod: &v1.Pod{Spec: noResources},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)},
expectedList: []framework.NodeScore{{Name: "machine1", Score: framework.MaxNodeScore}, {Name: "machine2", Score: framework.MaxNodeScore}},
Expand All @@ -268,14 +268,14 @@ func TestNodeResourcesBalancedAllocation(t *testing.T) {
},
},
{
// Node1 scores on 0-10 scale
// Node1 scores on 0-MaxNodeScore scale
// CPU Fraction: 6000 / 10000 = 60%
// Memory Fraction: 0 / 20000 = 0%
// Node1 Score: 10 - (0.6-0)*100 = 40
// Node2 scores on 0-10 scale
// Node1 Score: MaxNodeScore - (0.6-0)*MaxNodeScore = 40
// Node2 scores on 0-MaxNodeScore scale
// CPU Fraction: 6000 / 10000 = 60%
// Memory Fraction: 5000 / 20000 = 25%
// Node2 Score: 10 - (0.6-0.25)*100 = 65
// Node2 Score: MaxNodeScore - (0.6-0.25)*MaxNodeScore = 65
pod: &v1.Pod{Spec: noResources},
nodes: []*v1.Node{makeNode("machine1", 10000, 20000), makeNode("machine2", 10000, 20000)},
expectedList: []framework.NodeScore{{Name: "machine1", Score: 40}, {Name: "machine2", Score: 65}},
Expand All @@ -288,14 +288,14 @@ func TestNodeResourcesBalancedAllocation(t *testing.T) {
},
},
{
// Node1 scores on 0-10 scale
// Node1 scores on 0-MaxNodeScore scale
// CPU Fraction: 6000 / 10000 = 60%
// Memory Fraction: 5000 / 20000 = 25%
// Node1 Score: 10 - (0.6-0.25)*100 = 65
// Node2 scores on 0-10 scale
// Node1 Score: MaxNodeScore - (0.6-0.25)*MaxNodeScore = 65
// Node2 scores on 0-MaxNodeScore scale
// CPU Fraction: 6000 / 10000 = 60%
// Memory Fraction: 10000 / 20000 = 50%
// Node2 Score: 10 - (0.6-0.5)*100 = 9
// Node2 Score: MaxNodeScore - (0.6-0.5)*MaxNodeScore = 90
pod: &v1.Pod{Spec: cpuAndMemory},
nodes: []*v1.Node{makeNode("machine1", 10000, 20000), makeNode("machine2", 10000, 20000)},
expectedList: []framework.NodeScore{{Name: "machine1", Score: 65}, {Name: "machine2", Score: 90}},
Expand All @@ -306,14 +306,14 @@ func TestNodeResourcesBalancedAllocation(t *testing.T) {
},
},
{
// Node1 scores on 0-10 scale
// Node1 scores on 0-MaxNodeScore scale
// CPU Fraction: 6000 / 10000 = 60%
// Memory Fraction: 5000 / 20000 = 25%
// Node1 Score: 10 - (0.6-0.25)*100 = 65
// Node2 scores on 0-10 scale
// Node1 Score: MaxNodeScore - (0.6-0.25)*MaxNodeScore = 65
// Node2 scores on 0-MaxNodeScore scale
// CPU Fraction: 6000 / 10000 = 60%
// Memory Fraction: 10000 / 50000 = 20%
// Node2 Score: 10 - (0.6-0.2)*100 = 60
// Node2 Score: MaxNodeScore - (0.6-0.2)*MaxNodeScore = 60
pod: &v1.Pod{Spec: cpuAndMemory},
nodes: []*v1.Node{makeNode("machine1", 10000, 20000), makeNode("machine2", 10000, 50000)},
expectedList: []framework.NodeScore{{Name: "machine1", Score: 65}, {Name: "machine2", Score: 60}},
Expand All @@ -324,11 +324,11 @@ func TestNodeResourcesBalancedAllocation(t *testing.T) {
},
},
{
// Node1 scores on 0-10 scale
// Node1 scores on 0-MaxNodeScore scale
// CPU Fraction: 6000 / 4000 > 100% ==> Score := 0
// Memory Fraction: 0 / 10000 = 0
// Node1 Score: 0
// Node2 scores on 0-10 scale
// Node2 scores on 0-MaxNodeScore scale
// CPU Fraction: 6000 / 4000 > 100% ==> Score := 0
// Memory Fraction 5000 / 10000 = 50%
// Node2 Score: 0
Expand Down
Expand Up @@ -98,42 +98,42 @@ func TestNodeResourcesLeastAllocated(t *testing.T) {
name string
}{
{
// Node1 scores (remaining resources) on 0-10 scale
// CPU Score: ((4000 - 0) *100) / 4000 = 100
// Memory Score: ((10000 - 0) *100) / 10000 = 100
// Node1 scores (remaining resources) on 0-MaxNodeScore scale
// CPU Score: ((4000 - 0) * MaxNodeScore) / 4000 = MaxNodeScore
// Memory Score: ((10000 - 0) * MaxNodeScore) / 10000 = MaxNodeScore
// Node1 Score: (100 + 100) / 2 = 100
// Node2 scores (remaining resources) on 0-10 scale
// CPU Score: ((4000 - 0) *100) / 4000 = 100
// Memory Score: ((10000 - 0) *10) / 10000 = 100
// Node2 Score: (100 + 100) / 2 = 100
// Node2 scores (remaining resources) on 0-MaxNodeScore scale
// CPU Score: ((4000 - 0) * MaxNodeScore) / 4000 = MaxNodeScore
// Memory Score: ((10000 - 0) * MaxNodeScore) / 10000 = MaxNodeScore
// Node2 Score: (MaxNodeScore + MaxNodeScore) / 2 = MaxNodeScore
pod: &v1.Pod{Spec: noResources},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)},
expectedList: []framework.NodeScore{{Name: "machine1", Score: framework.MaxNodeScore}, {Name: "machine2", Score: framework.MaxNodeScore}},
name: "nothing scheduled, nothing requested",
},
{
// Node1 scores on 0-10 scale
// CPU Score: ((4000 - 3000) *100) / 4000 = 25
// Memory Score: ((10000 - 5000) *100) / 10000 = 50
// Node1 scores on 0-MaxNodeScore scale
// CPU Score: ((4000 - 3000) * MaxNodeScore) / 4000 = 25
// Memory Score: ((10000 - 5000) * MaxNodeScore) / 10000 = 50
// Node1 Score: (25 + 50) / 2 = 37
// Node2 scores on 0-10 scale
// CPU Score: ((6000 - 3000) *100) / 6000 = 50
// Memory Score: ((10000 - 5000) *100) / 10000 = 50
// Node2 scores on 0-MaxNodeScore scale
// CPU Score: ((6000 - 3000) * MaxNodeScore) / 6000 = 50
// Memory Score: ((10000 - 5000) * MaxNodeScore) / 10000 = 50
// Node2 Score: (50 + 50) / 2 = 50
pod: &v1.Pod{Spec: cpuAndMemory},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 6000, 10000)},
expectedList: []framework.NodeScore{{Name: "machine1", Score: 37}, {Name: "machine2", Score: 50}},
name: "nothing scheduled, resources requested, differently sized machines",
},
{
// Node1 scores on 0-10 scale
// CPU Score: ((4000 - 0) *100) / 4000 = 100
// Memory Score: ((10000 - 0) *100) / 10000 = 100
// Node1 Score: (100 + 100) / 2 = 100
// Node2 scores on 0-10 scale
// CPU Score: ((4000 - 0) *100) / 4000 = 100
// Memory Score: ((10000 - 0) *100) / 10000 = 100
// Node2 Score: (100 + 100) / 2 = 100
// Node1 scores on 0-MaxNodeScore scale
// CPU Score: ((4000 - 0) * MaxNodeScore) / 4000 = MaxNodeScore
// Memory Score: ((10000 - 0) * MaxNodeScore) / 10000 = MaxNodeScore
// Node1 Score: (MaxNodeScore + MaxNodeScore) / 2 = MaxNodeScore
// Node2 scores on 0-MaxNodeScore scale
// CPU Score: ((4000 - 0) * MaxNodeScore) / 4000 = MaxNodeScore
// Memory Score: ((10000 - 0) * MaxNodeScore) / 10000 = MaxNodeScore
// Node2 Score: (MaxNodeScore + MaxNodeScore) / 2 = MaxNodeScore
pod: &v1.Pod{Spec: noResources},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)},
expectedList: []framework.NodeScore{{Name: "machine1", Score: framework.MaxNodeScore}, {Name: "machine2", Score: framework.MaxNodeScore}},
Expand All @@ -146,13 +146,13 @@ func TestNodeResourcesLeastAllocated(t *testing.T) {
},
},
{
// Node1 scores on 0-10 scale
// CPU Score: ((10000 - 6000) *100) / 10000 = 40
// Memory Score: ((20000 - 0) *100) / 20000 = 100
// Node1 scores on 0-MaxNodeScore scale
// CPU Score: ((10000 - 6000) * MaxNodeScore) / 10000 = 40
// Memory Score: ((20000 - 0) * MaxNodeScore) / 20000 = MaxNodeScore
// Node1 Score: (40 + 100) / 2 = 70
// Node2 scores on 0-10 scale
// CPU Score: ((10000 - 6000) *100) / 10000 = 40
// Memory Score: ((20000 - 5000) *100) / 20000 = 75
// Node2 scores on 0-MaxNodeScore scale
// CPU Score: ((10000 - 6000) * MaxNodeScore) / 10000 = 40
// Memory Score: ((20000 - 5000) * MaxNodeScore) / 20000 = 75
// Node2 Score: (40 + 75) / 2 = 57
pod: &v1.Pod{Spec: noResources},
nodes: []*v1.Node{makeNode("machine1", 10000, 20000), makeNode("machine2", 10000, 20000)},
Expand All @@ -166,13 +166,13 @@ func TestNodeResourcesLeastAllocated(t *testing.T) {
},
},
{
// Node1 scores on 0-10 scale
// CPU Score: ((10000 - 6000) *10) / 10000 = 40
// Memory Score: ((20000 - 5000) *10) / 20000 = 75
// Node1 scores on 0-MaxNodeScore scale
// CPU Score: ((10000 - 6000) * MaxNodeScore) / 10000 = 40
// Memory Score: ((20000 - 5000) * MaxNodeScore) / 20000 = 75
// Node1 Score: (40 + 75) / 2 = 57
// Node2 scores on 0-10 scale
// CPU Score: ((10000 - 6000) *100) / 10000 = 40
// Memory Score: ((20000 - 10000) *100) / 20000 = 50
// Node2 scores on 0-MaxNodeScore scale
// CPU Score: ((10000 - 6000) * MaxNodeScore) / 10000 = 40
// Memory Score: ((20000 - 10000) * MaxNodeScore) / 20000 = 50
// Node2 Score: (40 + 50) / 2 = 45
pod: &v1.Pod{Spec: cpuAndMemory},
nodes: []*v1.Node{makeNode("machine1", 10000, 20000), makeNode("machine2", 10000, 20000)},
Expand All @@ -184,13 +184,13 @@ func TestNodeResourcesLeastAllocated(t *testing.T) {
},
},
{
// Node1 scores on 0-10 scale
// CPU Score: ((10000 - 6000) *100) / 10000 = 40
// Memory Score: ((20000 - 5000) *100) / 20000 = 75
// Node1 scores on 0-MaxNodeScore scale
// CPU Score: ((10000 - 6000) * MaxNodeScore) / 10000 = 40
// Memory Score: ((20000 - 5000) * MaxNodeScore) / 20000 = 75
// Node1 Score: (40 + 75) / 2 = 57
// Node2 scores on 0-10 scale
// CPU Score: ((10000 - 6000) *100) / 10000 = 40
// Memory Score: ((50000 - 10000) *100) / 50000 = 80
// Node2 scores on 0-MaxNodeScore scale
// CPU Score: ((10000 - 6000) * MaxNodeScore) / 10000 = 40
// Memory Score: ((50000 - 10000) * MaxNodeScore) / 50000 = 80
// Node2 Score: (40 + 80) / 2 = 60
pod: &v1.Pod{Spec: cpuAndMemory},
nodes: []*v1.Node{makeNode("machine1", 10000, 20000), makeNode("machine2", 10000, 50000)},
Expand All @@ -202,13 +202,13 @@ func TestNodeResourcesLeastAllocated(t *testing.T) {
},
},
{
// Node1 scores on 0-10 scale
// CPU Score: ((4000 - 6000) *100) / 4000 = 0
// Memory Score: ((10000 - 0) *100) / 10000 = 100
// Node1 Score: (0 + 100) / 2 = 50
// Node2 scores on 0-10 scale
// CPU Score: ((4000 - 6000) *100) / 4000 = 0
// Memory Score: ((10000 - 5000) *100) / 10000 = 50
// Node1 scores on 0-MaxNodeScore scale
// CPU Score: ((4000 - 6000) * MaxNodeScore) / 4000 = 0
// Memory Score: ((10000 - 0) * MaxNodeScore) / 10000 = MaxNodeScore
// Node1 Score: (0 + MaxNodeScore) / 2 = 50
// Node2 scores on 0-MaxNodeScore scale
// CPU Score: ((4000 - 6000) * MaxNodeScore) / 4000 = 0
// Memory Score: ((10000 - 5000) * MaxNodeScore) / 10000 = 50
// Node2 Score: (0 + 50) / 2 = 25
pod: &v1.Pod{Spec: cpuOnly},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)},
Expand Down
12 changes: 5 additions & 7 deletions pkg/scheduler/framework/plugins/noderesources/most_allocated.go
Expand Up @@ -51,7 +51,7 @@ func (ma *MostAllocated) Score(ctx context.Context, state *framework.CycleState,
// ma.score favors nodes with most requested resources.
// It calculates the percentage of memory and CPU requested by pods scheduled on the node, and prioritizes
// based on the maximum of the average of the fraction of requested to capacity.
// Details: (cpu(10 * sum(requested) / capacity) + memory(10 * sum(requested) / capacity)) / 2
// Details: (cpu(MaxNodeScore * sum(requested) / capacity) + memory(MaxNodeScore * sum(requested) / capacity)) / weightSum
return ma.score(pod, nodeInfo)
}

Expand Down Expand Up @@ -83,13 +83,11 @@ func mostResourceScorer(requested, allocable resourceToValueMap, includeVolumes

}

// The used capacity is calculated on a scale of 0-10
// 0 being the lowest priority and 10 being the highest.
// The used capacity is calculated on a scale of 0-MaxNodeScore (MaxNodeScore is
// constant with value set to 100).
// 0 being the lowest priority and 100 being the highest.
// The more resources are used the higher the score is. This function
// is almost a reversed version of least_requested_priority.calculateUnusedScore
// (10 - calculateUnusedScore). The main difference is in rounding. It was added to
// keep the final formula clean and not to modify the widely used (by users
// in their default scheduling policies) calculateUsedScore.
// is almost a reversed version of noderesources.leastRequestedScore.
func mostRequestedScore(requested, capacity int64) int64 {
if capacity == 0 {
return 0
Expand Down
Expand Up @@ -113,41 +113,41 @@ func TestNodeResourcesMostAllocated(t *testing.T) {
name string
}{
{
// Node1 scores (used resources) on 0-10 scale
// CPU Score: (0 * 100) / 4000 = 0
// Memory Score: (0 * 100) / 10000 = 0
// Node1 scores (used resources) on 0-MaxNodeScore scale
// CPU Score: (0 * MaxNodeScore) / 4000 = 0
// Memory Score: (0 * MaxNodeScore) / 10000 = 0
// Node1 Score: (0 + 0) / 2 = 0
// Node2 scores (used resources) on 0-10 scale
// CPU Score: (0 * 100) / 4000 = 0
// Memory Score: (0 * 100) / 10000 = 0
// Node2 scores (used resources) on 0-MaxNodeScore scale
// CPU Score: (0 * MaxNodeScore) / 4000 = 0
// Memory Score: (0 * MaxNodeScore) / 10000 = 0
// Node2 Score: (0 + 0) / 2 = 0
pod: &v1.Pod{Spec: noResources},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 4000, 10000)},
expectedList: []framework.NodeScore{{Name: "machine1", Score: 0}, {Name: "machine2", Score: 0}},
name: "nothing scheduled, nothing requested",
},
{
// Node1 scores on 0-10 scale
// CPU Score: (3000 * 100) / 4000 = 75
// Memory Score: (5000 * 100) / 10000 = 50
// Node1 scores on 0-MaxNodeScore scale
// CPU Score: (3000 * MaxNodeScore) / 4000 = 75
// Memory Score: (5000 * MaxNodeScore) / 10000 = 50
// Node1 Score: (75 + 50) / 2 = 6
// Node2 scores on 0-10 scale
// CPU Score: (3000 * 100) / 6000 = 50
// Memory Score: (5000 * 100) / 10000 = 50
// Node2 scores on 0-MaxNodeScore scale
// CPU Score: (3000 * MaxNodeScore) / 6000 = 50
// Memory Score: (5000 * MaxNodeScore) / 10000 = 50
// Node2 Score: (50 + 50) / 2 = 50
pod: &v1.Pod{Spec: cpuAndMemory},
nodes: []*v1.Node{makeNode("machine1", 4000, 10000), makeNode("machine2", 6000, 10000)},
expectedList: []framework.NodeScore{{Name: "machine1", Score: 62}, {Name: "machine2", Score: 50}},
name: "nothing scheduled, resources requested, differently sized machines",
},
{
// Node1 scores on 0-10 scale
// CPU Score: (6000 * 100) / 10000 = 60
// Memory Score: (0 * 100) / 20000 = 100
// Node1 scores on 0-MaxNodeScore scale
// CPU Score: (6000 * MaxNodeScore) / 10000 = 60
// Memory Score: (0 * MaxNodeScore) / 20000 = 0
// Node1 Score: (60 + 0) / 2 = 30
// Node2 scores on 0-10 scale
// CPU Score: (6000 * 100) / 10000 = 60
// Memory Score: (5000 * 100) / 20000 = 25
// Node2 scores on 0-MaxNodeScore scale
// CPU Score: (6000 * MaxNodeScore) / 10000 = 60
// Memory Score: (5000 * MaxNodeScore) / 20000 = 25
// Node2 Score: (60 + 25) / 2 = 42
pod: &v1.Pod{Spec: noResources},
nodes: []*v1.Node{makeNode("machine1", 10000, 20000), makeNode("machine2", 10000, 20000)},
Expand All @@ -161,13 +161,13 @@ func TestNodeResourcesMostAllocated(t *testing.T) {
},
},
{
// Node1 scores on 0-10 scale
// CPU Score: (6000 * 100) / 10000 = 60
// Memory Score: (5000 * 100) / 20000 = 25
// Node1 scores on 0-MaxNodeScore scale
// CPU Score: (6000 * MaxNodeScore) / 10000 = 60
// Memory Score: (5000 * MaxNodeScore) / 20000 = 25
// Node1 Score: (60 + 25) / 2 = 42
// Node2 scores on 0-10 scale
// CPU Score: (6000 * 100) / 10000 = 60
// Memory Score: (10000 * 100) / 20000 = 50
// Node2 scores on 0-MaxNodeScore scale
// CPU Score: (6000 * MaxNodeScore) / 10000 = 60
// Memory Score: (10000 * MaxNodeScore) / 20000 = 50
// Node2 Score: (60 + 50) / 2 = 55
pod: &v1.Pod{Spec: cpuAndMemory},
nodes: []*v1.Node{makeNode("machine1", 10000, 20000), makeNode("machine2", 10000, 20000)},
Expand All @@ -179,12 +179,12 @@ func TestNodeResourcesMostAllocated(t *testing.T) {
},
},
{
// Node1 scores on 0-10 scale
// Node1 scores on 0-MaxNodeScore scale
// CPU Score: 5000 > 4000 return 0
// Memory Score: (9000 * 100) / 10000 = 90
// Memory Score: (9000 * MaxNodeScore) / 10000 = 90
// Node1 Score: (0 + 90) / 2 = 45
// Node2 scores on 0-10 scale
// CPU Score: (5000 * 100) / 10000 = 50
// Node2 scores on 0-MaxNodeScore scale
// CPU Score: (5000 * MaxNodeScore) / 10000 = 50
// Memory Score: 9000 > 8000 return 0
// Node2 Score: (50 + 0) / 2 = 25
pod: &v1.Pod{Spec: bigCPUAndMemory},
Expand Down

0 comments on commit 95e5985

Please sign in to comment.