source: xssim/trunk/src/test/rewolucja/energy/profile/implementation/CPUPowerProfile.java @ 215

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