Changeset 1312 for DCWoRMS/branches/coolemall/src/test/thermal/recs/plugins/scheduling/RecsExclusivenessCoolestSP.java
- Timestamp:
- 03/21/14 15:43:32 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
DCWoRMS/branches/coolemall/src/test/thermal/recs/plugins/scheduling/RecsExclusivenessCoolestSP.java
r1301 r1312 30 30 import schedframe.scheduling.manager.resources.ResourceManager; 31 31 import schedframe.scheduling.manager.tasks.JobRegistry; 32 import schedframe.scheduling.manager.tasks.JobRegistryImpl; 32 33 import schedframe.scheduling.plan.SchedulingPlanInterface; 33 34 import schedframe.scheduling.plan.impl.SchedulingPlan; … … 36 37 import schedframe.scheduling.queue.TaskQueueList; 37 38 import schedframe.scheduling.tasks.TaskInterface; 39 import test.thermal.recs.plugins.energy.ThermalConstants; 38 40 import test.thermal.recs.utils.AppType; 39 41 … … 46 48 private ResourceBundle timeBundle; 47 49 50 // virtual nodes are to keep track of the intermediate power and temperature between job assignments 51 private List<VirtualNode> virtualNodes = new ArrayList<VirtualNode>(); 52 private boolean firstCall = true; 53 48 54 public SchedulingPlanInterface<?> schedule(SchedulingEvent event, TaskQueueList queues, JobRegistry jobRegistry, 49 55 ResourceManager resManager, ModuleList modules) { 50 56 51 57 ClusterResourceManager resourceManager = (ClusterResourceManager) resManager; 52 58 SchedulingPlan plan = new SchedulingPlan(); 59 60 List<Node> nodes = resourceManager.getNodes(); 61 62 // create the virtualNodes on the first scheduling call 63 if (firstCall){ 64 65 VirtualNode dummyVN = new VirtualNode(0); 66 virtualNodes.add(dummyVN); 67 68 int numNodes = nodes.size(); 69 for (int i = 1; i <= numNodes; i++){ 70 VirtualNode vn = new VirtualNode(i); 71 virtualNodes.add(vn); 72 } 73 firstCall = false; 74 } 75 76 // update the power of the virtual nodes 77 for (Node node : nodes){ 78 double power = node.getPowerInterface().getRecentPowerUsage().getValue(); 79 int nodeId = Integer.parseInt(node.getName().split("_")[1]); 80 virtualNodes.get(nodeId).setPower(power); 81 } 82 83 // update the temperature of the virtual nodes 84 for (int i = 1; i <= 9; i++){ 85 VirtualNode vn1 = virtualNodes.get(i+9); 86 VirtualNode vn2 = virtualNodes.get(i); 87 88 double power1 = vn1.getPower(); 89 double power2 = vn2.getPower(); 90 91 double tout = ThermalConstants.calculateOutletTemp(power1, power2); 92 vn1.setTemperature(tout); 93 vn2.setTemperature(tout); 94 } 95 53 96 // choose the events types to serve. 54 97 // Different actions for different events are possible. … … 87 130 Collections.shuffle(nodes); 88 131 Collections.sort(nodes, new TemperatureComparator(task)); 89 132 /* 133 System.out.println("*************************"); 134 System.out.println("Assigning task " + task.getJobId()); 135 for (Node node : nodes) { 136 int nodeId = Integer.parseInt(node.getName().split("_")[1]); 137 double node_power = node.getPowerInterface().getRecentPowerUsage().getValue(); 138 double node_temp = node.getThermalInterface().getRecentTemperature().getValue(); 139 double vn_power = virtualNodes.get(nodeId).getPower(); 140 double vn_temp = virtualNodes.get(nodeId).getTemperature(); 141 System.out.println(node.getName() + ": node_power = " + node_power + " ; node_temp = " + node_temp + " ; vn_power = " + vn_power + " ; vn_temp = " + vn_temp); 142 } 143 System.out.println("*************************"); 144 */ 90 145 for (Node node : nodes) { 91 146 int cpuRequest; … … 138 193 pe.addAll(choosenResources); 139 194 map.put(StandardResourceUnitName.PE, pe); 195 196 // update the power and temperature of the virtualNode corresponding to the node 197 int nodeId = Integer.parseInt(node.getName().split("_")[1]); 198 VirtualNode vn = virtualNodes.get(nodeId); 199 200 // power update 201 double extraPower = 0; 202 try{ 203 extraPower = Math.abs(getMeasuredPower(createQuery(task, node)) - node.getPowerInterface().getPowerConsumption(StandardPowerStateName.ON)); 204 } catch (FileNotFoundException e) { 205 206 } catch (IOException e) { 207 208 } catch (MissingResourceException e){ 209 210 } catch (NoSuchFieldException e) { 211 212 } 213 vn.setPower(vn.getPower() + extraPower); 214 215 // temperature update 216 double delta = 1; 217 VirtualNode vn2; 218 if (nodeId >= 1 && nodeId <= 9){ 219 delta = ThermalConstants.delta2; 220 vn2 = virtualNodes.get(nodeId + 9); 221 } 222 else{ 223 delta = ThermalConstants.delta1; 224 vn2 = virtualNodes.get(nodeId - 9); 225 } 226 double extraTemp = delta * (extraPower/(ThermalConstants.Q * ThermalConstants.C * ThermalConstants.ro)); 227 vn.setTemperature(vn.getTemperature() + extraTemp); 228 vn2.setTemperature(vn2.getTemperature() + extraTemp); 229 140 230 return map; 141 142 231 } 143 232 } … … 183 272 } 184 273 185 public int compare(Node node1, Node node2){ 186 double node1Temp = node1.getThermalInterface().getRecentTemperature().getValue(); 187 double node2Temp = node2.getThermalInterface().getRecentTemperature().getValue(); 274 public int compare(Node node1, Node node2){ 275 276 int id1 = Integer.parseInt(node1.getName().split("_")[1]); 277 int id2 = Integer.parseInt(node2.getName().split("_")[1]); 278 279 double node1Temp = virtualNodes.get(id1).getTemperature(); 280 double node2Temp = virtualNodes.get(id2).getTemperature(); 188 281 189 282 if (node1Temp > node2Temp)
Note: See TracChangeset
for help on using the changeset viewer.