package example.energy; import gridsim.dcworms.DCWormsTags; import schedframe.resources.computing.Node; import schedframe.resources.computing.Processor; import schedframe.resources.computing.profiles.energy.ResourceEvent; import schedframe.resources.computing.profiles.energy.power.plugin.EnergyPluginConfiguration; import schedframe.resources.devices.Device; import schedframe.resources.devices.PhysicalResource; import schedframe.scheduling.manager.tasks.JobRegistry; import simulator.DataCenterWorkloadSimulator; public class NodeEnergyEstimationPlugin extends BaseEnergyEstimationPlugin { public double estimatePowerConsumption(ResourceEvent event, JobRegistry jobRegistry, PhysicalResource resource) { double powerConsumption = 0; EnergyPluginConfiguration epConf = (EnergyPluginConfiguration) getConfiguration(); Node node = (Node) resource; for(Processor cpu: node.getProcessors()){ try{ powerConsumption = powerConsumption + cpu.getPowerInterface().getRecentPowerUsage().getValue(); } catch (Exception e){ } } try { powerConsumption = powerConsumption + node.getPowerInterface().getPowerConsumption(node.getPowerInterface().getPowerState()); for(Device dev: node.getResourceCharacteristic().getDevices()){ if(dev.getPowerInterface().getRecentPowerUsage().getValue() != -1) powerConsumption = powerConsumption + dev.getPowerInterface().getRecentPowerUsage().getValue(); } } catch (NoSuchFieldException e) { } if(epConf.getPowerCapLevel() != -1 && powerConsumption > epConf.getPowerCapLevel()){ DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.RESOURCE_POWER_LIMIT_EXCEEDED, node.getFullName()); } return powerConsumption; } }