source: DCWoRMS/branches/coolemall/src/test/fips/models/i5/CpuEnergyEstimationPlugin.java @ 1600

Revision 1600, 3.3 KB checked in by wojtekp, 8 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.fips.models.i5;
2
3import schedframe.resources.computing.Processor;
4import schedframe.resources.computing.profiles.energy.ResourceEvent;
5import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName;
6import schedframe.resources.devices.PhysicalResource;
7import schedframe.scheduling.manager.tasks.JobRegistry;
8import example.energy.BaseEnergyEstimationPlugin;
9
10public class CpuEnergyEstimationPlugin extends BaseEnergyEstimationPlugin {
11
12
13        public double estimatePowerConsumption(ResourceEvent event, JobRegistry jobRegistry,
14                        PhysicalResource resource) {
15                /*double powerConsumption = 0;
16
17                Processor cpu = (Processor)resource;
18                powerConsumption = Pidle + (Pfull- Pidle) * cpu.getLoadInterface().getRecentUtilization().getValue()/100;                       
19
20                return powerConsumption;*/
21               
22                double processorLoad = 0;
23                double powerConsumption = 0;
24                Processor proc = (Processor)resource;
25                if(resource.getPowerInterface().getPowerState().equals(StandardPowerStateName.OFF))
26                        return 0;
27                else {
28                        processorLoad = proc.getLoadInterface().getRecentUtilization().getValue();
29                        double lowestLoadLevel = 100;
30                        double highestLoadLevel = 0;
31                        if(proc.getPowerInterface().getPState().getLoadPowerUsage().containsKey(new Double(processorLoad))){
32                                powerConsumption = proc.getPowerInterface().getPState().getLoadPowerUsage().get(new Double(processorLoad));
33                        } else {
34                                for(Double load: proc.getPowerInterface().getPState().getLoadPowerUsage().keySet()){
35                                        if(lowestLoadLevel > load){
36                                                lowestLoadLevel = load;
37                                        }
38                                        if(highestLoadLevel < load){
39                                                highestLoadLevel = load;
40                                        }
41                                }
42                                if(processorLoad == 0){
43                                        try{
44                                                powerConsumption = proc.getPowerInterface().getSupportedPowerStates().get(0).getPowerUsage();
45                                        } catch (Exception e){
46                                                powerConsumption = 0.7 * proc.getPowerInterface().getPState().getLoadPowerUsage().get(new Double(highestLoadLevel));
47                                        }
48                                } else {
49                                       
50                                        double lowerLoadLevel = lowestLoadLevel;
51                                        double higherLoadLevel = highestLoadLevel;
52                                       
53                                        try{
54                                       
55                                                for(Double load: proc.getPowerInterface().getPState().getLoadPowerUsage().keySet()){
56                                                        if(processorLoad > load){
57                                                                lowerLoadLevel = load;
58                                                        }
59                                                        else if(processorLoad < load){
60                                                                higherLoadLevel = load;
61                                                                break;
62                                                        }
63                                                }
64                                                double powerBelow;
65                                                double powerAbove;
66                                                double a;
67                                                double b;
68                                                if(lowerLoadLevel != higherLoadLevel) {
69                                                        powerBelow = proc.getPowerInterface().getPState().getLoadPowerUsage().get(lowerLoadLevel);
70                                                        powerAbove = proc.getPowerInterface().getPState().getLoadPowerUsage().get(higherLoadLevel);
71                                                        a = (powerAbove - powerBelow)/(higherLoadLevel - lowerLoadLevel);
72                                                        b = powerAbove - a * higherLoadLevel;
73                                                } else {
74                                                        powerBelow = proc.getPowerInterface().getPState().getLoadPowerUsage().get(lowestLoadLevel);
75                                                        powerAbove = proc.getPowerInterface().getPState().getLoadPowerUsage().get(highestLoadLevel);
76                                                        a = (powerAbove - powerBelow)/(highestLoadLevel - lowestLoadLevel);
77                                                        b = powerAbove - a * highestLoadLevel;
78                                                }
79                                                powerConsumption = a * processorLoad + b;
80                                        } catch (Exception e){
81                                                powerConsumption = 0.7 * proc.getPowerInterface().getPState().getLoadPowerUsage().get(new Double(highestLoadLevel));   
82                                        }
83                                }
84                        }
85                }
86                return powerConsumption;
87        }
88       
89
90}
Note: See TracBrowser for help on using the repository browser.