[826] | 1 | package test.article2.recs.utils; |
---|
| 2 | |
---|
| 3 | import java.util.Map; |
---|
| 4 | |
---|
| 5 | import schedframe.resources.ResourceStatus; |
---|
| 6 | import schedframe.resources.computing.ComputingResource; |
---|
| 7 | import schedframe.resources.computing.profiles.energy.EnergyEvent; |
---|
| 8 | import schedframe.resources.computing.profiles.energy.EnergyEventType; |
---|
| 9 | import schedframe.resources.computing.profiles.energy.power.PState; |
---|
| 10 | import schedframe.resources.computing.profiles.energy.power.PowerProfile; |
---|
| 11 | import schedframe.resources.computing.profiles.energy.power.PowerStateName; |
---|
| 12 | import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName; |
---|
| 13 | import schedframe.resources.computing.profiles.energy.power.ui.ProcessorPowerInterface; |
---|
| 14 | |
---|
| 15 | public 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 | |
---|