Changeset 1329 for DCWoRMS/branches
- Timestamp:
- 03/31/14 17:08:28 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
DCWoRMS/branches/coolemall/src/example/energy/coolemall/CB1EnergyEstimationPlugin.java
r1299 r1329 1 1 package example.energy.coolemall; 2 2 3 import java.util.List; 4 5 import schedframe.resources.CoolEmAllResourceType; 6 import schedframe.resources.computing.ComputingResource; 3 7 import schedframe.resources.computing.Node; 8 import schedframe.resources.computing.Processor; 9 import schedframe.resources.computing.Rack; 4 10 import schedframe.resources.computing.coolemall.ComputeBox1; 5 11 import schedframe.resources.computing.coolemall.NodeGroup; 6 12 import schedframe.resources.computing.profiles.energy.EnergyEvent; 13 import schedframe.resources.computing.profiles.energy.airthroughput.UserAirThroughputStateName; 14 import schedframe.resources.computing.profiles.energy.power.PState; 7 15 import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName; 16 import schedframe.resources.devices.Device; 8 17 import schedframe.resources.devices.PhysicalResource; 9 18 import schedframe.scheduling.manager.tasks.JobRegistry; 19 import simulator.DataCenterWorkloadSimulator; 10 20 import example.energy.BaseEnergyEstimationPlugin; 21 import gridsim.dcworms.DCWormsTags; 11 22 12 23 public class CB1EnergyEstimationPlugin extends BaseEnergyEstimationPlugin{ 13 24 25 double powerCapLevel = -1; 26 double powerUpgradeLevel = -1; 27 14 28 public double estimatePowerConsumption(EnergyEvent event, JobRegistry jobRegistry, 15 29 PhysicalResource resource) { 30 31 if(powerCapLevel == -1 || powerUpgradeLevel == -1){ 32 loadThresholds((ComputingResource) resource); 33 } 34 16 35 double powerConsumption = 0; 17 36 ComputeBox1 computeBox1 = (ComputeBox1)resource; … … 33 52 powerConsumption = (powerConsumption + CoolEmAllTestbedMeasurements.OTHER_DEVICES_POWER_CONSUMPTION)/CoolEmAllTestbedMeasurements.POWER_SUPPLY_EFFICIENCY; 34 53 } 54 55 if(powerConsumption > powerCapLevel){ 56 DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.POWER_LIMIT_EXCEEDED, null); 57 } 58 else if(powerConsumption < powerUpgradeLevel){ 59 DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.POWER_LIMIT_EXCEEDED, null); 60 } 35 61 return powerConsumption; 62 } 63 64 private void loadThresholds(ComputingResource compResource){ 65 66 Rack rack = (Rack) compResource; 67 double pcLevel = 0; 68 double puLevel = 0; 69 for(Processor proc: rack.getProcessors()){ 70 PState highestPState = proc.getPowerInterface().getHighestPState(); 71 PState secondHighestPState = proc.getPowerInterface().getLowestPState(); 72 for(String pStateName: proc.getPowerInterface().getSupportedPStates().keySet()){ 73 PState pState = proc.getPowerInterface().getSupportedPStates().get(pStateName); 74 if(pState.getFrequency() < secondHighestPState.getFrequency() && pState.getFrequency() > highestPState.getFrequency()){ 75 secondHighestPState = pState; 76 } 77 } 78 double maxMinPowerUsage = 0; 79 double powerUsage = 0; 80 81 for(Double load: highestPState.getLoadPowerUsage().keySet()){ 82 powerUsage = highestPState.getLoadPowerUsage().get(load); 83 if(powerUsage > maxMinPowerUsage){ 84 maxMinPowerUsage= powerUsage; 85 } 86 } 87 pcLevel = pcLevel + maxMinPowerUsage; 88 89 maxMinPowerUsage = 0; 90 powerUsage = 0; 91 92 for(Double load: secondHighestPState.getLoadPowerUsage().keySet()){ 93 powerUsage = secondHighestPState.getLoadPowerUsage().get(load); 94 if(powerUsage > maxMinPowerUsage){ 95 maxMinPowerUsage= powerUsage; 96 } 97 } 98 puLevel = puLevel + maxMinPowerUsage; 99 100 } 101 102 double fpc = 0; 103 List<NodeGroup> nodeGroups = (List<NodeGroup>) rack.getDescendantsByType(CoolEmAllResourceType.NodeGroup); 104 for(NodeGroup nodeGroup: nodeGroups){ 105 for(Device device: nodeGroup.getResourceCharacteristic().getDevices()){ 106 try { 107 fpc = fpc + device.getAirThroughputInterface().getPowerConsumption(new UserAirThroughputStateName("2")); 108 } catch (NoSuchFieldException e) { 109 // TODO Auto-generated catch block 110 e.printStackTrace(); 111 } 112 } 113 114 } 115 pcLevel = (pcLevel + fpc) / CoolEmAllTestbedMeasurements.POWER_SUPPLY_EFFICIENCY; 116 puLevel = (puLevel + fpc) / CoolEmAllTestbedMeasurements.POWER_SUPPLY_EFFICIENCY; 117 118 puLevel = (pcLevel * pcLevel / puLevel); 119 120 powerCapLevel = pcLevel; 121 powerUpgradeLevel = puLevel; 36 122 } 37 123
Note: See TracChangeset
for help on using the changeset viewer.