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

Revision 1420, 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                int quantity = 0;
84
85                double factor = 0;;
86                Fan fan = (Fan) device;
87                for(ComputingResource compRes: device.getComputingResource().getChildren()){
88                        Node node = (Node)compRes;
89                        double nrOfComputingProcessor = 0;
90                        double meanCurrFrequency = 0;
91                        double meanMaxFrequency = 0;
92                        if(fan.getChilledResources().contains(node.getFullName()) && node.getPowerInterface().getPowerState().equals(StandardPowerStateName.ON) ){
93                                quantity++;
94                                for(Processor proc: node.getProcessors()){
95                                        if(proc.getCores().size() != proc.getFreeCores().size()){
96                                                nrOfComputingProcessor++;
97                                                meanCurrFrequency = meanCurrFrequency + proc.getPowerInterface().getFrequency();
98                                                meanMaxFrequency = meanMaxFrequency + proc.getPowerInterface().getLowestPState().getFrequency();       
99                                        } else {
100                                                meanCurrFrequency = meanCurrFrequency + proc.getPowerInterface().getHighestPState().getFrequency();
101                                                meanMaxFrequency = meanMaxFrequency + proc.getPowerInterface().getLowestPState().getFrequency();                                               
102                                        }
103
104                                }
105                                meanCurrFrequency = meanCurrFrequency/node.getProcessors().size();
106                                meanMaxFrequency = meanMaxFrequency/node.getProcessors().size();
107                                factor = factor + (meanCurrFrequency /meanMaxFrequency) * (0.5+ nrOfComputingProcessor/node.getProcessors().size());
108                        }
109                }
110                return factor;
111        }
112}
Note: See TracBrowser for help on using the repository browser.