source: DCWoRMS/trunk/src/schedframe/resources/computing/profiles/energy/EnergyExtension.java @ 820

Revision 820, 8.4 KB checked in by wojtekp, 12 years ago (diff)
  • Property svn:mime-type set to text/plain
RevLine 
[477]1package schedframe.resources.computing.profiles.energy;
2
3import java.util.Properties;
4
5import org.apache.commons.logging.Log;
6import org.apache.commons.logging.LogFactory;
7
8import schedframe.events.Event;
9import schedframe.resources.computing.ComputingResource;
10import schedframe.resources.computing.extensions.Extension;
11import schedframe.resources.computing.extensions.ExtensionException;
12import schedframe.resources.computing.extensions.ExtensionType;
[755]13import schedframe.resources.computing.profiles.energy.airthroughput.AirThroughputInterfaceFactory;
[495]14import schedframe.resources.computing.profiles.energy.airthroughput.AirThroughputProfile;
15import schedframe.resources.computing.profiles.energy.airthroughput.ui.AirThroughputInterface;
[755]16import schedframe.resources.computing.profiles.energy.power.PowerInterfaceFactory;
[477]17import schedframe.resources.computing.profiles.energy.power.PowerProfile;
18import schedframe.resources.computing.profiles.energy.power.ui.PowerInterface;
[820]19import schedframe.resources.computing.profiles.energy.thermal.ThermalInterfaceFactory;
20import schedframe.resources.computing.profiles.energy.thermal.ThermalProfile;
21import schedframe.resources.computing.profiles.energy.thermal.ui.ThermalInterface;
[477]22import schedframe.scheduling.manager.tasks.JobRegistryImpl;
23
[495]24public class EnergyExtension implements Extension{
[477]25
26        private Log log = LogFactory.getLog(EnergyExtension.class);
27
28        protected PowerInterface powerInterface;
29        protected PowerProfile powerProfile;
[495]30       
31        protected AirThroughputInterface airFlowInterface;
32        protected AirThroughputProfile airFlowProfile;
33       
[820]34        protected ThermalInterface thermalInterface;
35        protected ThermalProfile thermalProfile;
36       
[477]37        protected ComputingResource computingResource;
38
[820]39
40        public EnergyExtension(ComputingResource computingResource, PowerInterface powerInterface, PowerProfile powerProfile) {
41                this.powerProfile = powerProfile;
42                this.powerInterface = PowerInterfaceFactory.createPowerInterface(computingResource, powerProfile);
[477]43        }
[820]44       
45        public EnergyExtension(ComputingResource computingResource, PowerProfile powerProfile,
46                        AirThroughputProfile airFlowProfile) {
[495]47                super();
[820]48                this.computingResource = computingResource;
[495]49                this.powerProfile = powerProfile;
[820]50                this.powerInterface = PowerInterfaceFactory.createPowerInterface(computingResource, powerProfile);
[495]51                this.airFlowProfile = airFlowProfile;
[820]52                this.airFlowInterface = AirThroughputInterfaceFactory.createAirThroughputInterface(computingResource, airFlowProfile);
[495]53        }
[755]54       
55        public EnergyExtension(ComputingResource computingResource, PowerProfile powerProfile,
[820]56                        AirThroughputProfile airFlowProfile, ThermalProfile thermalProfile) {
[755]57                super();
58                this.computingResource = computingResource;
59                this.powerProfile = powerProfile;
60                this.powerInterface = PowerInterfaceFactory.createPowerInterface(computingResource, powerProfile);
61                this.airFlowProfile = airFlowProfile;
62                this.airFlowInterface = AirThroughputInterfaceFactory.createAirThroughputInterface(computingResource, airFlowProfile);
[820]63                this.thermalProfile = thermalProfile;
64                this.thermalInterface = ThermalInterfaceFactory.createThermalInterface(computingResource, thermalProfile);
[755]65        }
[495]66
[477]67        public boolean supportsEvent(Event event) {
68
69                if(powerProfile == null || powerProfile.getEnergyEstimationPlugin() == null)
70                        return false;
71                if(event.getType().getName().equals(EnergyEventType.POWER_STATE_CHANGED.getName()))
72                        return true;
73                else if(event.getType().getName().equals(EnergyEventType.FREQUENCY_CHANGED.getName()))
74                        return true;
75                else if(event.getType().getName().equals(EnergyEventType.TASK_STARTED.getName()))
76                        return true;
77                else if(event.getType().getName().equals(EnergyEventType.TASK_FINISHED.getName()))
78                        return true;
[820]79                else if(event.getType().getName().equals(EnergyEventType.RESOURCE_UTILIZATION_CHANGED.getName()))
80                        return true;
81       
[495]82                if(event.getType().getName().equals(EnergyEventType.AIRFLOW_STATE_CHANGED.getName()))
83                        return true;
84               
[477]85                else return false;
86        }
87
88        public void handleEvent(Event event) {
[820]89               
[477]90                EnergyEvent enEvent = (EnergyEvent)event;
91                double power = 0;
[820]92                double temperature = 0;
93                try{
94                        switch (enEvent.getType()) {
95                       
96                        case POWER_STATE_CHANGED:
97                                power = powerProfile.getEnergyEstimationPlugin().estimatePowerConsumption(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
98                                /*if(computingResource instanceof ComputingNode){
99                                        ComputingNode node = (ComputingNode)computingResource;
100                                        if(event.getData() instanceof PowerState){
101                                                PowerState newState = (PowerState)event.getData();
102                                                if(newState == PowerState.ON) {
103                                                        addToPowerUsageHistory(power+node.getPowerInterface().START_COST);
104                                                        addToPowerUsageHistory(DateTimeUtils.currentTimeMillis() + node.getPowerInterface().START_TIME, power);
105                                                }else if(newState == PowerState.OFF){
106                                                        addToPowerUsageHistory(power+node.getPowerInterface().SHUTDOWN_COST);
107                                                        addToPowerUsageHistory(DateTimeUtils.currentTimeMillis() + node.getPowerInterface().SHUTDOWN_TIME, power);
108                                                }
[477]109                                        }
110                                }
[820]111                                else*/ powerProfile.addToPowerUsageHistory(power);
112                                break;
113                               
114                        case FREQUENCY_CHANGED:
115                                power = powerProfile.getEnergyEstimationPlugin().estimatePowerConsumption(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
116                                powerProfile.addToPowerUsageHistory(power);
117                                temperature = powerProfile.getEnergyEstimationPlugin().estimateTemperature(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
118                                thermalProfile.addToTemperatureHistory(temperature);
119                                break;
120                               
121                        case TASK_STARTED:
122                                power = powerProfile.getEnergyEstimationPlugin().estimatePowerConsumption(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
123                                powerProfile.addToPowerUsageHistory(power);
124                                temperature = powerProfile.getEnergyEstimationPlugin().estimateTemperature(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
125                                thermalProfile.addToTemperatureHistory(temperature);
126                                break;
127       
128                        case TASK_FINISHED:
129                                //System.out.println(this.resource.getName() + " - ENERGY EXTENSION: TASK FINISHED");
130                                power = powerProfile.getEnergyEstimationPlugin().estimatePowerConsumption(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
131                                //System.out.println(this.resource.getName() + " - ESTIMATED ENERGY:" + power);
132                                powerProfile.addToPowerUsageHistory(power);
133                                temperature = powerProfile.getEnergyEstimationPlugin().estimateTemperature(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
134                                thermalProfile.addToTemperatureHistory(temperature);
135                                break;
136                               
137                        case RESOURCE_UTILIZATION_CHANGED:
138                                power = powerProfile.getEnergyEstimationPlugin().estimatePowerConsumption(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
139                                powerProfile.addToPowerUsageHistory(power);
140                                temperature = powerProfile.getEnergyEstimationPlugin().estimateTemperature(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
141                                thermalProfile.addToTemperatureHistory(temperature);
142                                break;
143                               
144                        case AIRFLOW_STATE_CHANGED:
145                                double airFlow = powerProfile.getEnergyEstimationPlugin().estimateAirThroughput(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
146                                airFlowProfile.addToPowerUsageHistory(airFlow);
147                                power = powerProfile.getEnergyEstimationPlugin().estimatePowerConsumption(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
148                                powerProfile.addToPowerUsageHistory(power);
149                                temperature = powerProfile.getEnergyEstimationPlugin().estimateTemperature(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
150                                thermalProfile.addToTemperatureHistory(temperature);
151                                break;
[477]152                        }
[820]153                }catch(Exception e){
[477]154                       
155                }
156        }
[495]157
[477]158        public void init(Properties properties) throws ExtensionException {
159                // TODO Auto-generated method stub
160        }
161
162        public ExtensionType getType() {
163                return ExtensionType.ENERGY_EXTENSION;
164        }
165
[755]166        /*public ComputingResource getResource() {
[477]167                return computingResource;
168        }
169
170        public void setResource(ComputingResource compRes){
171                this.computingResource = compRes;
[755]172        }*/
[477]173
174        public PowerInterface getPowerInterface() {
175                return powerInterface;
176        }
177
178        public PowerProfile getPowerProfile() {
179                return powerProfile;
180        }
181
[495]182        public AirThroughputInterface getAirThroughputInterface() {
183                return airFlowInterface;
184        }
[477]185
[495]186        public AirThroughputProfile getAirFlowProfile() {
187                return airFlowProfile;
188        }
[820]189       
190        public ThermalProfile getThermalProfile() {
191                return thermalProfile;
192        }
[495]193
[820]194        public ThermalInterface getThermalInterface() {
195                return thermalInterface;
196        }
197
[477]198}
Note: See TracBrowser for help on using the repository browser.