source: DCWoRMS/branches/coolemall/src/test/testSOP/NodeEnergyEstimationPlugin.java @ 1606

Revision 1606, 6.6 KB checked in by wojtekp, 8 years ago (diff)
  • Property svn:mime-type set to text/plain
RevLine 
[1606]1package test.testSOP;
2
3import java.io.File;
4import java.util.List;
5
6import org.apache.commons.logging.LogFactory;
7
8import schedframe.events.EventReason;
9import schedframe.resources.computing.Node;
10import schedframe.resources.computing.profiles.energy.ResourceEvent;
11import schedframe.resources.computing.profiles.energy.power.PowerState;
12import schedframe.resources.computing.profiles.energy.power.CustomPowerStateName;
13import schedframe.resources.computing.profiles.energy.power.PowerStateName;
14import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName;
15import schedframe.resources.devices.PhysicalResource;
16import schedframe.scheduling.manager.tasks.JobRegistry;
17import example.energy.BaseEnergyEstimationPlugin;
18
19public class NodeEnergyEstimationPlugin extends BaseEnergyEstimationPlugin {
20
21//      private static int POWER_CAP_LEVEL = 150;
22        org.apache.commons.logging.Log log = LogFactory.getLog(NodeEnergyEstimationPlugin.class);
23       
24//      public double estimatePowerConsumption(EnergyEvent event, JobRegistry jobRegistry,
25//                      PhysicalResource resource) {
26//             
27//              if (event.getReason() == EventReason.SIM_INIT) {
28//                      String state = "CUSTOM_ON";
29//                      log.debug("Initialization of all the nodes power state to "+state);
30//                      resource.getPowerInterface().setPowerState(new CustomPowerStateName(state));
31//              }
32//              double powerConsumption = 0;
33//              Node node = (Node) resource;
34//              if(node.getPowerInterface().getPowerState().getLabel().equals(new CustomPowerStateName("CUSTOM_ON").getLabel())){
35//                      powerConsumption = getPowerConsumption(node);
36//              }
37////            if(powerConsumption > POWER_CAP_LEVEL ){
38////                    DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.POWER_LIMIT_EXCEEDED, node.getFullName());
39////            }
40//              return powerConsumption;
41//      }
42       
43        public double getPowerConsumption(Node node){
44                double powerConsumption = 0;
45                double loadLevel = node.getLoadInterface().getRecentUtilization().getValue();
46                double p_max = -1;
47                double p_min = -1;
48
49                //Find power Consumption of 100% and 0% load states
50                for (PowerState p : node.getPowerInterface().getSupportedPowerStates()) {
51                        if (p.getName().getLabel().equals(new CustomPowerStateName("P_MAX").getLabel())) {
52                                p_max = p.getPowerUsage();
53                        }
54                        if (p.getName().getLabel().equals(new CustomPowerStateName("P_MIN").getLabel())) {
55                                p_min = p.getPowerUsage();
56                        }
57                }
58                if (p_max == -1 || p_min == -1) {
59                        log.error("ERROR: Load_100 or load_0 not found in powerstate list of node "+node.getFullName());
60                }
61                else {
62                        powerConsumption = p_min + (p_max-p_min)*(loadLevel/100);
63//                      log.debug("Power Consumption of node "+node.getName()+" at "+loadLevel+"% is "+powerConsumption);
64                }
65//              log.debug("powerConsumption : "+powerConsumption);
66                return powerConsumption;
67        }
68
69        @Override
70        public double estimatePowerConsumption(ResourceEvent event, JobRegistry jobRegistry, PhysicalResource resource) {
71                //Cleanup !
72                if (event.getReason() == EventReason.SIM_INIT) {
73                        //Do at initialisation of simulation
74                }
75//              //TesT
76//              if (event.getReason() == EventReason.SIM_INIT && resource.getName().equals("Node_1")) {
77//                      PowerStateName state = StandardPowerStateName.OFF;
78//                      log.debug("Initialization of Node_1 power state to "+state);
79//                      resource.getPowerInterface().setPowerState(state);
80//              }
81                double powerConsumption = 0;
82                Node node = (Node) resource;
83                if(node.getPowerInterface().getPowerState().equals(StandardPowerStateName.ON)){
84                        powerConsumption = getPowerConsumption(node);
85                }
86                else {
87                        try {
88                                powerConsumption = node.getPowerInterface().getPowerConsumption(node.getPowerInterface().getPowerState());
89                        } catch (NoSuchFieldException e) {
90                                // TODO Auto-generated catch block
91                                e.printStackTrace();
92                        }
93                }
94//              if(powerConsumption > POWER_CAP_LEVEL ){
95//                      DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.POWER_LIMIT_EXCEEDED, node.getFullName());
96//              }
97                return powerConsumption;
98        }
99       
100//      public double getPowerConsumption(Node node){
101//              double powerConsumption = 0;
102//              double loadLevel = node.getLoadInterface().getRecentUtilization().getValue();
103//              double lowestLoadLevel = 100;
104//              double highestLoadLevel = 0;
105//              try{
106//                      if(node.getPowerInterface().supportPowerState(new CustomPowerStateName("ON_" + new Double(loadLevel).intValue()))){
107//                              powerConsumption = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(loadLevel).intValue()));
108//                      } else {
109//                              for(PowerState powerState: node.getPowerInterface().getSupportedPowerStates()){
110//                                      Double load;
111//                                      try{
112//                                              load = Double.valueOf(powerState.getName().getLabel().substring(3));
113//                                      }catch (Exception e){
114//                                              continue;
115//                                      }
116//                                      if(lowestLoadLevel > load){
117//                                              lowestLoadLevel = load;
118//                                      }
119//                                      if(highestLoadLevel < load){
120//                                              highestLoadLevel = load;
121//                                      }
122//                              }
123//                              if(loadLevel == 0){
124//                                      powerConsumption = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_0"));
125//                              } else {
126//                                     
127//                                      double lowerLoadLevel = lowestLoadLevel;
128//                                      double higherLoadLevel = highestLoadLevel;
129//
130//                                      for(PowerState powerState: node.getPowerInterface().getSupportedPowerStates()){
131//                                              Double load = Double.valueOf(powerState.getName().getLabel().substring(3));
132//                                              if(loadLevel > load){
133//                                                      lowerLoadLevel = load;
134//                                              }
135//                                              else if(loadLevel < load){
136//                                                      higherLoadLevel = load;
137//                                                      break;
138//                                              }
139//                                      }
140//                                      double powerBelow;
141//                                      double powerAbove;
142//                                      double a;
143//                                      double b;
144//                                      if(lowerLoadLevel != higherLoadLevel) {
145//                                              powerBelow = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(lowerLoadLevel).intValue()));
146//                                              powerAbove = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(higherLoadLevel).intValue()));
147//                                              a = (powerAbove - powerBelow)/(higherLoadLevel - lowerLoadLevel);
148//                                              b = powerAbove - a * higherLoadLevel;
149//                                      } else {
150//                                              powerBelow = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(lowestLoadLevel).intValue()));
151//                                              powerAbove = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(highestLoadLevel).intValue()));
152//                                              a = (powerAbove - powerBelow)/(highestLoadLevel - lowestLoadLevel);
153//                                              b = powerAbove - a * highestLoadLevel;
154//                                      }
155//                                      powerConsumption = a * loadLevel + b;
156//                              }
157//                      }
158//              } catch (Exception e){
159//                     
160//              }
161//     
162//              return powerConsumption;
163//      }
164
165}
Note: See TracBrowser for help on using the repository browser.