source: DCWoRMS/branches/coolemall/src/test/powerCapping/FanEnergyEstimationPlugin.java @ 1428

Revision 1428, 4.4 KB checked in by wojtekp, 11 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.powerCapping;
2
3import schedframe.events.EventReason;
4import schedframe.resources.computing.ComputingResource;
5import schedframe.resources.computing.Node;
6import schedframe.resources.computing.Processor;
7import schedframe.resources.computing.profiles.energy.ResourceEvent;
8import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName;
9import schedframe.resources.devices.Device;
10import schedframe.resources.devices.Fan;
11import schedframe.resources.devices.PhysicalResource;
12import schedframe.scheduling.manager.tasks.JobRegistry;
13import example.energy.BaseEnergyEstimationPlugin;
14
15public class FanEnergyEstimationPlugin extends BaseEnergyEstimationPlugin {
16
17        public double estimatePowerConsumption(ResourceEvent event, JobRegistry jobRegistry,
18                        PhysicalResource resource) {
19               
20                double powerConsumption = 0;
21               
22                Fan fan = (Fan) resource;
23                try {
24                        powerConsumption = fan.getAirflowInterface().getPowerConsumption(fan.getAirflowInterface().getAirflowState());
25                } catch (NoSuchFieldException e) {
26                        // TODO Auto-generated catch block
27                        e.printStackTrace();
28                }
29
30                /*if(resource.getAirThroughputInterface().getAirThroughputState().getName().equals(new UserAirThroughputStateName("1").getName())){
31                        powerConsumption = CoolEmAllTestbedMeasurements.SINGLE_FAN_OFF_POWER_CONSUMPTION;
32                } else {
33                        powerConsumption = CoolEmAllTestbedMeasurements.SINGLE_FAN_ON_POWER_CONSUMPTION;
34                }*/
35                return powerConsumption * getFactor(fan)/(double)fan.getChilledResources().size();
36        }
37       
38        public double estimateAirflow(ResourceEvent event, JobRegistry jobRegistry, PhysicalResource resource) {
39               
40                double airflow = 0;
41                Fan fan = (Fan) resource;
42                try {
43                        if(event.getReason() == EventReason.SIM_INIT)
44                                airflow = fan.getAirflowInterface().getAirflow(fan.getAirflowInterface().getAirflowState());
45                        else
46                                airflow = fan.getAirflowInterface().getAirflow(fan.getAirflowInterface().getAirflowState());
47                } catch (NoSuchFieldException e) {
48                        // TODO Auto-generated catch block
49                        e.printStackTrace();
50                }
51
52                /*if(event.getReason() == EventReason.SIM_INIT){
53                        if(resource.getAirThroughputInterface().getAirThroughputState().getName().equals(new UserAirThroughputStateName("1").getName())){
54                                airThroughput = CoolEmAllTestbedMeasurements.SINGLE_FAN_OFF_AIR_FLOW;
55                        } else {
56                                airThroughput = CoolEmAllTestbedMeasurements.SINGLE_FAN_ON_AIR_FLOW;
57                        }
58                }
59                else {
60                        if(resource.getAirThroughputInterface().getAirThroughputState().getName().equals(new UserAirThroughputStateName("1").getName())){
61                                airThroughput = CoolEmAllTestbedMeasurements.SINGLE_FAN_OFF_AIR_FLOW;
62                        } else {
63                                airThroughput = CoolEmAllTestbedMeasurements.SINGLE_FAN_ON_AIR_FLOW;
64                        }
65                }*/
66               
67                return airflow * getFactor(fan)/(double)fan.getChilledResources().size();
68        }
69       
70        private int getNumberOfWorkingNodes(Device device){
71                int quantity = 0;
72                Fan fan = (Fan) device;
73                for(ComputingResource compRes: device.getComputingResource().getChildren()){
74                        Node node = (Node)compRes;
75                        if(fan.getChilledResources().contains(node.getFullName()) && node.getPowerInterface().getPowerState().equals(StandardPowerStateName.ON) ){
76                                quantity++;
77                        }
78                }
79                return quantity;
80        }
81
82        private double getFactor(Device device){
83
84                double factor = 0;;
85                Fan fan = (Fan) device;
86                for(ComputingResource compRes: device.getComputingResource().getChildren()){
87                        Node node = (Node)compRes;
88                        double nrOfComputingProcessor = 0;
89                        double meanCurrFrequency = 0;
90                        double meanMaxFrequency = 0;
91                        if(fan.getChilledResources().contains(node.getFullName()) && node.getPowerInterface().getPowerState().equals(StandardPowerStateName.ON) ){
92                                for(Processor proc: node.getProcessors()){
93                                        if(proc.getCores().size() != proc.getFreeCores().size()){
94                                                nrOfComputingProcessor++;
95                                                meanCurrFrequency = meanCurrFrequency + proc.getPowerInterface().getFrequency();
96                                                meanMaxFrequency = meanMaxFrequency + proc.getPowerInterface().getLowestPState().getFrequency();       
97                                        } else {
98                                                meanCurrFrequency = meanCurrFrequency + proc.getPowerInterface().getHighestPState().getFrequency();
99                                                meanMaxFrequency = meanMaxFrequency + proc.getPowerInterface().getLowestPState().getFrequency();                                               
100                                        }
101
102                                }
103                                meanCurrFrequency = meanCurrFrequency/node.getProcessors().size();
104                                meanMaxFrequency = meanMaxFrequency/node.getProcessors().size();
105                                factor = factor + (meanCurrFrequency /meanMaxFrequency) * (0.5 + nrOfComputingProcessor/node.getProcessors().size());
106                        }
107                }
108                return factor;
109        }
110}
Note: See TracBrowser for help on using the repository browser.