package test.fips.models.xeon; import dcworms.schedframe.scheduling.ExecTask; import schedframe.resources.computing.Processor; import schedframe.resources.computing.profiles.energy.ResourceEvent; import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName; import schedframe.resources.devices.PhysicalResource; import schedframe.scheduling.manager.tasks.JobRegistry; import schedframe.scheduling.tasks.phases.PhaseSystemLoad; import example.energy.BaseEnergyEstimationPlugin; public class XeonEnergyEstimationPlugin extends BaseEnergyEstimationPlugin { public double estimatePowerConsumption(ResourceEvent event, JobRegistry jobRegistry, PhysicalResource resource) { /*double powerConsumption = 0; Processor cpu = (Processor)resource; powerConsumption = Pidle + (Pfull- Pidle) * cpu.getLoadInterface().getRecentUtilization().getValue()/100; return powerConsumption;*/ double load = 0; double powerConsumption = 0; Processor proc = (Processor)resource; if(resource.getPowerInterface().getPowerState().equals(StandardPowerStateName.OFF)) return 0; else { load = proc.getLoadInterface().getRecentUtilization().getValue(); if(load == 0){ powerConsumption = 11; } for(ExecTask task: jobRegistry.getRunningTasks()){ double usage = 0; double av_power = Double.valueOf(task.getExecutionProfile().getCurrentExecutionPhase().getReferenceHardware().get("Average_Power")); powerConsumption = powerConsumption + av_power; for(PhaseSystemLoad pb: task.getExecutionProfile().getCurrentExecutionPhase().getSystemLoad()){ if(pb.getResouceName().equals("PM_Usage")){ usage = pb.getUtilization(); break; } if(pb.getResouceName().equals("PM_Running_Energy")){ break; } } } } return powerConsumption; } }