Ignore:
Timestamp:
03/21/14 15:43:32 (11 years ago)
Author:
wojtekp
Message:
 
Location:
DCWoRMS/branches/coolemall/src/test/thermal/recs/plugins/scheduling
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • DCWoRMS/branches/coolemall/src/test/thermal/recs/plugins/scheduling/RecsExclusivenessCoolestSP.java

    r1301 r1312  
    3030import schedframe.scheduling.manager.resources.ResourceManager; 
    3131import schedframe.scheduling.manager.tasks.JobRegistry; 
     32import schedframe.scheduling.manager.tasks.JobRegistryImpl; 
    3233import schedframe.scheduling.plan.SchedulingPlanInterface; 
    3334import schedframe.scheduling.plan.impl.SchedulingPlan; 
     
    3637import schedframe.scheduling.queue.TaskQueueList; 
    3738import schedframe.scheduling.tasks.TaskInterface; 
     39import test.thermal.recs.plugins.energy.ThermalConstants; 
    3840import test.thermal.recs.utils.AppType; 
    3941 
     
    4648        private ResourceBundle timeBundle; 
    4749         
     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         
    4854        public SchedulingPlanInterface<?> schedule(SchedulingEvent event, TaskQueueList queues, JobRegistry jobRegistry, 
    4955                        ResourceManager resManager, ModuleList modules) { 
    50  
     56                 
    5157                ClusterResourceManager resourceManager = (ClusterResourceManager) resManager; 
    5258                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                 
    5396                // choose the events types to serve. 
    5497                // Different actions for different events are possible. 
     
    87130                Collections.shuffle(nodes); 
    88131                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                */ 
    90145                for (Node node : nodes) { 
    91146                        int cpuRequest; 
     
    138193                                pe.addAll(choosenResources); 
    139194                                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                         
    140230                                return map; 
    141  
    142231                        } 
    143232                } 
     
    183272                } 
    184273                 
    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(); 
    188281                 
    189282                if (node1Temp > node2Temp) 
  • DCWoRMS/branches/coolemall/src/test/thermal/recs/plugins/scheduling/RecsExclusivenessMaxTempOptSP.java

    r1301 r1312  
    4747        private ResourceBundle timeBundle; 
    4848         
     49        // virtual nodes are to keep track of the intermediate power and temperature between job assignments  
     50        private List<VirtualNode> virtualNodes = new ArrayList<VirtualNode>(); 
     51        private boolean firstCall = true; 
     52         
    4953        public SchedulingPlanInterface<?> schedule(SchedulingEvent event, TaskQueueList queues, JobRegistry jobRegistry, 
    5054                        ResourceManager resManager, ModuleList modules) { 
     
    5256                ClusterResourceManager resourceManager = (ClusterResourceManager) resManager; 
    5357                SchedulingPlan plan = new SchedulingPlan(); 
     58                 
     59                List<Node> nodes = resourceManager.getNodes(); 
     60                 
     61                // create the virtualNodes on the first scheduling call 
     62                if (firstCall){ 
     63                         
     64                        VirtualNode dummyVN = new VirtualNode(0); 
     65                        virtualNodes.add(dummyVN); 
     66                         
     67                        int numNodes = nodes.size(); 
     68                        for (int i = 1; i <= numNodes; i++){ 
     69                                VirtualNode vn = new VirtualNode(i); 
     70                                virtualNodes.add(vn); 
     71                        } 
     72                        firstCall = false; 
     73                } 
     74                 
     75                // update the power of the virtual nodes 
     76                for (Node node : nodes){ 
     77                        double power = node.getPowerInterface().getRecentPowerUsage().getValue(); 
     78                        int nodeId = Integer.parseInt(node.getName().split("_")[1]); 
     79                        virtualNodes.get(nodeId).setPower(power); 
     80                } 
     81                 
     82                // update the temperature of the virtual nodes 
     83                for (int i = 1; i <= 9; i++){ 
     84                        VirtualNode vn1 = virtualNodes.get(i+9); 
     85                        VirtualNode vn2 = virtualNodes.get(i); 
     86                         
     87                        double power1 = vn1.getPower(); 
     88                        double power2 = vn2.getPower(); 
     89                         
     90                        double tout = ThermalConstants.calculateOutletTemp(power1, power2); 
     91                        vn1.setTemperature(tout); 
     92                        vn2.setTemperature(tout); 
     93                } 
     94                 
    5495                // choose the events types to serve. 
    5596                // Different actions for different events are possible. 
     
    138179                                pe.addAll(choosenResources); 
    139180                                map.put(StandardResourceUnitName.PE, pe); 
     181                                 
     182                                // update the power and temperature of the virtualNode corresponding to the node 
     183                                int nodeId = Integer.parseInt(node.getName().split("_")[1]); 
     184                                VirtualNode vn = virtualNodes.get(nodeId); 
     185                                 
     186                                // power update 
     187                                double extraPower = 0; 
     188                        try{ 
     189                                extraPower = Math.abs(getMeasuredPower(createQuery(task, node)) - node.getPowerInterface().getPowerConsumption(StandardPowerStateName.ON)); 
     190                            } catch (FileNotFoundException e) { 
     191                 
     192                                } catch (IOException e) { 
     193                 
     194                                } catch (MissingResourceException e){ 
     195                                         
     196                        } catch (NoSuchFieldException e) { 
     197 
     198                        } 
     199                        vn.setPower(vn.getPower() + extraPower); 
     200                         
     201                                // temperature update 
     202                        double delta = 1; 
     203                        VirtualNode vn2; 
     204                        if (nodeId >= 1 && nodeId <= 9){ 
     205                                delta = ThermalConstants.delta2; 
     206                                vn2 = virtualNodes.get(nodeId + 9); 
     207                        } 
     208                        else{ 
     209                                delta = ThermalConstants.delta1; 
     210                                vn2 = virtualNodes.get(nodeId - 9); 
     211                        } 
     212                        double extraTemp = delta * (extraPower/(ThermalConstants.Q * ThermalConstants.C * ThermalConstants.ro)); 
     213                        vn.setTemperature(vn.getTemperature() + extraTemp); 
     214                        vn2.setTemperature(vn2.getTemperature() + extraTemp); 
     215                                 
    140216                                return map; 
    141217 
     
    179255                private TaskInterface<?> task; 
    180256                 
    181                 double Q = ThermalConstants.Q; 
    182                 double C = ThermalConstants.C; 
    183                 double delta1 = ThermalConstants.delta1; 
    184                 double delta2 = ThermalConstants.delta2; 
    185                 double ro = ThermalConstants.ro; 
    186                  
    187257                public TemperatureComparator(TaskInterface<?> task){ 
    188258                        this.task = task; 
     
    190260                 
    191261            public int compare(Node node1, Node node2){     
    192                 double currentNode1Temp = node1.getThermalInterface().getRecentTemperature().getValue(); 
    193                 double currentNode2Temp = node2.getThermalInterface().getRecentTemperature().getValue(); 
     262                 
     263                int id1 = Integer.parseInt(node1.getName().split("_")[1]); 
     264                int id2 = Integer.parseInt(node2.getName().split("_")[1]); 
     265                 
     266                double currentNode1Temp = virtualNodes.get(id1).getTemperature(); 
     267                double currentNode2Temp = virtualNodes.get(id2).getTemperature(); 
    194268                 
    195269                double power1 = 0; 
     
    208282                } 
    209283                 
    210                 Integer id1 = Integer.parseInt(node1.getName().split("_")[1]); 
    211                 Integer id2 = Integer.parseInt(node2.getName().split("_")[1]); 
    212                  
    213284                double deltaOne = 1, deltaTwo = 1; 
    214                 if (id1 >= 0 && id1 <= 8) // outlet 
    215                         deltaOne = delta2; 
    216                 else if (id1 >= 9 && id1 <= 17) // inlet 
    217                         deltaOne = delta1; 
    218                 if (id2 >= 0 && id2 <= 8) // outlet 
    219                         deltaTwo = delta2; 
    220                 else if (id2 >= 9 && id2 <= 17) // inlet 
    221                         deltaTwo = delta1; 
    222                  
    223                 double afterNode1Temp = currentNode1Temp + deltaOne * (power1/(Q * C * ro)); 
    224                 double afterNode2Temp = currentNode2Temp + deltaTwo * (power2/(Q * C * ro)); 
     285                if (id1 >= 1 && id1 <= 9) // outlet 
     286                        deltaOne = ThermalConstants.delta2; 
     287                else if (id1 >= 10 && id1 <= 18) // inlet 
     288                        deltaOne = ThermalConstants.delta1; 
     289                if (id2 >= 1 && id2 <= 9) // outlet 
     290                        deltaTwo = ThermalConstants.delta2; 
     291                else if (id2 >= 10 && id2 <= 18) // inlet 
     292                        deltaTwo = ThermalConstants.delta1; 
     293                 
     294                double afterNode1Temp = currentNode1Temp + deltaOne * (power1/(ThermalConstants.Q * ThermalConstants.C * ThermalConstants.ro)); 
     295                double afterNode2Temp = currentNode2Temp + deltaTwo * (power2/(ThermalConstants.Q * ThermalConstants.C * ThermalConstants.ro)); 
    225296                 
    226297                if (afterNode1Temp > afterNode2Temp) 
  • DCWoRMS/branches/coolemall/src/test/thermal/recs/plugins/scheduling/RecsExclusivenessTempIncrOptSP.java

    r1301 r1312  
    178178                private TaskInterface<?> task; 
    179179                 
    180                 double Q = ThermalConstants.Q; 
    181                 double C = ThermalConstants.C; 
    182                 double delta1 = ThermalConstants.delta1; 
    183                 double delta2 = ThermalConstants.delta2; 
    184                 double ro = ThermalConstants.ro; 
    185                  
    186180                public TemperatureComparator(TaskInterface<?> task){ 
    187181                        this.task = task; 
     
    192186                double power1 = 0; 
    193187                double power2 = 0; 
    194                 double time1 = 0; 
    195                 double time2 = 0; 
    196188                try{ 
    197189                        power1 = Math.abs(getMeasuredPower(createQuery(task, node1)) - node1.getPowerInterface().getPowerConsumption(StandardPowerStateName.ON)); 
    198190                        power2 = Math.abs(getMeasuredPower(createQuery(task, node2)) - node2.getPowerInterface().getPowerConsumption(StandardPowerStateName.ON)); 
    199                         time1 = getMeasuredTime(createQuery(task, node1)); 
    200                         time2 = getMeasuredTime(createQuery(task, node2)); 
    201191                } catch (FileNotFoundException e) { 
    202192         
     
    213203                 
    214204                double deltaOne = 1, deltaTwo = 1; 
    215                 if (id1 >= 0 && id1 <= 8) // outlet 
    216                         deltaOne = delta2; 
    217                 else if (id1 >= 9 && id1 <= 17) // inlet 
    218                         deltaOne = delta1; 
    219                 if (id2 >= 0 && id2 <= 8) // outlet 
    220                         deltaTwo = delta2; 
    221                 else if (id2 >= 9 && id2 <= 17) // inlet 
    222                         deltaTwo = delta1; 
    223                  
    224                 double extraNode1Temp =  deltaOne * (power1/(Q * C * ro)) * time1; 
    225                 double extraNode2Temp =  deltaTwo * (power2/(Q * C * ro)) * time2; 
     205                if (id1 >= 1 && id1 <= 9) // outlet 
     206                        deltaOne = ThermalConstants.delta2; 
     207                else if (id1 >= 10 && id1 <= 18) // inlet 
     208                        deltaOne = ThermalConstants.delta1; 
     209                if (id2 >= 1 && id2 <= 9) // outlet 
     210                        deltaTwo = ThermalConstants.delta2; 
     211                else if (id2 >= 10 && id2 <= 18) // inlet 
     212                        deltaTwo = ThermalConstants.delta1; 
     213                 
     214                double extraNode1Temp =  deltaOne * (power1/(ThermalConstants.Q * ThermalConstants.C * ThermalConstants.ro)); 
     215                double extraNode2Temp =  deltaTwo * (power2/(ThermalConstants.Q * ThermalConstants.C * ThermalConstants.ro)); 
    226216                 
    227217                if (extraNode1Temp > extraNode2Temp) 
Note: See TracChangeset for help on using the changeset viewer.