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

Legend:

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

    r750 r778  
    33import gridsim.dcworms.DCWormsTags; 
    44 
     5import java.util.ArrayList; 
    56import java.util.List; 
    67import java.util.Random; 
     
    910import schedframe.resources.computing.ComputingNode; 
    1011import schedframe.resources.computing.profiles.energy.airthroughput.StandardAirThroughputStateName; 
     12import schedframe.resources.computing.profiles.energy.airthroughput.UserAirThroughputStateName; 
    1113import schedframe.scheduling.manager.resources.ClusterResourceManager; 
    1214import schedframe.scheduling.manager.resources.ResourceManager; 
    1315import schedframe.scheduling.manager.tasks.JobRegistry; 
     16import schedframe.scheduling.manager.tasks.JobRegistryImpl; 
    1417import schedframe.scheduling.plan.SchedulingPlanInterface; 
    1518import schedframe.scheduling.plan.impl.SchedulingPlan; 
     
    4851                                if (task.getStatus() == DCWormsTags.READY) { 
    4952 
    50                                         ComputingNode node = chooseRandomProvider(resourceManager); 
     53                                        ComputingNode node = chooseRandomProvider(resourceManager, task); 
    5154                                        if (node != null) { 
    52                                                 node.getAirThroughputInterface().setAirThroughputState(StandardAirThroughputStateName.FAN_ON); 
     55                                                //if there are two or more tasks ( running on the given node then 
     56                                                if(new JobRegistryImpl(node.getName()).getRunningTasks().size() > 0) 
     57                                                        node.getAirThroughputInterface().setAirThroughputState(new UserAirThroughputStateName("FAN_ON_TURBO")); 
     58                                                else  
     59                                                        node.getAirThroughputInterface().setAirThroughputState(StandardAirThroughputStateName.FAN_ON); 
    5360                                                notSelectedNodes.remove(node); 
    5461                                                addToSchedulingPlan(plan, task, node.getName()); 
     
    5663                                } 
    5764                        } 
    58                         turnOffIdleNodes(notSelectedNodes); 
     65                        adjustOtherFans(notSelectedNodes); 
    5966                        break; 
    6067                } 
     
    6269        } 
    6370 
    64         private ComputingNode chooseRandomProvider(ClusterResourceManager resourceManager) { 
    65                 List<ComputingNode> nodes = resourceManager.getComputingNodes(); 
    66                 int nodeIdx = rand.nextInt(nodes.size()); 
    67                 return nodes.get(nodeIdx); 
     71        private ComputingNode chooseRandomProvider(ClusterResourceManager resourceManager, TaskInterface<?> task) { 
     72                List<ComputingNode> nodes = filterNodes(resourceManager.getComputingNodes(), task); 
     73                return randomNode(nodes); 
    6874        } 
    6975         
    70         private void turnOffIdleNodes(List<ComputingNode> nodes){ 
     76        private List<ComputingNode> filterNodes(List<ComputingNode> nodes, TaskInterface<?> task){ 
     77                List<ComputingNode> filteredNodes = new ArrayList<ComputingNode>(); 
     78                for (ComputingNode node : nodes) { 
     79                        int cpuRequest; 
     80                        try { 
     81                                cpuRequest = Double.valueOf(task.getCpuCntRequest()).intValue(); 
     82                        } catch (NoSuchFieldException e) { 
     83                                cpuRequest = 0; 
     84                        } 
     85                        if (cpuRequest != 0) { 
     86                                if(node.getFreeProcessorsNumber() > cpuRequest) 
     87                                        filteredNodes.add(node); 
     88                        } 
     89                } 
     90                 
     91                return filteredNodes; 
     92        } 
     93         
     94        private ComputingNode randomNode(List<ComputingNode> nodes){ 
     95                return nodes.get(rand.nextInt(nodes.size())); 
     96        } 
     97         
     98        private void adjustOtherFans(List<ComputingNode> nodes){ 
    7199                for(ComputingNode node : nodes){ 
    72100                        if(node.getFreeProcessorsNumber() == node.getProcessorsNumber()){ 
    73101                                node.getAirThroughputInterface().setAirThroughputState(StandardAirThroughputStateName.FAN_OFF); 
    74                         } 
     102                        } else if(new JobRegistryImpl(node.getName()).getRunningTasks().size() > 1) 
     103                                node.getAirThroughputInterface().setAirThroughputState(new UserAirThroughputStateName("FAN_ON_TURBO")); 
     104                        else  
     105                                node.getAirThroughputInterface().setAirThroughputState(StandardAirThroughputStateName.FAN_ON); 
    75106                } 
    76107        } 
    77108 
    78  
     109         
    79110} 
Note: See TracChangeset for help on using the changeset viewer.