source: DCWoRMS/branches/coolemall/src/test/freqscaling/CB1PowerCappingEnergyEstimationPlugin.java @ 1441

Revision 1441, 6.0 KB checked in by wojtekp, 11 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.freqscaling;
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 = 450;
22        private int MIN_THRESHOLD = 400;
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){
54                        DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.RESOURCE_POWER_LIMIT_EXCEEDED, null);
55                }
56                else if(powerConsumption < MAX_THRESHOLD){
57                        DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.RESOURCE_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                MAX_THRESHOLD =450;
145                MIN_THRESHOLD = 400;
146
147        }
148}
Note: See TracBrowser for help on using the repository browser.