Changeset 270


Ignore:
Timestamp:
04/13/12 10:51:18 (13 years ago)
Author:
piontek
Message:
 
File:
1 edited

Legend:

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

    r269 r270  
    22 
    33import gridsim.Gridlet; 
     4import gridsim.gssim.ResourceHistoryItem; 
     5import gridsim.gssim.SubmittedTask; 
    46 
    57import java.util.ArrayList; 
     
    1214import schedframe.scheduling.TaskInterface; 
    1315import schedframe.scheduling.events.SchedulingEvent; 
     16import schedframe.scheduling.events.TaskFinishedEvent; 
    1417import schedframe.scheduling.plugin.grid.ModuleList; 
     18import schedframe.scheduling.utils.ResourceParameterName; 
    1519import test.rewolucja.GSSIMJobInterface; 
     20import test.rewolucja.resources.ProcessingElements; 
     21import test.rewolucja.resources.ResourceStatus; 
     22import test.rewolucja.resources.ResourceType; 
    1623import test.rewolucja.resources.manager.implementation.ClusterResourceManager; 
    1724import test.rewolucja.resources.manager.interfaces.ResourceManagerInterface; 
     25import test.rewolucja.resources.physical.base.ComputingResource; 
    1826import test.rewolucja.resources.physical.implementation.ComputingNode; 
     27import test.rewolucja.resources.physical.implementation.Processor; 
    1928import test.rewolucja.scheduling.JobRegistryInterface; 
     29import test.rewolucja.scheduling.UsedResourceList; 
    2030import test.rewolucja.scheduling.plan.SchedulingPlanInterfaceNew; 
    2131import test.rewolucja.scheduling.plan.SchedulingPlanNew; 
     
    3848                // Different actions for different events are possible. 
    3949                switch (event.getType()) { 
    40                 case START_TASK_EXECUTION: 
    4150                case TASK_FINISHED: 
     51                        if( scenario == 1) 
     52                        {        
     53                                TaskFinishedEvent finEvent = (TaskFinishedEvent) event; 
     54                                SubmittedTask subTask = jobRegistry.getSubmittedTask(finEvent.getJobId(), finEvent.getTaskId()); 
     55                                UsedResourceList<ResourceHistoryItem> usedResourcesList = subTask.getUsedResources(); 
     56                                ProcessingElements pes = (ProcessingElements)usedResourcesList.getLast().getResourceUnits().get(ResourceParameterName.PROCESSINGELEMENTS); 
     57                                 
     58                                ComputingNode cn = ((Processor)pes.get(0)).getComputingNode(); 
     59                                if( cn.getFreeProcessors().size() == cn.getProcessorsNumber()) 
     60                                        cn.getPowerInterface().setPowerState( PowerState.OFF); 
     61                        } 
     62                case START_TASK_EXECUTION:  
    4263                        // our tasks are placed only in first queue (see 
    4364                        // BaseLocalPlugin.placeJobsInQueues() method) 
     
    5273 
    5374                                        ComputingNode node = chooseResourcesForExecution(resourceManager, PowerState.ON, task); 
     75                                         
    5476                                        if (node  != null) { 
    55                                                 System.out.println("Uruchamiam na zasobie: " + node.getName()); 
    56                                                 addToSchedulingPlan(plan, task, node.getName()); 
     77                                                List<Processor> cpus = chooseProcessorsForExecution(node, ResourceStatus.FREE, task); 
     78                                                //System.out.println("Uruchamiam na zasobie: " + node.getName()); 
     79                                                addToSchedulingPlan(plan, task, cpus); 
    5780                                        }  
    5881                                        else 
     
    6285                                                if( node != null) 
    6386                                                { 
    64                                                         System.out.println("Wlaczam wezel: " + node.getName()); 
     87                                                        //System.out.println("Wlaczam wezel: " + node.getName()); 
    6588                                                        node.getPowerInterface().setPowerState( PowerState.ON); 
    6689                                                        i--; 
     
    78101                                                if( node.getFreeProcessors().size() == node.getProcessorsNumber()) 
    79102                                                { 
     103                                                        //System.out.println("Wylaczam zasob" + node.getName()); 
    80104                                                        node.getPowerInterface().setPowerState( PowerState.OFF); 
     105                                                        //System.out.println("Zasob  w stanie: " + node.getPowerInterface().getPowerState()); 
    81106                                                } 
    82107                                        break; 
     
    86111                        break; 
    87112                } 
     113                 
    88114                return plan; 
    89115        } 
     
    91117        private ComputingNode chooseResourcesForExecution(ClusterResourceManager resourceManager, PowerState status, TaskInterface<?> task) { 
    92118 
     119                //System.out.println("Szukam zasobow w stanie: "  +status); 
     120                 
    93121                List<ComputingNode> nodes = resourceManager.getComputingNodes(); 
    94122                nodes = findSuitableNodes(task, status, nodes); 
     
    107135         
    108136        private List<ComputingNode> findSuitableNodes(TaskInterface<?> task, PowerState status, List<ComputingNode> nodes){ 
    109                 int cpuRequest; 
    110                 try { 
    111                         cpuRequest = Double.valueOf(task.getCpuCntRequest()).intValue(); 
    112                 } catch (NoSuchFieldException e) { 
    113                         cpuRequest = 1; 
    114                 } 
     137                 
     138                int cpuRequest = getCpuRequest(task); 
    115139                 
    116140                List<ComputingNode> suitableNodes = new ArrayList<ComputingNode>(); 
     141                         
    117142                for(ComputingNode node: nodes) 
    118143                { 
     144                        if( node.getPowerInterface().getPowerState() == status) 
    119145                                switch( status) 
    120146                                { 
    121147                                        case ON: 
    122148                                                if(node.getFreeProcessorsNumber() >= cpuRequest) 
     149                                                { 
    123150                                                        suitableNodes.add(node); 
     151                                                }        
    124152                                                break; 
    125153                                        case OFF: 
     
    140168                // no extra initialization is expected. 
    141169        } 
     170         
     171        private List<Processor> chooseProcessorsForExecution(  
     172                        ComputingNode node, ResourceStatus status, TaskInterface<?> task) { 
     173                 
     174                int cpuRequest = getCpuRequest(task); 
    142175 
     176                List<Processor> cpus = (List<Processor>)node.getDescendantsByTypeAndStatus( ResourceType.CPU, status); 
     177                 
     178                return cpus.subList(0, cpuRequest); 
     179        } 
     180         
     181        private int getCpuRequest( TaskInterface<?> task) 
     182        { 
     183                int cpuRequest; 
     184                 
     185                try { 
     186                        cpuRequest = Double.valueOf(task.getCpuCntRequest()).intValue(); 
     187                } catch (NoSuchFieldException e) { 
     188                        cpuRequest = 1; 
     189                } 
     190                 
     191                return cpuRequest; 
     192        } 
    143193} 
Note: See TracChangeset for help on using the changeset viewer.