source: DCWoRMS/branches/coolemall/src/test/simpat/models/basic/RackEnergyEstimationPlugin.java @ 1469

Revision 1469, 4.3 KB checked in by wojtekp, 10 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.simpat.models.basic;
2
3import java.util.List;
4
5import schedframe.resources.CoolEmAllResourceType;
6import schedframe.resources.computing.ComputingResource;
7import schedframe.resources.computing.Node;
8import schedframe.resources.computing.Processor;
9import schedframe.resources.computing.Rack;
10import schedframe.resources.computing.coolemall.ComputeBox1;
11import schedframe.resources.computing.coolemall.NodeGroup;
12import schedframe.resources.computing.profiles.energy.ResourceEvent;
13import schedframe.resources.computing.profiles.energy.airthroughput.CustomAirflowStateName;
14import schedframe.resources.computing.profiles.energy.power.PState;
15import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName;
16import schedframe.resources.devices.Device;
17import schedframe.resources.devices.PhysicalResource;
18import schedframe.scheduling.manager.tasks.JobRegistry;
19import simulator.DataCenterWorkloadSimulator;
20import example.energy.BaseEnergyEstimationPlugin;
21import example.energy.coolemall.CoolEmAllTestbedMeasurements;
22import gridsim.dcworms.DCWormsTags;
23
24public class RackEnergyEstimationPlugin extends BaseEnergyEstimationPlugin{
25
26        double powerCapLevel = -1;
27        double powerUpgradeLevel = -1;
28       
29        public double estimatePowerConsumption(ResourceEvent event, JobRegistry jobRegistry,
30                        PhysicalResource resource) {
31               
32                if(powerCapLevel == -1 || powerUpgradeLevel == -1){
33                        loadThresholds((ComputingResource) resource);
34                }
35               
36                double powerConsumption = 0;
37                Rack rack = (Rack)resource;
38                for(Node node:rack.getNodes()){
39                        try{
40                                powerConsumption = powerConsumption + node.getPowerInterface().getRecentPowerUsage().getValue();
41                        } catch (Exception e){
42                               
43                        }
44                }
45               
46                int nrOfPoweredOffNodes = 0;
47                for(Node node: rack.getNodes()){
48                        if(node.getPowerInterface().getPowerState().equals(StandardPowerStateName.OFF)){
49                                nrOfPoweredOffNodes++;
50                        }
51                }
52                if(nrOfPoweredOffNodes != rack.getNodes().size()){
53                        powerConsumption = (powerConsumption + CoolEmAllTestbedMeasurements.OTHER_DEVICES_POWER_CONSUMPTION)/CoolEmAllTestbedMeasurements.POWER_SUPPLY_EFFICIENCY;                     
54                }
55               
56                if(powerConsumption > powerCapLevel){
57                        DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.RESOURCE_POWER_LIMIT_EXCEEDED, null);
58                }
59                else if(powerConsumption < powerUpgradeLevel){
60                        DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.RESOURCE_POWER_LIMIT_EXCEEDED, null);
61                }
62                return powerConsumption;
63        }
64       
65        private void loadThresholds(ComputingResource compResource){
66               
67                Rack rack = (Rack) compResource;
68                double pcLevel = 0;
69                double puLevel = 0;
70                for(Processor proc: rack.getProcessors()){
71                        PState highestPState =  proc.getPowerInterface().getHighestPState();
72                        PState secondHighestPState =  proc.getPowerInterface().getLowestPState();
73                        for(String pStateName: proc.getPowerInterface().getSupportedPStates().keySet()){
74                                PState pState = proc.getPowerInterface().getSupportedPStates().get(pStateName);
75                                if(pState.getFrequency()  < secondHighestPState.getFrequency() && pState.getFrequency() > highestPState.getFrequency()){
76                                        secondHighestPState = pState;
77                                }
78                        }
79                        double maxMinPowerUsage = 0;
80                        double powerUsage = 0;
81                       
82                        for(Double load: highestPState.getLoadPowerUsage().keySet()){
83                                powerUsage = highestPState.getLoadPowerUsage().get(load);
84                                if(powerUsage > maxMinPowerUsage){
85                                        maxMinPowerUsage= powerUsage;                           
86                                }
87                        }
88                        pcLevel = pcLevel + maxMinPowerUsage;
89                       
90                        maxMinPowerUsage = 0;
91                        powerUsage = 0;
92                       
93                        for(Double load: secondHighestPState.getLoadPowerUsage().keySet()){
94                                powerUsage = secondHighestPState.getLoadPowerUsage().get(load);
95                                if(powerUsage > maxMinPowerUsage){
96                                        maxMinPowerUsage= powerUsage;                           
97                                }
98                        }
99                        puLevel = puLevel + maxMinPowerUsage;
100                       
101                }
102               
103                double fpc = 0;
104                for(Node node: rack.getNodes()){
105                        for(Device device: node.getResourceCharacteristic().getDevices()){
106                                try {
107                                        fpc = fpc + device.getAirflowInterface().getPowerConsumption(new CustomAirflowStateName("ON_100"));
108                                } catch (NoSuchFieldException e) {
109                                        // TODO Auto-generated catch block
110                                        e.printStackTrace();
111                                }
112                        }
113
114                }
115                pcLevel = (pcLevel + fpc) / CoolEmAllTestbedMeasurements.POWER_SUPPLY_EFFICIENCY;
116                puLevel = (puLevel + fpc) / CoolEmAllTestbedMeasurements.POWER_SUPPLY_EFFICIENCY;
117
118                puLevel = (pcLevel * pcLevel / puLevel);
119
120                powerCapLevel = pcLevel;
121                powerUpgradeLevel = puLevel;
122        }
123
124}
Note: See TracBrowser for help on using the repository browser.