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

Legend:

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

    r258 r269  
    22 
    33import gridsim.Gridlet; 
     4import gridsim.gssim.ResourceHistoryItem; 
     5import gridsim.gssim.SubmittedTask; 
    46 
    57import java.util.ArrayList; 
     
    1113import schedframe.scheduling.TaskInterface; 
    1214import schedframe.scheduling.events.SchedulingEvent; 
     15import schedframe.scheduling.events.TaskFinishedEvent; 
    1316import schedframe.scheduling.plugin.grid.ModuleList; 
     17import schedframe.scheduling.utils.ResourceParameterName; 
    1418import test.rewolucja.GSSIMJobInterface; 
    1519import test.rewolucja.energy.profile.PStateType; 
     20import test.rewolucja.resources.ProcessingElements; 
    1621import test.rewolucja.resources.ResourceStatus; 
    1722import test.rewolucja.resources.ResourceType; 
    1823import test.rewolucja.resources.manager.implementation.ClusterResourceManager; 
    1924import test.rewolucja.resources.manager.interfaces.ResourceManagerInterface; 
     25import test.rewolucja.resources.physical.base.ComputingResource; 
    2026import test.rewolucja.resources.physical.implementation.ComputingNode; 
    2127import test.rewolucja.resources.physical.implementation.Processor; 
    2228import test.rewolucja.scheduling.JobRegistryInterface; 
     29import test.rewolucja.scheduling.UsedResourceList; 
    2330import test.rewolucja.scheduling.plan.SchedulingPlanInterfaceNew; 
    2431import test.rewolucja.scheduling.plan.SchedulingPlanNew; 
     
    3138        private boolean init = true; 
    3239         
    33         int scenario = 2; 
     40        int scenario = 3; 
    3441        String prefered = null; 
    3542         
     
    5966                // Different actions for different events are possible. 
    6067                switch (event.getType()) { 
     68                case TASK_FINISHED: 
     69                        if( scenario == 2) 
     70                        {        
     71                                TaskFinishedEvent finEvent = (TaskFinishedEvent) event; 
     72                                SubmittedTask subTask = jobRegistry.getSubmittedTask(finEvent.getJobId(), finEvent.getTaskId()); 
     73                                UsedResourceList<ResourceHistoryItem> usedResourcesList = subTask.getUsedResources(); 
     74                                ProcessingElements pes = (ProcessingElements)usedResourcesList.getLast().getResourceUnits().get(ResourceParameterName.PROCESSINGELEMENTS); 
     75                                 
     76                                for( ComputingResource cr : pes) 
     77                                { 
     78                                        ((Processor)cr).getPowerInterface().setPowerState( PowerState.OFF); 
     79                                } 
     80                        } 
     81                         
    6182                case START_TASK_EXECUTION: 
    62                 case TASK_FINISHED: 
    6383                        // our tasks are placed only in first queue (see 
    6484                        // BaseLocalPlugin.placeJobsInQueues() method) 
     
    7696                                        if (node != null) { 
    7797                                                List<Processor> cpus = chooseProcessorsForExecution(node, ResourceStatus.FREE, task); 
     98                                                 
     99                                                int type = Integer.parseInt( task.getJobId()) % 4; 
     100                                                String model = cpus.get(0).getComputingNode().getCategory().getName(); 
     101                                                //System.out.println(type + " -> " + model); 
     102                                                 
    78103                                                addToSchedulingPlan(plan, task, cpus); 
    79104                                        } 
     
    91116                                                                for( Processor cpu: cpus) 
    92117                                                                        cpu.getPowerInterface().setPowerState( PowerState.ON); 
    93                                                                 } 
     118                                                                 
     119                                                                i--; 
     120                                                        } 
    94121                                                        break; 
    95122                                                } 
     
    163190        private ComputingNode chooseRandomProvider(ClusterResourceManager resourceManager, ResourceStatus status, TaskInterface<?> task) { 
    164191                 
     192                String preferedNode = null; 
     193                 
    165194                int cpuRequest = getCpuRequest(task); 
    166195                 
    167196                List<ComputingNode> nodes = null; 
    168197                 
    169                 String prefered = null; 
    170                  
    171                 nodes = findSuitableNodes(prefered, cpuRequest, status, resourceManager.getComputingNodes()); 
    172                 if( nodes.size() > 0) 
     198                switch( scenario) 
     199                { 
     200                        case 3: 
     201                                int type = Integer.parseInt( task.getJobId()) % 4; 
     202                                switch( type) 
     203                                { 
     204                                        case 0: preferedNode = "B"; break; 
     205                                        default: preferedNode = "A"; break; 
     206                                } 
     207                                break; 
     208                        default: 
     209                                preferedNode = prefered; 
     210                                break; 
     211                                 
     212                } 
     213                 
     214                nodes = findSuitableNodes(preferedNode, cpuRequest, status, resourceManager.getComputingNodes()); 
     215                switch( nodes.size()) 
     216                { 
     217                        case 0: break; 
     218                        case 1: return nodes.get(0); 
     219                        default: 
     220                                int nodeIdx = rand.nextInt(nodes.size()); 
     221                                ComputingNode node = nodes.get(nodeIdx);                 
     222                                return node; 
     223                } 
     224                 
     225                 
     226                if( preferedNode != null) 
    173227                {        
    174                         int nodeIdx = rand.nextInt(nodes.size()); 
    175                         ComputingNode node = nodes.get(nodeIdx); 
    176                                                  
    177                         return node; 
    178                 } 
    179                 else 
    180                 { 
    181                         System.out.println("NO resources: " + prefered); 
    182                 } 
    183                  
    184                 if( prefered != null) 
    185                 {        
    186                         nodes = findSuitableNodes( getUnprefered(), cpuRequest, status, resourceManager.getComputingNodes()); 
    187                         if( nodes.size() > 0) 
    188                         {        
    189                                 int nodeIdx = rand.nextInt(nodes.size()); 
    190                                 ComputingNode node = nodes.get(nodeIdx); 
    191                                                          
    192                                 return node; 
     228                        nodes = findSuitableNodes( getUnprefered(preferedNode), cpuRequest, status, resourceManager.getComputingNodes()); 
     229                        switch( nodes.size()) 
     230                        { 
     231                                case 0: break; 
     232                                case 1: return nodes.get(0); 
     233                                default:  
     234                                        int nodeIdx = rand.nextInt(nodes.size()); 
     235                                        ComputingNode node = nodes.get(nodeIdx);                 
     236                                        return node; 
    193237                        } 
    194238                } 
     
    215259        } 
    216260         
    217         private String getUnprefered() 
     261        private String getUnprefered( String preferedNode) 
    218262        { 
    219                 if( prefered.equals("A")) 
     263                if( preferedNode.equals("A")) 
    220264                        return "B"; 
    221265                 
    222                 if( prefered.equals("B")) 
     266                if( preferedNode.equals("B")) 
    223267                        return "A"; 
    224268                 
Note: See TracChangeset for help on using the changeset viewer.