source: DCWoRMS/branches/coolemall/src/test/stencils/plugins/ProcessorEnergyEstimationPlugin.java @ 1605

Revision 1605, 4.5 KB checked in by wojtekp, 8 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.stencils.plugins;
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 ProcessorEnergyEstimationPlugin extends BaseEnergyEstimationPlugin  {
11
12        public double estimatePowerConsumption(ResourceEvent event, JobRegistry jobRegistry,
13                        PhysicalResource resource) {
14               
15                double processorLoad = 0;
16                double powerConsumption = 0;
17                Processor proc = (Processor)resource;
18                if(resource.getPowerInterface().getPowerState().equals(StandardPowerStateName.OFF))
19                        return 0;
20                else {
21
22                        /*double usedFreq = proc.getPowerInterface().getHighestPState().getFrequency();
23
24                        JobRegistry jr = new JobRegistryImpl(proc.getFullName());
25                        for(ExecTask task: jr.getRunningTasks()){
26                                String taskFreqString = task.getCurrentResourceConsumption().getReferenceHardware().get("cpu_maxfreq");
27                                double taskFreq = Double.valueOf(taskFreqString);
28                                if(taskFreq > usedFreq){
29                                        usedFreq = taskFreq;
30                                }
31                        }
32                       
33                        processorLoad = proc.getLoadInterface().getRecentUtilization().getValue();
34                        //System.out.println(proc.getFullName() + "processorLoad v2: " +  processorLoad);
35                       
36                        if(processorLoad != 0 && proc.getPowerInterface().getFrequency() != usedFreq) {
37                                proc.getPowerInterface().setFrequency(usedFreq);
38                        }*/
39                       
40                        processorLoad = proc.getLoadInterface().getRecentUtilization().getValue();
41                        double lowestLoadLevel = 100;
42                        double highestLoadLevel = 0;
43                        if(proc.getPowerInterface().getPState().getLoadPowerUsage().containsKey(new Double(processorLoad))){
44                                powerConsumption = proc.getPowerInterface().getPState().getLoadPowerUsage().get(new Double(processorLoad));
45                                //System.out.println("power from profile: " + powerConsumption);
46                        } else {
47                                for(Double load: proc.getPowerInterface().getPState().getLoadPowerUsage().keySet()){
48                                        if(lowestLoadLevel > load){
49                                                lowestLoadLevel = load;
50                                        }
51                                        if(highestLoadLevel < load){
52                                                highestLoadLevel = load;
53                                        }
54                                }
55                                if(processorLoad == 0){
56                                        try{
57                                                powerConsumption = proc.getPowerInterface().getSupportedPowerStates().get(0).getPowerUsage();
58                                                //System.out.println("load = 0; power = idle power usage: " + powerConsumption);
59                                        } catch (Exception e){
60                                                powerConsumption = 0.7 * proc.getPowerInterface().getPState().getLoadPowerUsage().get(new Double(highestLoadLevel));
61                                                //System.out.println("error load = 0; power = 0.7 max power: " + powerConsumption);
62                                        }
63                                } else {
64                                       
65                                        double lowerLoadLevel = lowestLoadLevel;
66                                        double higherLoadLevel = highestLoadLevel;
67                                       
68                                        try{
69                                       
70                                                for(Double load: proc.getPowerInterface().getPState().getLoadPowerUsage().keySet()){
71                                                        if(processorLoad > load){
72                                                                lowerLoadLevel = load;
73                                                        }
74                                                        else if(processorLoad < load){
75                                                                higherLoadLevel = load;
76                                                                break;
77                                                        }
78                                                }
79                                                double powerBelow;
80                                                double powerAbove;
81                                                double a;
82                                                double b;
83                                                if(lowerLoadLevel != higherLoadLevel) {
84                                                        powerBelow = proc.getPowerInterface().getPState().getLoadPowerUsage().get(lowerLoadLevel);
85                                                        powerAbove = proc.getPowerInterface().getPState().getLoadPowerUsage().get(higherLoadLevel);
86                                                        a = (powerAbove - powerBelow)/(higherLoadLevel - lowerLoadLevel);
87                                                        b = powerAbove - a * higherLoadLevel;
88                                                } else {
89                                                        powerBelow = proc.getPowerInterface().getPState().getLoadPowerUsage().get(lowestLoadLevel);
90                                                        powerAbove = proc.getPowerInterface().getPState().getLoadPowerUsage().get(highestLoadLevel);
91                                                        a = (powerAbove - powerBelow)/(highestLoadLevel - lowestLoadLevel);
92                                                        b = powerAbove - a * highestLoadLevel;
93                                                }
94                                                powerConsumption = a * processorLoad + b;
95                                                /*System.out.println("a" +lowestLoadLevel + ";" +highestLoadLevel);
96                                                System.out.println("b" +lowerLoadLevel + ";" +higherLoadLevel);
97                                                System.out.println("c" +powerBelow + ";" +powerAbove);
98                                                System.out.println(resource.getFullName() + "load: " + processorLoad + "linear power estimation " + powerConsumption);*/
99       
100                                        } catch (Exception e){
101                                                powerConsumption = 0.7 * proc.getPowerInterface().getPState().getLoadPowerUsage().get(new Double(highestLoadLevel));   
102                                                //System.out.println("error; power = 0.7 max power: " + powerConsumption);
103                                        }
104                                }
105                        }
106                }
107                //System.out.println("estimated power consumption: " + powerConsumption);
108                return powerConsumption;
109        }
110
111}
Note: See TracBrowser for help on using the repository browser.