1616
1717package com .netflix .fenzo .plugins ;
1818
19- import com .netflix .fenzo .TaskAssignmentResult ;
2019import com .netflix .fenzo .TaskRequest ;
2120import com .netflix .fenzo .TaskTrackerState ;
2221import com .netflix .fenzo .VMTaskFitnessCalculator ;
2322import 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