package test.testSOP; import java.io.File; import java.util.List; import org.apache.commons.logging.LogFactory; import schedframe.events.EventReason; import schedframe.resources.computing.Node; import schedframe.resources.computing.profiles.energy.ResourceEvent; import schedframe.resources.computing.profiles.energy.power.PowerState; import schedframe.resources.computing.profiles.energy.power.CustomPowerStateName; import schedframe.resources.computing.profiles.energy.power.PowerStateName; import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName; import schedframe.resources.devices.PhysicalResource; import schedframe.scheduling.manager.tasks.JobRegistry; import example.energy.BaseEnergyEstimationPlugin; public class NodeEnergyEstimationPlugin extends BaseEnergyEstimationPlugin { // private static int POWER_CAP_LEVEL = 150; org.apache.commons.logging.Log log = LogFactory.getLog(NodeEnergyEstimationPlugin.class); // public double estimatePowerConsumption(EnergyEvent event, JobRegistry jobRegistry, // PhysicalResource resource) { // // if (event.getReason() == EventReason.SIM_INIT) { // String state = "CUSTOM_ON"; // log.debug("Initialization of all the nodes power state to "+state); // resource.getPowerInterface().setPowerState(new CustomPowerStateName(state)); // } // double powerConsumption = 0; // Node node = (Node) resource; // if(node.getPowerInterface().getPowerState().getLabel().equals(new CustomPowerStateName("CUSTOM_ON").getLabel())){ // powerConsumption = getPowerConsumption(node); // } //// if(powerConsumption > POWER_CAP_LEVEL ){ //// DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.POWER_LIMIT_EXCEEDED, node.getFullName()); //// } // return powerConsumption; // } public double getPowerConsumption(Node node){ double powerConsumption = 0; double loadLevel = node.getLoadInterface().getRecentUtilization().getValue(); double p_max = -1; double p_min = -1; //Find power Consumption of 100% and 0% load states for (PowerState p : node.getPowerInterface().getSupportedPowerStates()) { if (p.getName().getLabel().equals(new CustomPowerStateName("P_MAX").getLabel())) { p_max = p.getPowerUsage(); } if (p.getName().getLabel().equals(new CustomPowerStateName("P_MIN").getLabel())) { p_min = p.getPowerUsage(); } } if (p_max == -1 || p_min == -1) { log.error("ERROR: Load_100 or load_0 not found in powerstate list of node "+node.getFullName()); } else { powerConsumption = p_min + (p_max-p_min)*(loadLevel/100); // log.debug("Power Consumption of node "+node.getName()+" at "+loadLevel+"% is "+powerConsumption); } // log.debug("powerConsumption : "+powerConsumption); return powerConsumption; } @Override public double estimatePowerConsumption(ResourceEvent event, JobRegistry jobRegistry, PhysicalResource resource) { //Cleanup ! if (event.getReason() == EventReason.SIM_INIT) { //Do at initialisation of simulation } // //TesT // if (event.getReason() == EventReason.SIM_INIT && resource.getName().equals("Node_1")) { // PowerStateName state = StandardPowerStateName.OFF; // log.debug("Initialization of Node_1 power state to "+state); // resource.getPowerInterface().setPowerState(state); // } double powerConsumption = 0; Node node = (Node) resource; if(node.getPowerInterface().getPowerState().equals(StandardPowerStateName.ON)){ powerConsumption = getPowerConsumption(node); } else { try { powerConsumption = node.getPowerInterface().getPowerConsumption(node.getPowerInterface().getPowerState()); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // if(powerConsumption > POWER_CAP_LEVEL ){ // DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.POWER_LIMIT_EXCEEDED, node.getFullName()); // } return powerConsumption; } // public double getPowerConsumption(Node node){ // double powerConsumption = 0; // double loadLevel = node.getLoadInterface().getRecentUtilization().getValue(); // double lowestLoadLevel = 100; // double highestLoadLevel = 0; // try{ // if(node.getPowerInterface().supportPowerState(new CustomPowerStateName("ON_" + new Double(loadLevel).intValue()))){ // powerConsumption = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(loadLevel).intValue())); // } else { // for(PowerState powerState: node.getPowerInterface().getSupportedPowerStates()){ // Double load; // try{ // load = Double.valueOf(powerState.getName().getLabel().substring(3)); // }catch (Exception e){ // continue; // } // if(lowestLoadLevel > load){ // lowestLoadLevel = load; // } // if(highestLoadLevel < load){ // highestLoadLevel = load; // } // } // if(loadLevel == 0){ // powerConsumption = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_0")); // } else { // // double lowerLoadLevel = lowestLoadLevel; // double higherLoadLevel = highestLoadLevel; // // for(PowerState powerState: node.getPowerInterface().getSupportedPowerStates()){ // Double load = Double.valueOf(powerState.getName().getLabel().substring(3)); // if(loadLevel > load){ // lowerLoadLevel = load; // } // else if(loadLevel < load){ // higherLoadLevel = load; // break; // } // } // double powerBelow; // double powerAbove; // double a; // double b; // if(lowerLoadLevel != higherLoadLevel) { // powerBelow = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(lowerLoadLevel).intValue())); // powerAbove = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(higherLoadLevel).intValue())); // a = (powerAbove - powerBelow)/(higherLoadLevel - lowerLoadLevel); // b = powerAbove - a * higherLoadLevel; // } else { // powerBelow = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(lowestLoadLevel).intValue())); // powerAbove = node.getPowerInterface().getPowerConsumption(new CustomPowerStateName("ON_" + new Double(highestLoadLevel).intValue())); // a = (powerAbove - powerBelow)/(highestLoadLevel - lowestLoadLevel); // b = powerAbove - a * highestLoadLevel; // } // powerConsumption = a * loadLevel + b; // } // } // } catch (Exception e){ // // } // // return powerConsumption; // } }