source: DCWoRMS/trunk/src/test/article2/recs/utils/RecsProcessorPowerInterface.java @ 826

Revision 826, 4.1 KB checked in by wojtekp, 12 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.article2.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                else throw new NoSuchFieldException();
105                return powerConsumption;
106        }
107       
108        public PState getLowestPState(){
109                PState lowPState = null;
110                double highestFreq = Double.MIN_VALUE;
111                for(String key: getSupportedPStates() .keySet()){
112                        PState pState = getSupportedPStates().get(key);
113                        if(pState.getFrequency() > highestFreq){
114                                highestFreq = pState.getFrequency();
115                                lowPState = pState;
116                        }
117                }
118                return lowPState;
119        }
120       
121        public PState getHighestPState(){
122                PState highPState = null;
123                double lowestFreq = Double.MAX_VALUE;
124                for(String key: getSupportedPStates() .keySet()){
125                        PState pState = getSupportedPStates().get(key);
126                        if(pState.getFrequency() < lowestFreq){
127                                lowestFreq = pState.getFrequency();
128                                highPState = pState;
129                        }
130                }
131                return highPState;
132        }
133
134}
135
Note: See TracBrowser for help on using the repository browser.