Skip to content
This repository was archived by the owner on Mar 31, 2023. It is now read-only.

Commit 9762cb2

Browse files
committed
use the bin packing fitness functions to power the spreading fitness functions
1 parent a351138 commit 9762cb2

File tree

1 file changed

+17
-41
lines changed

1 file changed

+17
-41
lines changed

fenzo-core/src/main/java/com/netflix/fenzo/plugins/SpreadingFitnessCalculators.java

Lines changed: 17 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,10 @@
1616

1717
package com.netflix.fenzo.plugins;
1818

19-
import com.netflix.fenzo.TaskAssignmentResult;
2019
import com.netflix.fenzo.TaskRequest;
2120
import com.netflix.fenzo.TaskTrackerState;
2221
import com.netflix.fenzo.VMTaskFitnessCalculator;
2322
import com.netflix.fenzo.VirtualMachineCurrentState;
24-
import com.netflix.fenzo.VirtualMachineLease;
25-
import com.netflix.fenzo.functions.Func1;
2623

2724
/**
2825
* A collection of spreading fitness calculators.
@@ -41,7 +38,8 @@ public String getName() {
4138

4239
@Override
4340
public double calculateFitness(TaskRequest taskRequest, VirtualMachineCurrentState targetVM, TaskTrackerState taskTrackerState) {
44-
return calculateResourceFitness(taskRequest, targetVM, taskTrackerState, TaskRequest::getCPUs, VirtualMachineLease::cpuCores);
41+
VMTaskFitnessCalculator cpuBinPacker = BinPackingFitnessCalculators.cpuBinPacker;
42+
return 1 - cpuBinPacker.calculateFitness(taskRequest, targetVM, taskTrackerState);
4543
}
4644
};
4745

@@ -57,41 +55,43 @@ public String getName() {
5755

5856
@Override
5957
public double calculateFitness(TaskRequest taskRequest, VirtualMachineCurrentState targetVM, TaskTrackerState taskTrackerState) {
60-
return calculateResourceFitness(taskRequest, targetVM, taskTrackerState, TaskRequest::getMemory, VirtualMachineLease::memoryMB);
58+
VMTaskFitnessCalculator memoryBinPacker = BinPackingFitnessCalculators.memoryBinPacker;
59+
return 1 - memoryBinPacker.calculateFitness(taskRequest, targetVM, taskTrackerState);
6160
}
6261
};
6362

6463
/**
65-
* A bin packing fitness calculator that achieves both CPU and Memory spreading with equal weights to
66-
* both goals.
64+
* A network bandwidth spreading fitness calculator. This fitness calculator has the effect of assigning a
65+
* task to a host that has the most amount of available network bandwidth.
6766
*/
68-
public final static VMTaskFitnessCalculator cpuMemSpreader = new VMTaskFitnessCalculator() {
67+
public final static VMTaskFitnessCalculator networkSpreader = new VMTaskFitnessCalculator() {
6968
@Override
7069
public String getName() {
71-
return "CpuAndMemorySpreader";
70+
return "NetworkSpreader";
7271
}
7372

7473
@Override
7574
public double calculateFitness(TaskRequest taskRequest, VirtualMachineCurrentState targetVM, TaskTrackerState taskTrackerState) {
76-
double cpuFitness = cpuSpreader.calculateFitness(taskRequest, targetVM, taskTrackerState);
77-
double memoryFitness = memorySpreader.calculateFitness(taskRequest, targetVM, taskTrackerState);
78-
return (cpuFitness + memoryFitness) / 2.0;
75+
VMTaskFitnessCalculator networkBinPacker = BinPackingFitnessCalculators.networkBinPacker;
76+
return 1 - networkBinPacker.calculateFitness(taskRequest, targetVM, taskTrackerState);
7977
}
8078
};
8179

8280
/**
83-
* A network bandwidth spreading fitness calculator. This fitness calculator has the effect of assigning a
84-
* task to a host that has the most amount of available network bandwidth.
81+
* A bin packing fitness calculator that achieves both CPU and Memory spreading with equal weights to
82+
* both goals.
8583
*/
86-
public final static VMTaskFitnessCalculator networkSpreader = new VMTaskFitnessCalculator() {
84+
public final static VMTaskFitnessCalculator cpuMemSpreader = new VMTaskFitnessCalculator() {
8785
@Override
8886
public String getName() {
89-
return "NetworkSpreader";
87+
return "CpuAndMemorySpreader";
9088
}
9189

9290
@Override
9391
public double calculateFitness(TaskRequest taskRequest, VirtualMachineCurrentState targetVM, TaskTrackerState taskTrackerState) {
94-
return calculateResourceFitness(taskRequest, targetVM, taskTrackerState, TaskRequest::getNetworkMbps, VirtualMachineLease::networkMbps);
92+
double cpuFitness = cpuSpreader.calculateFitness(taskRequest, targetVM, taskTrackerState);
93+
double memoryFitness = memorySpreader.calculateFitness(taskRequest, targetVM, taskTrackerState);
94+
return (cpuFitness + memoryFitness) / 2.0;
9595
}
9696
};
9797

@@ -113,28 +113,4 @@ public double calculateFitness(TaskRequest taskRequest, VirtualMachineCurrentSta
113113
return (cpuFitness + memFitness + networkFitness) / 3.0;
114114
}
115115
};
116-
117-
private static double calculateResourceFitness(TaskRequest request, VirtualMachineCurrentState targetVM, TaskTrackerState taskTrackerState,
118-
Func1<TaskRequest, Double> taskResourceGetter,
119-
Func1<VirtualMachineLease, Double> leaseResourceGetter) {
120-
121-
// The resources currently being used by running tasks
122-
double usedResources = 0.0;
123-
for (TaskRequest taskRequest : targetVM.getRunningTasks()) {
124-
usedResources += taskResourceGetter.call(taskRequest);
125-
}
126-
127-
// The total amount of resources on a VM
128-
double totalResources = leaseResourceGetter.call(targetVM.getCurrAvailableResources()) + usedResources;
129-
130-
// The amount of resources that have been requested in this scheduling run
131-
double requestedResources = 0.0;
132-
for (TaskAssignmentResult taskAssignmentResult : targetVM.getTasksCurrentlyAssigned()) {
133-
requestedResources += taskResourceGetter.call(taskAssignmentResult.getRequest());
134-
}
135-
136-
// The amount of resources that are available to use
137-
double availableResources = totalResources - (usedResources + requestedResources);
138-
return availableResources / totalResources;
139-
}
140116
}

0 commit comments

Comments
 (0)