source: DCWoRMS/branches/coolemall/src/test/powerCapping/CB1PowerCappingEnergyEstimationPlugin.java @ 1420

Revision 1420, 6.8 KB checked in by wojtekp, 11 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.powerCapping;
2
3import java.util.List;
4
5import schedframe.resources.computing.Node;
6import schedframe.resources.computing.Processor;
7import schedframe.resources.computing.coolemall.ComputeBox1;
8import schedframe.resources.computing.coolemall.NodeGroup;
9import schedframe.resources.computing.profiles.energy.ResourceEvent;
10import schedframe.resources.computing.profiles.energy.power.PState;
11import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName;
12import schedframe.resources.devices.PhysicalResource;
13import schedframe.scheduling.manager.tasks.JobRegistry;
14import simulator.DataCenterWorkloadSimulator;
15import example.energy.BaseEnergyEstimationPlugin;
16import example.energy.coolemall.CoolEmAllTestbedMeasurements;
17import gridsim.dcworms.DCWormsTags;
18
19public class CB1PowerCappingEnergyEstimationPlugin extends BaseEnergyEstimationPlugin{
20
21        private int MAX_THRESHOLD = 1400;
22        private int MIN_THRESHOLD = 1200;
23        private double currentFrequencyLevel;
24        public double estimatePowerConsumption(ResourceEvent event, JobRegistry jobRegistry,
25                        PhysicalResource resource) {
26
27                double powerConsumption = 0;
28                ComputeBox1 computeBox1 = (ComputeBox1)resource;
29                for(NodeGroup ng:computeBox1.getNodesGroups()){
30                        try{
31                                powerConsumption = powerConsumption + ng.getPowerInterface().getRecentPowerUsage().getValue();
32                        } catch (Exception e){
33                               
34                        }
35                }
36                //System.out.println("rack");
37                int nrOfPoweredOffNodes = 0;
38                for(Node node: computeBox1.getNodes()){
39                        if(node.getPowerInterface().getPowerState().equals(StandardPowerStateName.OFF)){
40                                nrOfPoweredOffNodes++;
41                        }
42                }
43                if(nrOfPoweredOffNodes != computeBox1.getNodes().size()){
44                        powerConsumption = (powerConsumption + CoolEmAllTestbedMeasurements.OTHER_DEVICES_POWER_CONSUMPTION)/CoolEmAllTestbedMeasurements.POWER_SUPPLY_EFFICIENCY;                     
45                }
46               
47                loadThresholds(resource);
48                ///System.out.println(resource.getFullName() + " min: " + minValue);
49                //System.out.println(resource.getFullName() + " max: " + maxValue);
50                //System.out.println(resource.getFullName() + " current: " + powerConsumption);
51                //System.out.println(event.getType().toString() + ";" + event.getTag() + ":" + event.getSource());
52                //System.out.println(CB2_FCFS_Random_SP.mode);
53                if(powerConsumption > MAX_THRESHOLD && !CB2_FCFS_Random_SP.mode.equals(resource.getFullName())){
54                        DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.POWER_LIMIT_EXCEEDED, null);
55                }
56                else if(powerConsumption < MAX_THRESHOLD && !CB2_FCFS_Random_SP.mode.equals(resource.getFullName())){
57                        DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.POWER_LIMIT_EXCEEDED, null);
58                }
59               
60                if(false){
61
62                        List<Processor> processors = computeBox1.getProcessors();
63                        currentFrequencyLevel = processors.get(0).getPowerInterface().getLowestPState().getFrequency();
64
65                        boolean overThreshold = true;
66                        boolean canDoBetter = true;
67
68                        while(overThreshold && canDoBetter){
69                                //System.out.println(compRes.getFullName() + " - downgrading");
70                                int procNumberWithoutChange = 0;
71                                boolean improvement = false;
72                                //System.out.println(compRes.getFullName() + "; currentFrequencyLevel: " + currentFrequencyLevel);
73                                for (Processor proc: processors){
74                                        PState currPState = proc.getPowerInterface().getPState();
75                                        //System.out.println(proc.getFullName() + " - checking");
76                                        if(currPState.getFrequency() <= currentFrequencyLevel && proc.getFreeCores().size() != proc.getCores().size()){
77                                                //System.out.println("operating same level");
78                                                procNumberWithoutChange++;
79                                                continue;
80                                        }
81                                        if (proc.getFreeCores().size() == proc.getCores().size()){     
82                                                //System.out.println("free");
83                                                procNumberWithoutChange++;
84                                                continue;
85                                        }
86       
87                                        double lowerFrequency = proc.getPowerInterface().getHighestPState().getFrequency();
88                                        for(String pStateName: proc.getPowerInterface().getSupportedPStates().keySet()){
89                                                PState pState = proc.getPowerInterface().getSupportedPStates().get(pStateName);
90                                                if(pState.getFrequency() > lowerFrequency && pState.getFrequency() < currPState.getFrequency()){
91                                                        lowerFrequency = pState.getFrequency();
92                                                }
93                                        }
94                                        //System.out.println(proc.getFullName() + "; lower frequency: " + lowerFrequency);
95                                        if(lowerFrequency < currentFrequencyLevel){
96                                                //System.out.println(compRes.getFullName() + " - changing current frequency level");
97
98                                                currentFrequencyLevel = lowerFrequency;
99                                        }
100                                       
101                                        if(lowerFrequency != currPState.getFrequency()) {
102                                                //System.out.println(proc.getFullName() + " - lowering frequency");
103                                                proc.getPowerInterface().setFrequency(lowerFrequency);
104                                                improvement = true;
105                                        }
106                                        if(lowerFrequency == proc.getPowerInterface().getHighestPState().getFrequency()){
107                                                canDoBetter = false;
108                                        } else {
109                                                canDoBetter = true;
110                                        }
111                                        if(computeBox1.getPowerInterface().getRecentPowerUsage().getValue() <= MAX_THRESHOLD){
112                                                overThreshold = false;
113                                                break;
114                                        }
115                                }       
116                                if(procNumberWithoutChange == processors.size() || improvement == false){
117                                        //System.out.println(compRes.getFullName() + " - failed to improve");
118                                        double nextFrequencyLevel = processors.get(0).getPowerInterface().getHighestPState().getFrequency();
119                                        for (Processor proc: processors){
120                                                for(String pStateName: proc.getPowerInterface().getSupportedPStates().keySet()){
121                                                        PState pState = proc.getPowerInterface().getSupportedPStates().get(pStateName);
122                                                        if(pState.getFrequency() > nextFrequencyLevel && pState.getFrequency() < currentFrequencyLevel){
123                                                                nextFrequencyLevel = pState.getFrequency();
124                                                        }
125                                                }
126                                        }
127                                        //System.out.println(compRes.getFullName() + "; nextFrequencyLevel: " + nextFrequencyLevel);
128                                        currentFrequencyLevel = nextFrequencyLevel;
129                                        if(currentFrequencyLevel == processors.get(0).getPowerInterface().getHighestPState().getFrequency()){
130                                                canDoBetter = false;
131                                        }
132                                        procNumberWithoutChange = 0;
133                                }
134                        }
135
136                } else if (powerConsumption < MIN_THRESHOLD) {
137                }
138
139                return powerConsumption;
140        }
141               
142        private void loadThresholds(PhysicalResource resource){
143                String productName = resource.getResourceCharacteristic().getParameters().get("product").get(0).getContent();
144                if(productName.equals("HS20")){
145                        MAX_THRESHOLD = PowerCapLevels.HS20_MAX;
146                        MIN_THRESHOLD = PowerCapLevels.HS20_MIN;
147                } else if (productName.equals("IBM 305x COMPxxx")){
148                        MAX_THRESHOLD = PowerCapLevels.IBM_305x_MAX;
149                        MIN_THRESHOLD = PowerCapLevels.IBM_305x_MIN;
150                } else if (productName.equals("iDataPlex M2 NRN20xxx")){
151                        MAX_THRESHOLD = PowerCapLevels.iDataPlex_M2_MAX;
152                        MIN_THRESHOLD = PowerCapLevels.iDataPlex_M2_MIN;
153                } else if (productName.equals("RenderCloud SDR31xxx")){
154                        MAX_THRESHOLD = PowerCapLevels.RenderCloud_MAX;
155                        MIN_THRESHOLD = PowerCapLevels.RenderCloud_MIN;
156                } else if (productName.equals("iDataPlex M3 NRN17xxx")){
157                        MAX_THRESHOLD = PowerCapLevels.iDataPlex_M3_MAX;
158                        MIN_THRESHOLD = PowerCapLevels.iDataPlex_M3_MIN;
159                }
160        }
161}
Note: See TracBrowser for help on using the repository browser.