source: xssim/src/test/rewolucja/energy/extension/EnergyExtension.java @ 104

Revision 104, 5.5 KB checked in by wojtekp, 13 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.rewolucja.energy.extension;
2
3import java.util.ArrayList;
4import java.util.List;
5import java.util.Properties;
6
7import org.apache.commons.logging.Log;
8import org.apache.commons.logging.LogFactory;
9import org.joda.time.DateTimeUtils;
10
11import schedframe.resources.profile.PowerUsage;
12import simulator.utils.InstanceFactory;
13import test.rewolucja.energy.EnergyEvent;
14import test.rewolucja.energy.EnergyEventType;
15import test.rewolucja.energy.plugin.EnergyEstimationPluginInterface;
16import test.rewolucja.energy.profile.PowerInterface;
17import test.rewolucja.extensions.Extension;
18import test.rewolucja.extensions.ExtensionException;
19import test.rewolucja.extensions.ExtensionType;
20import test.rewolucja.resources.ResourceType;
21import test.rewolucja.resources.physical.base.ComputingResource;
22import test.rewolucja.resources.test.Event;
23import test.rewolucja.scheduling.JobRegistry;
24import example.energy.DefaultEnergyEstimationPlugin;
25
26public class EnergyExtension implements Extension {
27
28        private Log log = LogFactory.getLog(EnergyExtension.class);
29
30        protected PowerInterface powerInterface;
31        protected List<PowerUsage> powerUsage;
32        protected EnergyEstimationPluginInterface energyEstimationPlugin;
33
34   protected ComputingResource resource;
35
36
37       
38        public EnergyExtension(ComputingResource resource, PowerInterface powerInterface, String energyEstimationPluginClassName) {
39                initPlugin(energyEstimationPluginClassName);
40                this.powerInterface = powerInterface;
41                this.resource = resource;
42                this.powerUsage = new ArrayList<PowerUsage>();
43                //int power = energyEstimationPlugin.estimatePowerConsumption(null, resource);
44                //if(resource.getType()==ResourceType.CPU)
45                //      addToPowerUsageHistory(powerInterface.getPowerConsumption(powerInterface.getPowerState()));
46        }
47       
48        public void initPlugin(String energyEstimationPluginClassName){
49                if(energyEstimationPluginClassName != null) {
50                        energyEstimationPlugin = (EnergyEstimationPluginInterface) InstanceFactory.createInstance(
51                                        energyEstimationPluginClassName, EnergyEstimationPluginInterface.class);
52                        if(energyEstimationPlugin == null){
53                                energyEstimationPlugin = new DefaultEnergyEstimationPlugin();
54                                log.info("Using default energy estimation plugin: " + DefaultEnergyEstimationPlugin.class.getName());
55                               
56                        } else {
57                                energyEstimationPlugin.init(null);
58                        }
59                       
60                } else {
61                        energyEstimationPlugin = new DefaultEnergyEstimationPlugin();
62                        log.info("Using default energy estimation plugin: " + DefaultEnergyEstimationPlugin.class.getName());
63                }
64        }
65
66        @Override
67        public void init(Properties properties) throws ExtensionException {
68                // TODO Auto-generated method stub
69        }
70
71        @Override
72        public void dispose() throws ExtensionException {
73                // TODO Auto-generated method stub
74
75        }
76
77        @Override
78        public ExtensionType getType() {
79                return ExtensionType.ENERGY_EXTENSION;
80        }
81
82        @Override
83        public boolean supportsEvent(Event event) {
84                EnergyEvent enEvent = (EnergyEvent)event;
85                switch (enEvent.getType()) {
86
87                case POWER_STATE_CHANGED:
88                        return true;
89                case FREQUENCY_CHANGED:
90                        return true;
91                case TASK_STARTED:
92                        return true;
93                case TASK_FINISHED:
94                        return true;
95                default:
96                        return false;
97                }
98        }
99
100        public PowerInterface getPowerInterface() {
101                return powerInterface;
102        }
103
104        private void addToPowerUsageHistory(double power) {
105
106                if (powerUsage.size() == 0) {
107                        PowerUsage usage = new PowerUsage(DateTimeUtils.currentTimeMillis(), power);
108                        powerUsage.add(usage);
109                        return;
110                }
111
112                int lastIdx = powerUsage.size() - 1;
113                double lastPower = powerUsage.get(lastIdx).getValue();
114                if (lastPower != power) {
115                        PowerUsage usage = powerUsage.get(lastIdx);
116                        long currentTime = DateTimeUtils.currentTimeMillis();
117                        if (usage.getTimestamp() == currentTime) {
118                                usage.setValue(power);
119                                if(lastIdx > 0 && powerUsage.get(lastIdx - 1).getValue() == power)
120                                        powerUsage.remove(usage);
121
122                                //powerUsage.remove(usage);
123                                //usage = new PowerUsage(DateTimeUtils.currentTimeMillis(), power);
124                                //powerUsage.add(usage);
125                        } else {
126                                usage = new PowerUsage(DateTimeUtils.currentTimeMillis(), power);
127                                powerUsage.add(usage);
128                        }
129                }
130        }
131
132        public List<PowerUsage> getPowerUsageHistory() {
133                if(powerUsage.size() == 0){
134                        double power = energyEstimationPlugin.estimatePowerConsumption(new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, resource.getName()), new JobRegistry(resource.getName()), resource);
135                        addToPowerUsageHistory(power);
136                }
137                return powerUsage;
138        }
139
140
141        @Override
142        public void handleEvent(Event event) {
143                EnergyEvent enEvent = (EnergyEvent)event;
144                double power = 0;
145                switch (enEvent.getType()) {
146               
147                case POWER_STATE_CHANGED:
148                        power = energyEstimationPlugin.estimatePowerConsumption(enEvent, new JobRegistry(resource.getName()), resource);
149                        addToPowerUsageHistory(power);
150                        break;
151                       
152                case FREQUENCY_CHANGED:
153                        power = energyEstimationPlugin.estimatePowerConsumption(enEvent, new JobRegistry(resource.getName()), resource);
154                        addToPowerUsageHistory(power);
155                        break;
156                       
157                case TASK_STARTED:
158                       
159                        power = energyEstimationPlugin.estimatePowerConsumption(enEvent, new JobRegistry(resource.getName()), resource);
160                        addToPowerUsageHistory(power);
161                        break;
162
163                case TASK_FINISHED:
164                        //System.out.println(this.resource.getName() + " - ENERGY EXTENSION: TASK FINISHED");
165                        power = energyEstimationPlugin.estimatePowerConsumption(enEvent, new JobRegistry(resource.getName()), resource);
166                        //System.out.println(this.resource.getName() + " - ESTIMATED ENERGY:" + power);
167                        addToPowerUsageHistory(power);
168
169                        break;
170
171                }
172        }
173       
174
175        public ComputingResource getResource() {
176                return resource;
177        }
178
179
180}
Note: See TracBrowser for help on using the repository browser.