Ignore:
Timestamp:
04/13/12 09:49:40 (13 years ago)
Author:
piontek
Message:
 
File:
1 copied

Legend:

Unmodified
Added
Removed
  • xssim/branches/tpiontek/src/example/localplugin/FCFSConsolidationClusterLocalPlugin.java

    r192 r269  
    66import java.util.Collections; 
    77import java.util.Comparator; 
    8 import java.util.HashMap; 
    98import java.util.List; 
    10 import java.util.Map; 
    119import java.util.Properties; 
    1210 
    13 import schedframe.resources.units.Memory; 
    14 import schedframe.resources.units.ResourceUnit; 
     11import schedframe.resources.PowerState; 
    1512import schedframe.scheduling.TaskInterface; 
    1613import schedframe.scheduling.events.SchedulingEvent; 
    1714import schedframe.scheduling.plugin.grid.ModuleList; 
    18 import schedframe.scheduling.utils.ResourceParameterName; 
    1915import test.rewolucja.GSSIMJobInterface; 
    20 import test.rewolucja.resources.ProcessingElements; 
    21 import test.rewolucja.resources.ResourceStatus; 
    2216import test.rewolucja.resources.manager.implementation.ClusterResourceManager; 
    2317import test.rewolucja.resources.manager.interfaces.ResourceManagerInterface; 
    24 import test.rewolucja.resources.physical.base.ComputingResource; 
    2518import test.rewolucja.resources.physical.implementation.ComputingNode; 
    2619import test.rewolucja.scheduling.JobRegistryInterface; 
     
    3124 
    3225public class FCFSConsolidationClusterLocalPlugin extends BaseLocalPlugin { 
     26         
     27        private int scenario = 1; 
    3328 
    3429        public FCFSConsolidationClusterLocalPlugin () { 
     
    5651                                if (task.getStatus() == Gridlet.READY) { 
    5752 
    58                                         Map<ResourceParameterName, ResourceUnit> choosenResources = chooseResourcesForExecution(resourceManager, task); 
    59                                         if (choosenResources  != null) { 
    60                                                 addToSchedulingPlan(plan, task, choosenResources); 
     53                                        ComputingNode node = chooseResourcesForExecution(resourceManager, PowerState.ON, task); 
     54                                        if (node  != null) { 
     55                                                System.out.println("Uruchamiam na zasobie: " + node.getName()); 
     56                                                addToSchedulingPlan(plan, task, node.getName()); 
    6157                                        }  
     58                                        else 
     59                                        { 
     60                                                node = chooseResourcesForExecution(resourceManager, PowerState.OFF, task); 
     61                                                 
     62                                                if( node != null) 
     63                                                { 
     64                                                        System.out.println("Wlaczam wezel: " + node.getName()); 
     65                                                        node.getPowerInterface().setPowerState( PowerState.ON); 
     66                                                        i--; 
     67                                                }        
     68                                        } 
    6269                                } 
    6370                        } 
     71                         
     72                        switch( scenario) 
     73                        { 
     74                                case 0: break; 
     75                                case 1: 
     76                                        List<ComputingNode> nodes = resourceManager.getComputingNodes(); 
     77                                        for( ComputingNode node : nodes) 
     78                                                if( node.getFreeProcessors().size() == node.getProcessorsNumber()) 
     79                                                { 
     80                                                        node.getPowerInterface().setPowerState( PowerState.OFF); 
     81                                                } 
     82                                        break; 
     83                        } 
     84                         
    6485 
    6586                        break; 
     
    6889        } 
    6990         
    70         private HashMap<ResourceParameterName, ResourceUnit> chooseResourcesForExecution(ClusterResourceManager resourceManager, TaskInterface<?> task) { 
     91        private ComputingNode chooseResourcesForExecution(ClusterResourceManager resourceManager, PowerState status, TaskInterface<?> task) { 
    7192 
    7293                List<ComputingNode> nodes = resourceManager.getComputingNodes(); 
    73                 nodes = findSuitableNodes(task, nodes); 
     94                nodes = findSuitableNodes(task, status, nodes); 
     95                 
    7496                Collections.sort(nodes, new Comparator<ComputingNode>(){ 
    7597                    public int compare(ComputingNode node1, ComputingNode node2){     
     
    7799                    } 
    78100                }); 
     101                 
    79102                if(nodes.size() > 0) 
    80                 { 
    81                         ComputingNode node = nodes.get(0); 
    82                         HashMap<ResourceParameterName, ResourceUnit> map = new HashMap<ResourceParameterName, ResourceUnit>(); 
    83                         List<ComputingResource> choosenResources =  new ArrayList<ComputingResource>(); 
    84                         int cpuRequest; 
    85                         try { 
    86                                 cpuRequest = Double.valueOf(task.getCpuCntRequest()).intValue(); 
    87                         } catch (NoSuchFieldException e) { 
    88                                 cpuRequest = 1; 
    89                         } 
    90                         for (int i = 0; i < node.getProcessors().size() && cpuRequest > 0; i++) { 
    91                                 if (node.getProcessors().get(i).getStatus() == ResourceStatus.FREE) { 
    92                                         choosenResources.add(node.getProcessors().get(i)); 
    93                                         cpuRequest--; 
    94                                 } 
    95                         } 
    96                         ProcessingElements result = new ProcessingElements(node.getName()); 
    97                         result.addAll(choosenResources); 
    98                         map.put(ResourceParameterName.PROCESSINGELEMENTS, result); 
    99                          
    100                         int memoryRequest; 
    101                         try { 
    102                                 memoryRequest = Double.valueOf(task.getMemoryRequest()).intValue(); 
    103                         } catch (NoSuchFieldException e) { 
    104                                 memoryRequest = 0; 
    105                         } 
    106                         if (memoryRequest != 0) { 
    107                                 Memory memory = new Memory(node.getMemoryUnit(), memoryRequest, memoryRequest); 
    108                                 map.put(ResourceParameterName.MEMORY, memory); 
    109                         } 
    110                         return map; 
    111                 } else  
    112                         return null; 
     103                        return nodes.get(0); 
     104                                  
     105                return null; 
    113106        } 
    114107         
    115         private List<ComputingNode> findSuitableNodes(TaskInterface<?> task, List<ComputingNode> nodes){ 
     108        private List<ComputingNode> findSuitableNodes(TaskInterface<?> task, PowerState status, List<ComputingNode> nodes){ 
    116109                int cpuRequest; 
    117110                try { 
     
    120113                        cpuRequest = 1; 
    121114                } 
    122                 int memoryRequest; 
    123                 try { 
    124                         memoryRequest = Double.valueOf(task.getMemoryRequest()).intValue(); 
    125                 } catch (NoSuchFieldException e) { 
    126                         memoryRequest = 0; 
     115                 
     116                List<ComputingNode> suitableNodes = new ArrayList<ComputingNode>(); 
     117                for(ComputingNode node: nodes) 
     118                { 
     119                                switch( status) 
     120                                { 
     121                                        case ON: 
     122                                                if(node.getFreeProcessorsNumber() >= cpuRequest) 
     123                                                        suitableNodes.add(node); 
     124                                                break; 
     125                                        case OFF: 
     126                                                if( node.getProcessorsNumber() >= cpuRequest) 
     127                                                        suitableNodes.add(node); 
     128                                                break; 
     129                                } 
    127130                } 
    128                 List<ComputingNode> suitableNodes = new ArrayList<ComputingNode>(); 
    129                 for(ComputingNode node: nodes){ 
    130                         if(node.getFreeProcessorsNumber() >= cpuRequest && node.getFreeMemory() >= memoryRequest){ 
    131                                 suitableNodes.add(node); 
    132                         } 
    133                 } 
     131         
    134132                return suitableNodes; 
    135133        } 
Note: See TracChangeset for help on using the changeset viewer.