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

Revision 1441, 3.9 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.ResourceEvent;
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.computing.profiles.energy.power.plugin.EnergyPluginConfiguration;
9import schedframe.resources.devices.PhysicalResource;
10import schedframe.scheduling.manager.tasks.JobRegistry;
11import simulator.DataCenterWorkloadSimulator;
12import example.energy.BaseEnergyEstimationPlugin;
13import gridsim.dcworms.DCWormsTags;
14
15public class NodeEnergyEstimationPlugin extends BaseEnergyEstimationPlugin {
16
17        public double estimatePowerConsumption(ResourceEvent event, JobRegistry jobRegistry,
18                        PhysicalResource resource) {
19                double powerConsumption = 0;
20                EnergyPluginConfiguration epConf = (EnergyPluginConfiguration) getConfiguration();
21               
22                Node node = (Node) resource;
23
24                if(node.getPowerInterface().getPowerState().equals(StandardPowerStateName.ON)){
25                        powerConsumption = getPowerConsumption(node);
26                }
27                if(powerConsumption > epConf.getPowerCapLevel()){
28                        DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.RESOURCE_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;
65                                                try{
66                                                        load = Double.valueOf(powerState.getName().getLabel().substring(3));
67                                                }catch (Exception e){
68                                                        continue;
69                                                }
70                                                if(loadLevel > load){
71                                                        lowerLoadLevel = load;
72                                                }
73                                                else if(loadLevel < load){
74                                                        higherLoadLevel = load;
75                                                }
76                                        }
77                                        double powerBelow;
78                                        double powerAbove;
79                                        double a;
80                                        double b;
81                                        if(lowerLoadLevel != higherLoadLevel) {
82                                                powerBelow = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(lowerLoadLevel).intValue()));
83                                                powerAbove = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(higherLoadLevel).intValue()));
84                                                a = (powerAbove - powerBelow)/(higherLoadLevel - lowerLoadLevel);
85                                                b = powerAbove - a * higherLoadLevel;
86                                        } else {
87                                                powerBelow = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(lowestLoadLevel).intValue()));
88                                                powerAbove = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(highestLoadLevel).intValue()));
89                                                a = (powerAbove - powerBelow)/(highestLoadLevel - lowestLoadLevel);
90                                                b = powerAbove - a * highestLoadLevel;
91                                        }
92                                        powerConsumption = a * loadLevel + b;
93                                }
94                        }
95                } catch (Exception e){
96                       
97                }
98       
99                return powerConsumption;
100        }
101
102}
Note: See TracBrowser for help on using the repository browser.