package example.load; import schedframe.resources.ResourceStatus; import schedframe.resources.computing.Core; 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{ @Override 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(); } //for(Core core: proc.getCores()){ //if(core.getStatus().equals(ResourceStatus.BUSY)){ JobRegistry jr = new JobRegistryImpl(proc.getFullName()); for(ExecTask task: jr.getRunningTasks()){ double cpuUsage = 1 / nrOfThreadsOnCpu; double nrOfThreadsOfApplication = 1; for(PhaseBehaviour pb: task.getCurrentResourceConsumption().getBehaviourList()){ if(pb.getResouceName().equals("PM_CPU_Usage")){ cpuUsage = pb.getUtilization(); } if(pb.getResouceName().equals("PM_Threads")){ nrOfThreadsOfApplication = pb.getUtilization(); break; } } sumCoresLoad = sumCoresLoad + cpuUsage;// * (nrOfThreadsOfApplication / nrOfThreadsOnCpu); } // } //} double processorLoad = 100 * sumCoresLoad; double calendarLoad = resource.getLoadInterface().getLoadCalendar().getCurrentLoad(); double totalLoad = processorLoad + calendarLoad; if (totalLoad > 100) return 100; else return totalLoad; } }