Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
rename the logging channel of java from 'jmsg' to 'java'
[simgrid.git] / examples / java / cloud / masterworker / Master.java
1 /* Copyright (c) 2012-2014. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 package cloud.masterworker;
8
9 import java.util.ArrayList;
10
11 import org.simgrid.msg.Host;
12 import org.simgrid.msg.Msg;
13 import org.simgrid.msg.MsgException;
14 import org.simgrid.msg.Process;
15 import org.simgrid.msg.Task;
16 import org.simgrid.msg.VM;
17
18 //import eu.plumbr.api.Plumbr;
19
20 public class Master extends Process {
21         private Host[] hosts;
22
23         public Master(Host host, String name, Host[] hosts) {
24                 super(host,name,null);
25                 this.hosts = hosts;
26         }
27
28         public void main(String[] args) throws MsgException {
29                 int workersCount = Main.NHOSTS;
30
31                 for (int step = 1; step <= 1/*00000*/ ; step++) {
32                         //Plumbr.startTransaction("Migration");
33                         ArrayList<VM> vms = new ArrayList<>();
34                         // Create one VM per host and bind a process inside each one. 
35                         for (int i = 0; i < workersCount; i++) {
36                                 Msg.verb("create VM0-s"+step+"-"+i);  
37                                 VM vm = new VM(hosts[i+1],"VM0-s"+step+"-"+i);
38                                 vm.start();
39                                 vms.add(vm);
40                                 Worker worker= new Worker(vm,"WK:"+step+":"+ i);
41                                 Msg.verb("Put Worker "+worker.getName()+ " on "+vm.getName());
42                                 worker.start();
43                         }
44
45                         Msg.info("Launched " + vms.size() + " VMs");
46
47                         Msg.info("Send a first batch of work to everyone");
48                         workBatch(workersCount,"WK:"+step+":");
49
50                         Msg.info("Suspend all VMs, wait a while, resume them, migrate them and shut them down.");
51                         for (int i = 0; i < vms.size(); i++) {
52                                 Msg.verb("Suspend "+vms.get(i).getName());
53                                 vms.get(i).suspend();
54                         }
55
56                         Msg.verb("Wait a while");
57                         waitFor(2);
58
59                         Msg.verb("Resume all VMs.");
60                         for (int i = 0; i < vms.size(); i++) {
61                                 vms.get(i).resume();
62                         }
63
64                         Msg.verb("Sleep long enough for everyone to be done with previous batch of work");
65                         waitFor(1000*step - Msg.getClock());
66
67                         /*    Msg.info("Add one more process per VM.");
68     for (int i = 0; i < vms.size(); i++) {
69       VM vm = vms.get(i);
70       Worker worker = new Worker(vm,i + vms.size());
71       worker.start();
72     }
73
74     workBatch(workersCount * 2);
75                          */
76
77                         Msg.verb("Migrate everyone to "+hosts[3].getName());
78                         for (int i = 0; i < vms.size(); i++) {
79                                 Msg.verb("Migrate "+vms.get(i).getName()+" from "+hosts[i+1].getName()+"to "+hosts[3].getName());
80                                 vms.get(i).migrate(hosts[3]);
81                         }
82
83                         Msg.verb("Let's shut down the simulation and kill everyone.");
84
85                         for (int i = 0; i < vms.size(); i++) {
86                                 vms.get(i).destroy();
87                         }
88                         Msg.info("XXXXXXXXXXXXXXX Step "+step+" done.");
89 //                      Plumbr.endTransaction();
90                 }
91         }
92
93         public void workBatch(int workersCount, String nameRoot) throws MsgException {
94                 for (int i = 0; i < workersCount; i++) {
95                         Task task = new Task("Task "+nameRoot + i, Main.TASK_COMP_SIZE, Main.TASK_COMM_SIZE);
96                         Msg.verb("Sending to "+ nameRoot + i);
97                         task.send(nameRoot + i);
98                 }
99         }
100 }