1 /* Copyright (c) 2012-2014. The SimGrid Team.
2 * All rights reserved. */
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. */
7 package cloud.masterworker;
9 import java.util.ArrayList;
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;
18 //import eu.plumbr.api.Plumbr;
20 public class Master extends Process {
23 public Master(Host host, String name, Host[] hosts) {
24 super(host,name,null);
28 public void main(String[] args) throws MsgException {
29 int workersCount = Main.NHOSTS;
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);
40 Worker worker= new Worker(vm,"WK:"+step+":"+ i);
41 Msg.verb("Put Worker "+worker.getName()+ " on "+vm.getName());
45 Msg.info("Launched " + vms.size() + " VMs");
47 Msg.info("Send a first batch of work to everyone");
48 workBatch(workersCount,"WK:"+step+":");
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());
56 Msg.verb("Wait a while");
59 Msg.verb("Resume all VMs.");
60 for (int i = 0; i < vms.size(); i++) {
64 Msg.verb("Sleep long enough for everyone to be done with previous batch of work");
65 waitFor(1000*step - Msg.getClock());
67 /* Msg.info("Add one more process per VM.");
68 for (int i = 0; i < vms.size(); i++) {
70 Worker worker = new Worker(vm,i + vms.size());
74 workBatch(workersCount * 2);
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]);
83 Msg.verb("Let's shut down the simulation and kill everyone.");
85 for (int i = 0; i < vms.size(); i++) {
88 Msg.info("XXXXXXXXXXXXXXX Step "+step+" done.");
89 // Plumbr.endTransaction();
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);