source: xssim/branches/tpiontek/src/test/rewolucja/energy/profile/implementation/CPUPowerProfile.java @ 257

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