Logo AND Algorithmique Numérique Distribuée

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