source: DCWoRMS/trunk/src/test/article/recs/utils/RecsProcessorPowerInterface.java @ 665

Revision 665, 4.1 KB checked in by wojtekp, 12 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.article.recs.utils;
2
3import java.util.Map;
4
5import schedframe.resources.ResourceStatus;
6import schedframe.resources.computing.ComputingResource;
7import schedframe.resources.computing.profiles.energy.EnergyEvent;
8import schedframe.resources.computing.profiles.energy.EnergyEventType;
9import schedframe.resources.computing.profiles.energy.power.PState;
10import schedframe.resources.computing.profiles.energy.power.PowerProfile;
11import schedframe.resources.computing.profiles.energy.power.PowerStateName;
12import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName;
13import schedframe.resources.computing.profiles.energy.power.ui.ProcessorPowerInterface;
14
15public class RecsProcessorPowerInterface extends ProcessorPowerInterface {
16
17        protected PState currentPState;
18
19        public RecsProcessorPowerInterface(ComputingResource resource, PowerProfile pp){
20                super(resource, pp);
21                currentPowerState = StandardPowerStateName.ON;
22                currentPState = getLowestPState();
23                if(currentPState == null)
24                        currentPState = getSupportedPStates().get("P0");
25        }
26       
27        public boolean setPowerState(PowerStateName powerState){
28                if(!supportPowerState(powerState))
29                        return false;
30                if(powerState != currentPowerState){
31                        currentPowerState = powerState;
32                        if(powerState == StandardPowerStateName.OFF){
33                                resource.setStatus(ResourceStatus.UNAVAILABLE);
34                        } else if(powerState == StandardPowerStateName.ON){
35                                resource.setStatus(ResourceStatus.FREE);
36                        }
37                        resource.handleEvent(new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, resource.getName()));         
38                }
39
40                return true;
41        }
42
43        public PState getPState(){
44                return currentPState;
45        }
46       
47        public Map<String, PState> getSupportedPStates() {
48                return powerProfile.getSupportedPStates();
49        }
50       
51        public boolean supportPState(PState pState) {
52
53                for(String pStateName: getSupportedPStates().keySet()){
54                        if(pState.getName().equals(pStateName)){
55                                return true;
56                        }
57                }
58                return false;
59        }
60       
61        public boolean setPState(String pStateName){
62                PState newPState = getSupportedPStates().get(pStateName);
63
64
65                if(newPState != null && newPState != currentPState){
66                        //double factor = newPState.getFrequency()/currentPState.getFrequency();
67                        currentPState = newPState;
68                        //CpuSpeed speed = (CpuSpeed)resource.getResourceCharacteristic().getResourceUnits().get(StandardResourceUnitName.CPUSPEED).get(0);
69                        //speed.setAmount(Double.valueOf(currentPState.getFrequency()).intValue());
70                        //new ResourceEventCommand(resource).execute(EnergyEventType.FREQUENCY_CHANGED);
71                        resource.handleEvent(new EnergyEvent(EnergyEventType.FREQUENCY_CHANGED, resource.getName()));
72                        //resource.getScheduler().sendInternal(GridSimTags.SCHEDULE_NOW, DCWormsTags.UPDATE, resource.getName());
73                        return true;
74                }
75
76                return false;
77        }
78       
79        public double getFrequency() {
80                return currentPState.getFrequency();
81        }
82
83        public boolean setFrequency(double freq) {
84
85                for(String pStateName: getSupportedPStates().keySet()){
86                        if(getSupportedPStates().get(pStateName).getFrequency() == freq){
87                                setPState(pStateName);
88                                return true;
89                        }
90                }
91                return false;
92        }
93
94        public double getPowerConsumption(PState state) throws NoSuchFieldException{
95                double powerConsumption = 0;
96                if(supportPState(state)){
97                        for(String pStateName: getSupportedPStates().keySet()){
98                                if(pStateName.equals(state.getName())){
99                                        powerConsumption = getSupportedPStates().get(pStateName).getPower();
100                                        break;
101                                }
102                        }
103                }
104                return powerConsumption;
105        }
106       
107        public PState getLowestPState(){
108                PState lowPState = null;
109                double highestFreq = Double.MIN_VALUE;
110                for(String key: getSupportedPStates() .keySet()){
111                        PState pState = getSupportedPStates().get(key);
112                        if(pState.getFrequency() > highestFreq){
113                                highestFreq = pState.getFrequency();
114                                lowPState = pState;
115                        }
116                }
117                return lowPState;
118        }
119       
120        public PState getHighestPState(){
121                PState highPState = null;
122                double lowestFreq = Double.MAX_VALUE;
123                for(String key: getSupportedPStates() .keySet()){
124                        PState pState = getSupportedPStates().get(key);
125                        if(pState.getFrequency() < lowestFreq){
126                                lowestFreq = pState.getFrequency();
127                                highPState = pState;
128                        }
129                }
130                return highPState;
131        }
132
133}
134
Note: See TracBrowser for help on using the repository browser.