Ignore:
Timestamp:
10/12/12 13:04:31 (13 years ago)
Author:
wojtekp
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • DCWoRMS/trunk/src/example/localplugin/FCFSCPUFreqScalingClusterLocalPlugin.java

    r497 r512  
    99 
    1010import schedframe.events.scheduling.SchedulingEvent; 
    11 import schedframe.events.scheduling.TaskFinishedEvent; 
    12 import schedframe.events.scheduling.TaskRequestedTimeExpiredEvent; 
    1311import schedframe.resources.ResourceStatus; 
    1412import schedframe.resources.computing.ComputingResource; 
     
    1816import schedframe.resources.units.ResourceUnitName; 
    1917import schedframe.resources.units.StandardResourceUnitName; 
    20 import schedframe.scheduling.UsedResourcesList; 
    2118import schedframe.scheduling.manager.resources.ClusterResourceManager; 
    2219import schedframe.scheduling.manager.resources.ResourceManager; 
     
    2926import schedframe.scheduling.tasks.TaskInterface; 
    3027import schedframe.scheduling.tasks.WorkloadUnit; 
    31 import dcworms.schedframe.scheduling.Executable; 
    3228 
    3329public class FCFSCPUFreqScalingClusterLocalPlugin extends BaseLocalSchedulingPlugin { 
     
    5147                 
    5248                case START_TASK_EXECUTION: 
    53  
     49                case TASK_FINISHED: 
    5450                        // check all tasks in queue 
    5551                        for (int i = 0; i < q.size(); i++) { 
     
    6258                                        if (choosenResources  != null) { 
    6359                                                addToSchedulingPlan(plan, task, choosenResources); 
    64                                                 ProcessingElements pes = (ProcessingElements)choosenResources.get(StandardResourceUnitName.PE); 
    65                                                 List<Processor> processors =  new ArrayList<Processor>(); 
    66                                                 for(ComputingResource res : pes){ 
    67                                                         processors.add((Processor) res); 
    68                                                 } 
    69                                                 adjustFrequency(ResourceStatus.BUSY,processors); 
    7060                                        }  
    7161                                } 
    7262                        } 
    73                         break; 
    74                          
    75                 case TASK_FINISHED: 
    76                         TaskFinishedEvent finEvent = (TaskFinishedEvent) event; 
    77                         Executable exec = (Executable) jobRegistry.getExecutable(finEvent.getJobId(), finEvent.getTaskId()); 
    78                         UsedResourcesList usedResourcesList = exec.getUsedResources(); 
    79                         ProcessingElements pes = (ProcessingElements)usedResourcesList.getLast().getResourceUnits().get(StandardResourceUnitName.PE); 
    80                         List<Processor> processors =  new ArrayList<Processor>(); 
    81                         for(ComputingResource res : pes){ 
    82                                 processors.add((Processor) res); 
    83                                 allocatedCPUs.add((Processor) res); 
    84                         } 
    85                         adjustFrequency(ResourceStatus.FREE, processors); 
    86                         break; 
    87                          
    88                 case TASK_REQUESTED_TIME_EXPIRED: 
    89                         TaskRequestedTimeExpiredEvent timExpEvent = (TaskRequestedTimeExpiredEvent) event; 
    90                         exec = (Executable) jobRegistry.getExecutable(timExpEvent.getJobId(), timExpEvent.getTaskId()); 
    91                         usedResourcesList = exec.getUsedResources(); 
    92                         pes = (ProcessingElements)usedResourcesList.getLast().getResourceUnits().get(StandardResourceUnitName.PE); 
    93                         processors =  new ArrayList<Processor>(); 
    94                         for(ComputingResource res : pes){ 
    95                                 allocatedCPUs.remove((Processor) res); 
    96                         } 
    97                         // check all tasks in queue 
    98                         for (int i = 0; i < q.size(); i++) { 
    99                                 WorkloadUnit job = q.get(i); 
    100                                 TaskInterface<?> task = (TaskInterface<?>) job; 
    101                                 // if status of the tasks in READY 
    102                                 if (task.getStatus() == DCWormsTags.READY) { 
    103  
    104                                         Map<ResourceUnitName, ResourceUnit> choosenResources = chooseResourcesForExecution(resourceManager, task); 
    105                                         if (choosenResources  != null) { 
    106                                                 addToSchedulingPlan(plan, task, choosenResources); 
    107                                                 pes = (ProcessingElements)choosenResources.get(StandardResourceUnitName.PE); 
    108                                                 processors =  new ArrayList<Processor>(); 
    109                                                 for(ComputingResource res : pes){ 
    110                                                         processors.add((Processor) res); 
    111                                                 } 
    112                                                 adjustFrequency(ResourceStatus.BUSY, processors); 
    113                                         }  
    114                                 } 
    115                         } 
    116                         break; 
     63                        adjustFrequency(resourceManager.getProcessors()); 
    11764                } 
    11865                return plan; 
     
    160107                return map; 
    161108        } 
     109         
     110        private void adjustFrequency(List<Processor> processors){ 
    162111 
    163         private void adjustFrequency(ResourceStatus status, List<Processor> processors){ 
    164                 switch(status){ 
    165                 case BUSY: 
    166                         for(Processor cpu: processors){ 
    167                                 try { 
    168                                         if(cpu.getPowerInterface().getSupportedPStates().containsKey("P0")) 
    169                                                 cpu.getPowerInterface().setPState("P0"); 
    170                                 } catch (NoSuchFieldException e) { 
    171                                         // TODO Auto-generated catch block 
    172                                         e.printStackTrace(); 
    173                                 } 
     112                for(Processor cpu: processors){ 
     113                        if(cpu.getStatus() == ResourceStatus.FREE) { 
     114                                if(cpu.getPowerInterface().getSupportedPStates().containsKey("P3")) 
     115                                        cpu.getPowerInterface().setPState("P3"); 
    174116                        } 
    175                         break; 
    176                 case FREE: 
    177                         for(Processor cpu: processors){ 
    178                                 try { 
    179                                         if(cpu.getPowerInterface().getSupportedPStates().containsKey("P3")) 
    180                                                 cpu.getPowerInterface().setPState("P3"); 
    181                                 } catch (NoSuchFieldException e) { 
    182                                         // TODO Auto-generated catch block 
    183                                         e.printStackTrace(); 
    184                                 } 
     117                        else{ 
     118                                if(cpu.getPowerInterface().getSupportedPStates().containsKey("P0")) 
     119                                        cpu.getPowerInterface().setPState("P0"); 
    185120                        } 
    186                         break; 
     121 
    187122                } 
     123 
    188124        } 
    189125 
     126 
    190127} 
Note: See TracChangeset for help on using the changeset viewer.