package example.load; import schedframe.resources.computing.Processor; import schedframe.resources.computing.profiles.energy.EnergyEvent; import schedframe.resources.devices.PhysicalResource; import schedframe.scheduling.manager.tasks.JobRegistry; import schedframe.scheduling.manager.tasks.JobRegistryImpl; import schedframe.scheduling.tasks.phases.PhaseBehaviour; import dcworms.schedframe.scheduling.ExecTask; public class ProcessorLoadEstimationPlugin extends BaseLoadEstimationPlugin{ public double estimateUtlization(EnergyEvent event, JobRegistry jobRegistry, PhysicalResource resource) { Processor proc = (Processor) resource; double sumCoresLoad = 0; double nrOfThreadsOnCpu = proc.getCores().size(); if(proc.getResourceCharacteristic().getParameters().get("threads") != null){ nrOfThreadsOnCpu = nrOfThreadsOnCpu * Integer.valueOf(proc.getResourceCharacteristic().getParameters().get("threads").get(0).getContent()).intValue(); } JobRegistry jr = new JobRegistryImpl(proc.getFullName()); for(ExecTask task: jr.getRunningTasks()){ double cpuUsage = 1 / nrOfThreadsOnCpu; for(PhaseBehaviour pb: task.getExecutionProfile().getCurrentResourceConsumption().getBehaviourList()){ if(pb.getResouceName().equals("PM_CPU_Usage")){ cpuUsage = pb.getUtilization(); } } sumCoresLoad = sumCoresLoad + cpuUsage; } double processorLoad = 100 * sumCoresLoad; double calendarLoad = resource.getLoadInterface().getLoadCalendar().getCurrentLoad(); double totalLoad = processorLoad + calendarLoad; if (totalLoad > 100) return 100; else return totalLoad; } }