source: DCWoRMS/trunk/src/test/article/recs/plugins/energy/RecsNodeBaseEEP.java @ 734

Revision 734, 3.0 KB checked in by wojtekp, 12 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.article.recs.plugins.energy;
2
3import java.io.FileInputStream;
4import java.io.FileNotFoundException;
5import java.io.IOException;
6import java.util.Map;
7import java.util.PropertyResourceBundle;
8import java.util.ResourceBundle;
9
10import schedframe.resources.computing.ComputingNode;
11import schedframe.resources.computing.Core;
12import schedframe.resources.computing.Processor;
13import schedframe.resources.units.PEUnit;
14import schedframe.resources.units.ProcessingElements;
15import schedframe.resources.units.ResourceUnit;
16import schedframe.resources.units.ResourceUnitName;
17import schedframe.resources.units.StandardResourceUnitName;
18import test.article.recs.utils.AppType;
19import test.article.recs.utils.TaskToApp;
20import dcworms.schedframe.scheduling.ExecTask;
21import dcworms.schedframe.scheduling.Executable;
22import example.energy.BaseEnergyEstimationPlugin;
23
24public abstract class RecsNodeBaseEEP extends BaseEnergyEstimationPlugin{
25       
26        private static String POWER_DATA_FILE_NAME = "src/test/article/recs/data/power_data.properties";
27       
28        private ResourceBundle powBundle;
29       
30        private TaskToApp taskToApp = new TaskToApp();
31
32        protected String createQuery(ExecTask task) {
33                Executable exec = (Executable)task;
34                Map<ResourceUnitName, ResourceUnit> allocatedResources = exec.getUsedResources().getLast().getResourceUnits();
35                PEUnit peUnit = (PEUnit) allocatedResources.get(StandardResourceUnitName.PE);
36               
37                String query = getApplicationType(task) + "." + getNodeCategory(peUnit) + "." + getFrequency(peUnit) + "." + getCoreCnt(task);
38                return query;
39        }
40
41        private String getApplicationType(ExecTask task){       
42                AppType appType = taskToApp.getAppType(task);
43                return appType.toString();
44        }
45       
46        private String getNodeCategory(PEUnit peUnit){
47               
48                ProcessingElements pe = (ProcessingElements) peUnit;
49                if(pe.get(0) instanceof ComputingNode)
50                        return ((ComputingNode)pe.get(0)).getCategory();
51                Core core = (Core)pe.get(0);
52                return core.getParent().getParent().getCategory();
53        }
54       
55        private int getFrequency(PEUnit peUnit){
56                ProcessingElements pe = (ProcessingElements) peUnit;
57                if(pe.get(0) instanceof ComputingNode)
58                        return Double.valueOf(((ComputingNode)pe.get(0)).getProcessors().get(0).getPowerInterface().getFrequency()).intValue();
59                Core core = (Core)pe.get(0);
60                Processor proc = (Processor) core.getParent();
61                double freq = proc.getPowerInterface().getFrequency();
62                return Double.valueOf(freq).intValue();
63               
64        }
65       
66        private int getCoreCnt(ExecTask task){ 
67                double cpuReq;
68                try {
69                        cpuReq = task.getCpuCntRequest();
70                } catch (NoSuchFieldException e) {
71                                cpuReq = 1;
72                }
73                return Double.valueOf(cpuReq).intValue();
74        }
75       
76        protected double getMeasuredPower(String query) throws FileNotFoundException, IOException{
77                ResourceBundle powBundle = getPowBundle();
78                return Double.valueOf(powBundle.getString(query)).doubleValue();
79        }
80       
81        private ResourceBundle getPowBundle() throws FileNotFoundException, IOException{
82                if(powBundle == null){
83                         powBundle = new PropertyResourceBundle(new FileInputStream(POWER_DATA_FILE_NAME));
84                }
85                return powBundle;
86        }
87}
Note: See TracBrowser for help on using the repository browser.