source: DCWoRMS/branches/coolemall/src/test/migrate/NodeEnergyEstimationPlugin.java @ 1399

Revision 1399, 3.7 KB checked in by wojtekp, 11 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.migrate;
2
3import schedframe.resources.computing.Node;
4import schedframe.resources.computing.profiles.energy.EnergyEvent;
5import schedframe.resources.computing.profiles.energy.power.PowerState;
6import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName;
7import schedframe.resources.computing.profiles.energy.power.CustomPowerStateName;
8import schedframe.resources.devices.PhysicalResource;
9import schedframe.scheduling.manager.tasks.JobRegistry;
10import simulator.DataCenterWorkloadSimulator;
11import example.energy.BaseEnergyEstimationPlugin;
12import gridsim.dcworms.DCWormsTags;
13
14public class NodeEnergyEstimationPlugin extends BaseEnergyEstimationPlugin {
15
16        private static int POWER_CAP_LEVEL = 150;
17
18       
19        public double estimatePowerConsumption(EnergyEvent event, JobRegistry jobRegistry,
20                        PhysicalResource resource) {
21                double powerConsumption = 0;
22                Node node = (Node) resource;
23
24                if(node.getPowerInterface().getPowerState().equals(StandardPowerStateName.ON)){
25                        powerConsumption = getPowerConsumption(node);
26                }
27                if(powerConsumption > POWER_CAP_LEVEL ){
28                        DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.POWER_LIMIT_EXCEEDED, node.getFullName());
29                }
30                return powerConsumption;
31        }
32       
33        public double getPowerConsumption(Node node){
34                double powerConsumption = 0;
35                double loadLevel = node.getLoadInterface().getRecentUtilization().getValue();
36                double lowestLoadLevel = 100;
37                double highestLoadLevel = 0;
38                try{
39                        if(node.getPowerInterface().supportPowerState(new CustomPowerStateName("ON_" + new Double(loadLevel).intValue()))){
40                                powerConsumption = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(loadLevel).intValue()));
41                        } else {
42                                for(PowerState powerState: node.getPowerInterface().getSupportedPowerStates()){
43                                        Double load;
44                                        try{
45                                                load = Double.valueOf(powerState.getName().getLabel().substring(3));
46                                        }catch (Exception e){
47                                                continue;
48                                        }
49                                        if(lowestLoadLevel > load){
50                                                lowestLoadLevel = load;
51                                        }
52                                        if(highestLoadLevel < load){
53                                                highestLoadLevel = load;
54                                        }
55                                }
56                                if(loadLevel == 0){
57                                        powerConsumption = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_0"));
58                                } else {
59                                       
60                                        double lowerLoadLevel = lowestLoadLevel;
61                                        double higherLoadLevel = highestLoadLevel;
62
63                                        for(PowerState powerState: node.getPowerInterface().getSupportedPowerStates()){
64                                                Double load = Double.valueOf(powerState.getName().getLabel().substring(3));
65                                                if(loadLevel > load){
66                                                        lowerLoadLevel = load;
67                                                }
68                                                else if(loadLevel < load){
69                                                        higherLoadLevel = load;
70                                                        break;
71                                                }
72                                        }
73                                        double powerBelow;
74                                        double powerAbove;
75                                        double a;
76                                        double b;
77                                        if(lowerLoadLevel != higherLoadLevel) {
78                                                powerBelow = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(lowerLoadLevel).intValue()));
79                                                powerAbove = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(higherLoadLevel).intValue()));
80                                                a = (powerAbove - powerBelow)/(higherLoadLevel - lowerLoadLevel);
81                                                b = powerAbove - a * higherLoadLevel;
82                                        } else {
83                                                powerBelow = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(lowestLoadLevel).intValue()));
84                                                powerAbove = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(highestLoadLevel).intValue()));
85                                                a = (powerAbove - powerBelow)/(highestLoadLevel - lowestLoadLevel);
86                                                b = powerAbove - a * highestLoadLevel;
87                                        }
88                                        powerConsumption = a * loadLevel + b;
89                                }
90                        }
91                } catch (Exception e){
92                       
93                }
94       
95                return powerConsumption;
96        }
97
98}
Note: See TracBrowser for help on using the repository browser.