package test.article.recs.plugins.energy; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Map; import java.util.PropertyResourceBundle; import java.util.ResourceBundle; import schedframe.resources.computing.Core; import schedframe.resources.computing.Processor; import schedframe.resources.units.PEUnit; import schedframe.resources.units.ProcessingElements; import schedframe.resources.units.ResourceUnit; import schedframe.resources.units.ResourceUnitName; import schedframe.resources.units.StandardResourceUnitName; import test.article.recs.utils.AppType; import test.article.recs.utils.TaskToApp; import dcworms.schedframe.scheduling.ExecTask; import dcworms.schedframe.scheduling.Executable; import example.energy.BaseEnergyEstimationPlugin; public abstract class RecsNodeBaseEEP extends BaseEnergyEstimationPlugin{ private static String POWER_DATA_FILE_NAME = "src/test/article/recs/data/power_data.properties"; private ResourceBundle powBundle; private TaskToApp taskToApp = new TaskToApp(); protected String createQuery(ExecTask task) { Executable exec = (Executable)task; Map allocatedResources = exec.getUsedResources().getLast().getResourceUnits(); PEUnit peUnit = (PEUnit) allocatedResources.get(StandardResourceUnitName.PE); String query = getApplicationType(task) + "." + getNodeCategory(peUnit) + "." + getFrequency(peUnit) + "." + getCoreCnt(task); return query; } private String getApplicationType(ExecTask task){ AppType appType = taskToApp.getAppType(task); return appType.toString(); } private String getNodeCategory(PEUnit peUnit){ ProcessingElements pe = (ProcessingElements) peUnit; Core core = (Core)pe.get(0); return core.getParent().getParent().getCategory(); } private int getFrequency(PEUnit peUnit){ ProcessingElements pe = (ProcessingElements) peUnit; Core core = (Core)pe.get(0); Processor proc = (Processor) core.getParent(); double freq = proc.getPowerInterface().getFrequency(); return Double.valueOf(freq).intValue(); } private int getCoreCnt(ExecTask task){ double cpuReq; try { cpuReq = task.getCpuCntRequest(); } catch (NoSuchFieldException e) { cpuReq = 1; } return Double.valueOf(cpuReq).intValue(); } protected double getMeasuredPower(String query) throws FileNotFoundException, IOException{ ResourceBundle powBundle = getPowBundle(); return Double.valueOf(powBundle.getString(query)).doubleValue(); } private ResourceBundle getPowBundle() throws FileNotFoundException, IOException{ if(powBundle == null){ powBundle = new PropertyResourceBundle(new FileInputStream(POWER_DATA_FILE_NAME)); } return powBundle; } }