Changeset 1329 for DCWoRMS/branches


Ignore:
Timestamp:
03/31/14 17:08:28 (11 years ago)
Author:
wojtekp
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • DCWoRMS/branches/coolemall/src/example/energy/coolemall/CB1EnergyEstimationPlugin.java

    r1299 r1329  
    11package example.energy.coolemall; 
    22 
     3import java.util.List; 
     4 
     5import schedframe.resources.CoolEmAllResourceType; 
     6import schedframe.resources.computing.ComputingResource; 
    37import schedframe.resources.computing.Node; 
     8import schedframe.resources.computing.Processor; 
     9import schedframe.resources.computing.Rack; 
    410import schedframe.resources.computing.coolemall.ComputeBox1; 
    511import schedframe.resources.computing.coolemall.NodeGroup; 
    612import schedframe.resources.computing.profiles.energy.EnergyEvent; 
     13import schedframe.resources.computing.profiles.energy.airthroughput.UserAirThroughputStateName; 
     14import schedframe.resources.computing.profiles.energy.power.PState; 
    715import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName; 
     16import schedframe.resources.devices.Device; 
    817import schedframe.resources.devices.PhysicalResource; 
    918import schedframe.scheduling.manager.tasks.JobRegistry; 
     19import simulator.DataCenterWorkloadSimulator; 
    1020import example.energy.BaseEnergyEstimationPlugin; 
     21import gridsim.dcworms.DCWormsTags; 
    1122 
    1223public class CB1EnergyEstimationPlugin extends BaseEnergyEstimationPlugin{ 
    1324 
     25        double powerCapLevel = -1; 
     26        double powerUpgradeLevel = -1; 
     27         
    1428        public double estimatePowerConsumption(EnergyEvent event, JobRegistry jobRegistry, 
    1529                        PhysicalResource resource) { 
     30                 
     31                if(powerCapLevel == -1 || powerUpgradeLevel == -1){ 
     32                        loadThresholds((ComputingResource) resource); 
     33                } 
     34                 
    1635                double powerConsumption = 0; 
    1736                ComputeBox1 computeBox1 = (ComputeBox1)resource; 
     
    3352                        powerConsumption = (powerConsumption + CoolEmAllTestbedMeasurements.OTHER_DEVICES_POWER_CONSUMPTION)/CoolEmAllTestbedMeasurements.POWER_SUPPLY_EFFICIENCY;                       
    3453                } 
     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                } 
    3561                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; 
    36122        } 
    37123 
Note: See TracChangeset for help on using the changeset viewer.