source: xssim/src/test/rewolucja/energy/profile/CPUPowerProfile.java @ 104

Revision 104, 3.7 KB checked in by wojtekp, 13 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.rewolucja.energy.profile;
2
3import gridsim.GridSimTags;
4import gridsim.gssim.GssimTags;
5
6import java.util.Arrays;
7import java.util.Collections;
8import java.util.HashMap;
9import java.util.List;
10import java.util.Map;
11
12import schedframe.resources.PowerState;
13import schedframe.resources.units.CpuSpeed;
14import schedframe.scheduling.utils.ResourceParameterName;
15import test.rewolucja.energy.EnergyEvent;
16import test.rewolucja.energy.EnergyEventType;
17import test.rewolucja.energy.extension.EnergyExtension;
18import test.rewolucja.extensions.ExtensionType;
19import test.rewolucja.resources.ResourceStatus;
20import test.rewolucja.resources.physical.implementation.CPU;
21
22public class CPUPowerProfile extends AbstractPowerProfile{
23
24        protected CPU cpu;
25        protected PState pState;
26
27        public CPUPowerProfile(){
28                powerState = PowerState.ON;
29                pState = getSupportedPStates().get(PStateType.P0);
30        }
31
32        public void visit(CPU p){
33                cpu = p;
34                energyExtension = (EnergyExtension) cpu.getExtensionList().getExtension(ExtensionType.ENERGY_EXTENSION);
35        }
36
37        public boolean setPowerState(PowerState state){
38                if(!supportPowerState(state))
39                        return false;
40                powerState = state;
41
42                if(state == PowerState.OFF){
43                        cpu.setStatus(ResourceStatus.NOTAVAILABLE);
44                }
45                else if(state == PowerState.ON){
46                        cpu.setStatus(ResourceStatus.FREE);
47                }
48               
49                cpu.handleEvent(new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, cpu.getName()));
50                return true;
51        }
52
53       
54        public double getPowerConsumption(PowerState state) {
55                if(powerState == PowerState.OFF)
56                        return 0;
57                else if(powerState == PowerState.ON){
58                        if(cpu.getStatus() == ResourceStatus.BUSY)
59                                return getPState().getPower();
60                        else if(cpu.getStatus() == ResourceStatus.FREE)
61                                return getPState().getPower()/1.25;
62                }
63                return 1;
64        }
65
66
67        public boolean supportPowerState(PowerState state) {
68                switch(state){
69                        case ON:
70                                return true;
71                        case OFF:
72                                return true;
73                        default: return false;
74                }
75        }
76
77        public List<PowerState> getSupportedPowerStates() {
78                return Arrays.asList(new PowerState[]{PowerState.ON, PowerState.OFF});
79        }
80
81       
82        public double getFrequency() {
83                return pState.getFrequency();
84        }
85
86        public boolean setFrequency(double freq) {
87                for(PStateType pStateType: getSupportedPStates().keySet()){
88                        if(getSupportedPStates().get(pStateType).getFrequency() == freq){
89                                setPState(pStateType);
90                                return true;
91                        }
92                }
93                return false;
94        }
95
96        public PState getPState(){
97                return pState;
98        }
99       
100        public boolean setPState(PStateType pStateType){
101                PState newPState = getSupportedPStates().get(pStateType);
102                if(newPState != null)
103                {
104                        double factor = pState.getFrequency()/newPState.getFrequency();
105                        pState = newPState;
106                        CpuSpeed speed = (CpuSpeed )cpu.getResourceCharacteristic().getResourceUnits().get(ResourceParameterName.CPUSPEED).get(0);
107                        //speed.setAmount((int)pState.getFrequency());
108
109                        cpu.handleEvent(new EnergyEvent(EnergyEventType.FREQUENCY_CHANGED, cpu.getName()));
110                        cpu.getLogicalResource().sendInternal(GridSimTags.SCHEDULE_NOW, GssimTags.UPDATE, cpu.getName());
111                        return true;
112                }
113                return false;
114        }
115       
116        public Map<PStateType, PState> getSupportedPStates(){
117                return DefaultModel.getConfiguration();
118        }
119       
120        private static class DefaultModel{
121                private static Map<PStateType, PState> pStates;
122                static {
123                        Map<PStateType, PState> pStatesMap = new HashMap<PStateType, PState>();
124                        pStatesMap.put(PStateType.P0, new PState(PStateType.P0, 3000, 0, 350));
125                        pStatesMap.put(PStateType.P1, new PState(PStateType.P1, 2660, 0, 343));
126                        pStatesMap.put(PStateType.P2, new PState(PStateType.P2, 2330, 0, 337));
127                        pStatesMap.put(PStateType.P3, new PState(PStateType.P3, 2000, 0, 330));
128                        pStates = Collections.unmodifiableMap(pStatesMap);
129                }
130               
131                public static Map<PStateType, PState> getConfiguration(){
132                        return pStates;
133                }
134        }
135}
136
Note: See TracBrowser for help on using the repository browser.