- Timestamp:
- 01/10/13 12:35:31 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
DCWoRMS/trunk/src/example/localplugin/FCFSBF_FanManagementClusterPlugin.java
r750 r778 3 3 import gridsim.dcworms.DCWormsTags; 4 4 5 import java.util.ArrayList; 5 6 import java.util.List; 6 7 import java.util.Random; … … 9 10 import schedframe.resources.computing.ComputingNode; 10 11 import schedframe.resources.computing.profiles.energy.airthroughput.StandardAirThroughputStateName; 12 import schedframe.resources.computing.profiles.energy.airthroughput.UserAirThroughputStateName; 11 13 import schedframe.scheduling.manager.resources.ClusterResourceManager; 12 14 import schedframe.scheduling.manager.resources.ResourceManager; 13 15 import schedframe.scheduling.manager.tasks.JobRegistry; 16 import schedframe.scheduling.manager.tasks.JobRegistryImpl; 14 17 import schedframe.scheduling.plan.SchedulingPlanInterface; 15 18 import schedframe.scheduling.plan.impl.SchedulingPlan; … … 48 51 if (task.getStatus() == DCWormsTags.READY) { 49 52 50 ComputingNode node = chooseRandomProvider(resourceManager );53 ComputingNode node = chooseRandomProvider(resourceManager, task); 51 54 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); 53 60 notSelectedNodes.remove(node); 54 61 addToSchedulingPlan(plan, task, node.getName()); … … 56 63 } 57 64 } 58 turnOffIdleNodes(notSelectedNodes);65 adjustOtherFans(notSelectedNodes); 59 66 break; 60 67 } … … 62 69 } 63 70 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); 68 74 } 69 75 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){ 71 99 for(ComputingNode node : nodes){ 72 100 if(node.getFreeProcessorsNumber() == node.getProcessorsNumber()){ 73 101 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); 75 106 } 76 107 } 77 108 78 109 79 110 }
Note: See TracChangeset
for help on using the changeset viewer.