Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
authorMartin Quinson <martin.quinson@loria.fr>
Thu, 15 Jun 2017 15:37:29 +0000 (17:37 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Thu, 15 Jun 2017 15:37:29 +0000 (17:37 +0200)
examples/platforms/cloud-sharing.xml [new file with mode: 0644]
src/include/surf/maxmin.h
src/plugins/vm/VirtualMachineImpl.hpp
src/surf/HostImpl.cpp
src/surf/maxmin.cpp
teshsuite/msg/cloud-sharing/cloud-sharing.c
teshsuite/msg/cloud-sharing/cloud-sharing.tesh

diff --git a/examples/platforms/cloud-sharing.xml b/examples/platforms/cloud-sharing.xml
new file mode 100644 (file)
index 0000000..26addba
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+<platform version="4.1">
+       
+       <AS id="AS_acme" routing="Full">
+               <cluster id="acme" prefix="node-" radical="0-99" suffix=".acme.org" speed="1Gf" bw="125MBps" lat="50us" bb_bw="2.25GBps"  bb_lat="500us" core="1" />
+               <cluster id="acme2" prefix="node-" radical="0-99" suffix=".acme2.org" speed="1Gf" bw="125MBps" lat="50us" bb_bw="2.25GBps"  bb_lat="500us" core="2" />
+               <cluster id="acme4" prefix="node-" radical="0-99" suffix=".acme4.org" speed="1Gf" bw="125MBps" lat="50us" bb_bw="2.25GBps"  bb_lat="500us" core="4" />
+       </AS>
+                  
+</platform>
index 7365bfa..df7571f 100644 (file)
@@ -203,6 +203,8 @@ XBT_PUBLIC(void) lmm_constraint_free(lmm_system_t sys, lmm_constraint_t cnst);
  */
 XBT_PUBLIC(double) lmm_constraint_get_usage(lmm_constraint_t cnst);
 
+XBT_PUBLIC(int) lmm_constraint_get_variable_amount(lmm_constraint_t cnst);
+
 /**
  * @brief Sets the concurrency limit for this constraint
  * @param cnst A constraint
index d937176..39487a8 100644 (file)
@@ -95,6 +95,7 @@ public:
   e_surf_vm_state_t getState();
   void setState(e_surf_vm_state_t state);
   static std::deque<s4u::VirtualMachine*> allVms_;
+  int coreAmount() { return coreAmount_; }
 
   bool isMigrating = false;
 
index 72f0f72..b212a16 100644 (file)
@@ -29,24 +29,14 @@ void HostModel::ignoreEmptyVmInPmLMM()
 {
   /* iterate for all virtual machines */
   for (s4u::VirtualMachine* ws_vm : vm::VirtualMachineImpl::allVms_) {
-
     Cpu* cpu = ws_vm->pimpl_cpu;
+    int active_tasks = lmm_constraint_get_variable_amount(cpu->constraint());
 
-    int is_active = lmm_constraint_used(cpu->model()->getMaxminSystem(), cpu->constraint());
-
-    if (is_active) {
-      /* some tasks exist on this VM */
-      XBT_DEBUG("set the weight of the dummy CPU action on PM to 1");
-
-      /* FIXME: If we assign 1.05 and 0.05, the system makes apparently wrong values. */
-      ws_vm->pimpl_vm_->action_->setPriority(1);
+    /* The impact of the VM over its PM is the min between its vCPU amount and the amount of tasks it contains */
+    int impact = std::min(active_tasks, ws_vm->pimpl_vm_->coreAmount());
 
-    } else {
-      /* no task exist on this VM */
-      XBT_DEBUG("set the weight of the dummy CPU action on PM to 0");
-
-      ws_vm->pimpl_vm_->action_->setPriority(0);
-    }
+    XBT_INFO("set the weight of the dummy CPU action of VM%p on PM to %d (#tasks: %d)", ws_vm, impact, active_tasks);
+    ws_vm->pimpl_vm_->action_->setPriority(impact);
   }
 }
 
index 3d9da37..5876ad7 100644 (file)
@@ -1245,6 +1245,18 @@ double lmm_constraint_get_usage(lmm_constraint_t cnst) {
    }
   return usage;
 }
+int lmm_constraint_get_variable_amount(lmm_constraint_t cnst) {
+  int usage = 0;
+  xbt_swag_t elem_list = &(cnst->enabled_element_set);
+  void *_elem;
+
+  xbt_swag_foreach(_elem, elem_list) {
+    lmm_element_t elem = (lmm_element_t)_elem;
+    if (elem->value > 0)
+      usage++;
+  }
+ return usage;
+}
 
 void lmm_check_concurrency(lmm_system_t sys){
   //These checks are very expensive, so do them only if we want to debug SURF LMM
index da63459..fa4ad6a 100644 (file)
 #include "simgrid/msg.h"
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, "Messages specific for this msg example");
 
+const int FAIL_ON_ERROR = 0;
+const int flop_amount = 100000000;
+int failed_test = 0;
+
 static int computation_fun(int argc, char* argv[])
 {
-  msg_task_t task = MSG_task_create("Task", 100000000, 0, NULL);
+  int *size = MSG_process_get_data(MSG_process_self());
+  msg_task_t task = MSG_task_create("Task", *size, 0, NULL);
 
-  double clock_sta = MSG_get_clock();
+  double begin = MSG_get_clock();
   MSG_task_execute(task);
-  double clock_end = MSG_get_clock();
+  double end = MSG_get_clock();
 
-  XBT_INFO("Task took %gs to execute", clock_end - clock_sta);
+  if (0.1 - (end - begin) > 0.001) {
+    xbt_assert(! FAIL_ON_ERROR, "%s with %.4g load (%dflops) took %.4fs instead of 0.1s",
+        MSG_process_get_name(MSG_process_self()), ((double)*size/flop_amount),*size, (end-begin));
+    XBT_INFO("FAILED TEST: %s with %.4g load (%dflops) took %.4fs instead of 0.1s",
+        MSG_process_get_name(MSG_process_self()),((double)*size/flop_amount), *size, (end-begin));
+    failed_test ++;
+  } else {
+    XBT_INFO("Passed: %s with %.4g load (%dflops) took 0.1s as expected",
+        MSG_process_get_name(MSG_process_self()), ((double)*size/flop_amount), *size);
+  }
 
   MSG_task_destroy(task);
+  free(size);
 
   return 0;
 }
 
+static void run_test(const char *name, msg_host_t location, int size) {
+  int* data = xbt_new(int, 1);
+  *data = size;
+  MSG_process_create(name, computation_fun, data, location);
+}
+
 static int master_main(int argc, char* argv[])
 {
+       
+  XBT_INFO("# TEST ON SINGLE-CORE PMs");
+
   msg_host_t pm0 = MSG_host_by_name("node-0.acme.org");
   msg_host_t pm1 = MSG_host_by_name("node-1.acme.org");
+  msg_host_t vm0;
   xbt_assert(pm0, "Host node-0.acme.org does not seem to exist");
+  
+  // syntax of the process name:
+  // "( )1" means PM with one core; "( )2" means PM with 2 cores
+  // "(  [  ]2  )4" means a VM with 2 cores, on a PM with 4 cores.
+  // "o" means another process is there
+  // "X" means the process which holds this name
 
   XBT_INFO("## Test 1 (started): check computation on normal PMs");
 
   XBT_INFO("### Put a task on a PM");
-  MSG_process_create("compute", computation_fun, NULL, pm0);
+  run_test("(X)1", pm0, flop_amount);
   MSG_process_sleep(2);
 
   XBT_INFO("### Put two tasks on a PM");
-  MSG_process_create("compute", computation_fun, NULL, pm0);
-  MSG_process_create("compute", computation_fun, NULL, pm0);
+  run_test("(Xo)1", pm0, flop_amount/2);
+  run_test("(oX)1", pm0, flop_amount/2);
   MSG_process_sleep(2);
 
   XBT_INFO("### Put a task on each PM");
-  MSG_process_create("compute", computation_fun, NULL, pm0);
-  MSG_process_create("compute", computation_fun, NULL, pm1);
+  run_test("(X)1 (o)1", pm0, flop_amount);
+  run_test("(o)1 (X)1", pm1, flop_amount);
   MSG_process_sleep(2);
 
   XBT_INFO("## Test 1 (ended)");
+  XBT_INFO("# TEST ON SINGLE-CORE PMs AND SINGLE-CORE VMs");
 
-  XBT_INFO("## Test 2 (started): check impact of running a task inside a VM (there is no degradation for the moment)");
+  XBT_INFO("## Test 2 (started): check impact of running tasks inside a VM (there is no degradation for the moment)");
 
   XBT_INFO("### Put a VM on a PM, and put a task to the VM");
-  msg_vm_t vm0 = MSG_vm_create_core(pm0, "VM0");
+  vm0 = MSG_vm_create_core(pm0, "VM0");
+  MSG_vm_start(vm0);
+  run_test("( [X]1 )1", vm0, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put two task to the VM");
+  vm0 = MSG_vm_create_core(pm0, "VM0");
   MSG_vm_start(vm0);
-  MSG_process_create("compute", computation_fun, NULL, vm0);
+  run_test("( [Xo]1 )1", vm0, flop_amount/2);
+  run_test("( [oX]1 )1", vm0, flop_amount/2);
   MSG_process_sleep(2);
   MSG_vm_destroy(vm0);
 
   XBT_INFO("## Test 2 (ended)");
+  
+  XBT_INFO("## Test 3 (started): check impact of running tasks collocated with VMs (there is no VM noise for the moment)");
 
-  XBT_INFO(
-      "## Test 3 (started): check impact of running a task collocated with a VM (there is no VM noise for the moment)");
+  XBT_INFO("### Put a task on a PM collocated with an empty VM");
 
-  XBT_INFO("### Put a VM on a PM, and put a task to the PM");
   vm0 = MSG_vm_create_core(pm0, "VM0");
   MSG_vm_start(vm0);
-  MSG_process_create("compute", computation_fun, NULL, pm0);
+  run_test("( [ ]1 X )1", pm0, flop_amount);
   MSG_process_sleep(2);
   MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, put a task to the PM and a task to the VM");
 
+  vm0 = MSG_vm_create_core(pm0, "VM0");
+  MSG_vm_start(vm0);
+  run_test("( [X]1 o )1", vm0, flop_amount/2);
+  run_test("( [o]1 X )1", pm0, flop_amount/2);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, put a task to the PM and two tasks to the VM");
+
+  vm0 = MSG_vm_create_core(pm0, "VM0");
+  MSG_vm_start(vm0);
+  run_test("( [Xo]1 o )1", vm0, flop_amount/4);
+  run_test("( [oX]1 o )1", vm0, flop_amount/4);
+  run_test("( [oo]1 X )1", pm0, flop_amount/2);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
   XBT_INFO("## Test 3 (ended)");
+  
+  XBT_INFO("# TEST ON TWO-CORE PMs");
+  
+  msg_host_t pm2 = MSG_host_by_name("node-0.acme2.org"); // 2 cores
+  xbt_assert(pm2, "Host node-0.acme2.org does not seem to exist");
+  
+  XBT_INFO("## Test 4 (started): check computation on 2 cores PMs");
 
-  XBT_INFO("## Test 4 (started): compare the cost of running two tasks inside two different VMs collocated or not (for"
-           " the moment, there is no degradation for the VMs. Hence, the time should be equals to the time of test 1");
+  XBT_INFO("### Put a task on a PM");
+  run_test("(X)2", pm2, flop_amount);
+  MSG_process_sleep(2);
+
+  XBT_INFO("### Put two tasks on a PM");
+  run_test("(Xx)2", pm2, flop_amount);
+  run_test("(xX)2", pm2, flop_amount);
+  MSG_process_sleep(2);
+  
+  XBT_INFO("### Put three tasks on a PM");
+  run_test("(Xxx)2", pm2, flop_amount*2/3);
+  run_test("(xXx)2", pm2, flop_amount*2/3);
+  run_test("(xxX)2", pm2, flop_amount*2/3);
+  MSG_process_sleep(2);
+
+  XBT_INFO("## Test 4 (ended)");
+  
+  XBT_INFO("# TEST ON TWO-CORE PMs AND SINGLE-CORE VMs");
+  
+  XBT_INFO("## Test 5 (started): check impact of a single VM (there is no degradation for the moment)");
 
+  XBT_INFO("### Put a VM on a PM, and put a task to the VM");
+  vm0 = MSG_vm_create_core(pm2, "VM0");
+  MSG_vm_start(vm0);
+  run_test("( [X]1 )2", vm0, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put two tasks to the VM");
+  vm0 = MSG_vm_create_core(pm2, "VM0");
+  MSG_vm_start(vm0);
+  run_test("( [Xx]1 )2", vm0, flop_amount/2);
+  run_test("( [xX]1 )2", vm0, flop_amount/2);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put a task to the PM");
+  vm0 = MSG_vm_create_core(pm2, "VM0");
+  MSG_vm_start(vm0);
+  run_test("( [ ]1 X )2", pm2, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, put a task to the PM and a task to the VM");
+  vm0 = MSG_vm_create_core(pm2, "VM0");
+  MSG_vm_start(vm0);
+  run_test("( [X]1 x )2", vm0, flop_amount);
+  run_test("( [x]1 X )2", pm2, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+
+  XBT_INFO("## Test 5 (ended)");
+  
+  XBT_INFO("## Test 6 (started): check impact of a several VMs (there is no degradation for the moment)");
+
+  XBT_INFO("### Put two VMs on a PM, and put a task to one VM");
+  vm0 = MSG_vm_create_core(pm2, "VM0");
+  msg_vm_t vm1 = MSG_vm_create_core(pm2, "VM1");
+  MSG_vm_start(vm0);
+  MSG_vm_start(vm1);
+  run_test("( [X]1 [ ]1 )2", vm0, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  MSG_vm_destroy(vm1);
+  
   XBT_INFO("### Put two VMs on a PM, and put a task to each VM");
-  vm0          = MSG_vm_create_core(pm0, "VM0");
-  msg_vm_t vm1 = MSG_vm_create_core(pm0, "VM1");
+  vm0 = MSG_vm_create_core(pm2, "VM0");
+  vm1 = MSG_vm_create_core(pm2, "VM1");
   MSG_vm_start(vm0);
   MSG_vm_start(vm1);
-  MSG_process_create("compute", computation_fun, NULL, vm0);
-  MSG_process_create("compute", computation_fun, NULL, vm1);
+  run_test("( [X]1 [x]1 )2", vm0, flop_amount);
+  run_test("( [x]1 [X]1 )2", vm1, flop_amount);
   MSG_process_sleep(2);
   MSG_vm_destroy(vm0);
   MSG_vm_destroy(vm1);
-
-  XBT_INFO("### Put a VM on each PM, and put a task to each VM");
-  vm0 = MSG_vm_create_core(pm0, "VM0");
-  vm1 = MSG_vm_create_core(pm1, "VM1");
+  
+  XBT_INFO("### Put three VMs on a PM, and put a task to two VMs");
+  vm0 = MSG_vm_create_core(pm2, "VM0");
+  vm1 = MSG_vm_create_core(pm2, "VM1");
+  msg_vm_t vm2 = MSG_vm_create_core(pm2, "VM2");
   MSG_vm_start(vm0);
   MSG_vm_start(vm1);
-  MSG_process_create("compute", computation_fun, NULL, vm0);
-  MSG_process_create("compute", computation_fun, NULL, vm1);
+  MSG_vm_start(vm2);
+  run_test("( [X]1 [x]1 [ ]1 )2", vm0, flop_amount);
+  run_test("( [x]1 [X]1 [ ]1 )2", vm1, flop_amount);
   MSG_process_sleep(2);
   MSG_vm_destroy(vm0);
   MSG_vm_destroy(vm1);
-  XBT_INFO("## Test 4 (ended)");
+  MSG_vm_destroy(vm2);
+  
+  XBT_INFO("### Put three VMs on a PM, and put a task to each VM");
+  vm0 = MSG_vm_create_core(pm2, "VM0");
+  vm1 = MSG_vm_create_core(pm2, "VM1");
+  vm2 = MSG_vm_create_core(pm2, "VM2");
+  MSG_vm_start(vm0);
+  MSG_vm_start(vm1);
+  MSG_vm_start(vm2);
+  run_test("( [X]1 [o]1 [o]1 )2", vm0, flop_amount*2/3);
+  run_test("( [o]1 [X]1 [o]1 )2", vm1, flop_amount*2/3);
+  run_test("( [o]1 [o]1 [X]1 )2", vm2, flop_amount*2/3);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  MSG_vm_destroy(vm1);
+  MSG_vm_destroy(vm2);
+  
+  XBT_INFO("## Test 6 (ended)");
+  
+  XBT_INFO("# TEST ON TWO-CORE PMs AND TWO-CORE VMs");
+  
+  XBT_INFO("## Test 7 (started): check impact of a single VM (there is no degradation for the moment)");
+  
+  XBT_INFO("### Put a VM on a PM, and put a task to the VM");
+  vm0 = MSG_vm_create_multicore(pm2, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [X]2 )2", vm0, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put two tasks to the VM");
+  vm0 = MSG_vm_create_multicore(pm2, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [Xo]2 )2", vm0, flop_amount);
+  run_test("( [oX]2 )2", vm0, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put three tasks to the VM");
+  vm0 = MSG_vm_create_multicore(pm2, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [Xoo]2 )2", vm0, flop_amount*2/3);
+  run_test("( [oXo]2 )2", vm0, flop_amount*2/3);
+  run_test("( [ooX]2 )2", vm0, flop_amount*2/3);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("## Test 7 (ended)");
+  
+  XBT_INFO("## Test 8 (started): check impact of a single VM collocated with a task (there is no degradation for the moment)");
+  
+  XBT_INFO("### Put a VM on a PM, and put a task to the PM");
+  vm0 = MSG_vm_create_multicore(pm2, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [ ]2 X )2", pm2, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, put one task to the PM and one task to the VM");
+  vm0 = MSG_vm_create_multicore(pm2, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [o]2 X )2", pm2, flop_amount);
+  run_test("( [X]2 o )2", vm0, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, put one task to the PM and two tasks to the VM");
+  vm0 = MSG_vm_create_multicore(pm2, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [oo]2 X )2", pm2, flop_amount*2/3);
+  run_test("( [Xo]2 o )2", vm0, flop_amount*2/3);
+  run_test("( [oX]2 o )2", vm0, flop_amount*2/3);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, put one task to the PM and three tasks to the VM");
+  vm0 = MSG_vm_create_multicore(pm2, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [ooo]2 X )2", pm2, flop_amount*2/3);
+  run_test("( [Xoo]2 o )2", vm0, flop_amount*2/9);
+  run_test("( [oXo]2 o )2", vm0, flop_amount*2/9);
+  run_test("( [ooX]2 o )2", vm0, flop_amount*2/9);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put two tasks to the PM");
+  vm0 = MSG_vm_create_multicore(pm2, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [ ]2 Xo )2", pm2, flop_amount);
+  run_test("( [ ]2 oX )2", pm2, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+
+  XBT_INFO("### Put a VM on a PM, put one task to the PM and one task to the VM");
+  vm0 = MSG_vm_create_multicore(pm2, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [o]2 Xo )2", pm2, flop_amount*2/3);
+  run_test("( [o]2 oX )2", pm2, flop_amount*2/3);
+  run_test("( [X]2 oo )2", vm0, flop_amount*2/3);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+
+  XBT_INFO("### Put a VM on a PM, put one task to the PM and two tasks to the VM");
+  vm0 = MSG_vm_create_multicore(pm2, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [oo]2 Xo )2", pm2, flop_amount/2);
+  run_test("( [oo]2 oX )2", pm2, flop_amount/2);
+  run_test("( [Xo]2 oo )2", vm0, flop_amount/2);
+  run_test("( [oX]2 oo )2", vm0, flop_amount/2);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+
+  XBT_INFO("### Put a VM on a PM, put one task to the PM and three tasks to the VM");
+  vm0 = MSG_vm_create_multicore(pm2, "VM0", 2);
+  MSG_vm_start(vm0);
+  run_test("( [ooo]2 Xo )2", pm2, flop_amount*2/4);
+  run_test("( [ooo]2 oX )2", pm2, flop_amount*2/4);
+  run_test("( [Xoo]2 oo )2", vm0, flop_amount/3);
+  run_test("( [oXo]2 oo )2", vm0, flop_amount/3);
+  run_test("( [ooX]2 oo )2", vm0, flop_amount/3);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+
+  XBT_INFO("## Test 8 (ended)");
+  
+  XBT_INFO("# TEST ON FOUR-CORE PMs AND TWO-CORE VMs");
+  
+  msg_host_t pm4 = MSG_host_by_name("node-0.acme4.org");
+  xbt_assert(pm4, "Host node-0.acme4.org does not seem to exist");
+  
+  XBT_INFO("## Test 9 (started): check impact of a single VM");
+  
+  XBT_INFO("### Put a VM on a PM, and put a task to the VM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0", 2);
+  MSG_vm_start(vm0);
+  run_test("( [X]2 )4", vm0, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put two tasks to the VM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [Xo]2 )4", vm0, flop_amount);
+  run_test("( [oX]2 )4", vm0, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### ( [ooo]2 )4: Put a VM on a PM, and put three tasks to the VM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [Xoo]2 )4", vm0, flop_amount*2/3);
+  run_test("( [oXo]2 )4", vm0, flop_amount*2/3);
+  run_test("( [ooX]2 )4", vm0, flop_amount*2/3);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("## Test 9 (ended)");
+  
+  XBT_INFO("## Test 10 (started): check impact of a single emtpy VM collocated with tasks");
+  
+  XBT_INFO("### Put a VM on a PM, and put a task to the PM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [ ]2 X )4", pm4, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put two tasks to the PM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [ ]2 Xo )4", pm4, flop_amount);
+  run_test("( [ ]2 oX )4", pm4, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put three tasks to the PM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [ ]2 Xoo )4", pm4, flop_amount);
+  run_test("( [ ]2 oXo )4", pm4, flop_amount);
+  run_test("( [ ]2 ooX )4", pm4, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put four tasks to the PM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [ ]2 Xooo )4", pm4, flop_amount);
+  run_test("( [ ]2 oXoo )4", pm4, flop_amount);
+  run_test("( [ ]2 ooXo )4", pm4, flop_amount);
+  run_test("( [ ]2 oooX )4", pm4, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("## Test 10 (ended)");
+  
+  XBT_INFO("## Test 11 (started): check impact of a single working VM collocated with tasks");
+  
+  XBT_INFO("### Put a VM on a PM, and put one task to the PM and one task to the VM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0", 2);
+  MSG_vm_start(vm0);
+  run_test("( [X]2 o )4", vm0, flop_amount);
+  run_test("( [o]2 X )4", pm4, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put two tasks to the PM and one task to the VM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [X]2 oo )4", vm0, flop_amount);
+  run_test("( [o]2 Xo )4", pm4, flop_amount);
+  run_test("( [o]2 oX )4", pm4, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put two tasks to the PM and two tasks to the VM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [Xo]2 oo )4", vm0, flop_amount);
+  run_test("( [oX]2 oo )4", vm0, flop_amount);
+  run_test("( [oo]2 Xo )4", pm4, flop_amount);
+  run_test("( [oo]2 oX )4", pm4, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put three tasks to the PM and one tasks to the VM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [X]2 ooo )4", vm0, flop_amount);
+  run_test("( [o]2 Xoo )4", pm4, flop_amount);
+  run_test("( [o]2 oXo )4", pm4, flop_amount);
+  run_test("( [o]2 ooX )4", pm4, flop_amount);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put three tasks to the PM and two tasks to the VM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [Xo]2 ooo )4", vm0, flop_amount*4/5);
+  run_test("( [oX]2 ooo )4", vm0, flop_amount*4/5);
+  run_test("( [oo]2 Xoo )4", pm4, flop_amount*4/5);
+  run_test("( [oo]2 oXo )4", pm4, flop_amount*4/5);
+  run_test("( [oo]2 ooX )4", pm4, flop_amount*4/5);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("### Put a VM on a PM, and put three tasks to the PM and three tasks to the VM");
+  vm0 = MSG_vm_create_multicore(pm4, "VM0",2);
+  MSG_vm_start(vm0);
+  run_test("( [Xoo]2 ooo )4", vm0, flop_amount*(8/5) * 1/3); // The VM has 8/5 of the PM
+  run_test("( [oXo]2 ooo )4", vm0, flop_amount*(8/5) * 1/3);
+  run_test("( [ooX]2 ooo )4", vm0, flop_amount*(8/5) * 1/3);
+
+  run_test("( [ooo]2 Xoo )4", pm4, flop_amount*4/5);
+  run_test("( [ooo]2 oXo )4", pm4, flop_amount*4/5);
+  run_test("( [ooo]2 ooX )4", pm4, flop_amount*4/5);
+  MSG_process_sleep(2);
+  MSG_vm_destroy(vm0);
+  
+  XBT_INFO("## Test 11 (ended)");
 
+  XBT_INFO("## %d test failed", failed_test);
   return 0;
 }
 
@@ -104,7 +493,7 @@ int main(int argc, char* argv[])
   MSG_init(&argc, argv);
 
   /* load the platform file */
-  const char* platform = "../../platforms/cluster.xml";
+  const char* platform = "../../../platforms/cloud-sharing.xml";
   if (argc == 2)
     platform = argv[1];
   MSG_create_environment(platform);
index beb39ac..bca8349 100644 (file)
@@ -1,6 +1,7 @@
 #! ./tesh
 
-$ $SG_TEST_EXENV ${bindir:=.}/cloud-sharing$EXEEXT --log=no_loc ${srcdir:=.}/../../../examples/platforms/cluster.xml
+$ $SG_TEST_EXENV ${bindir:=.}/cloud-sharing$EXEEXT --log=no_loc ${srcdir:=.}/../../../examples/platforms/cloud-sharing.xml
+> [node-0.acme.org:master:(1) 0.000000] [msg_test/INFO] # TEST ON SINGLE-CORE PMs
 > [node-0.acme.org:master:(1) 0.000000] [msg_test/INFO] ## Test 1 (started): check computation on normal PMs
 > [node-0.acme.org:master:(1) 0.000000] [msg_test/INFO] ### Put a task on a PM
 > [node-0.acme.org:compute:(2) 0.100000] [msg_test/INFO] Task took 0.1s to execute
@@ -11,19 +12,149 @@ $ $SG_TEST_EXENV ${bindir:=.}/cloud-sharing$EXEEXT --log=no_loc ${srcdir:=.}/../
 > [node-0.acme.org:compute:(5) 4.100000] [msg_test/INFO] Task took 0.1s to execute
 > [node-1.acme.org:compute:(6) 4.100000] [msg_test/INFO] Task took 0.1s to execute
 > [node-0.acme.org:master:(1) 6.000000] [msg_test/INFO] ## Test 1 (ended)
-> [node-0.acme.org:master:(1) 6.000000] [msg_test/INFO] ## Test 2 (started): check impact of running a task inside a VM (there is no degradation for the moment)
+> [node-0.acme.org:master:(1) 6.000000] [msg_test/INFO] # TEST ON SINGLE-CORE PMs AND SINGLE-CORE VMs
+> [node-0.acme.org:master:(1) 6.000000] [msg_test/INFO] ## Test 2 (started): check impact of running tasks inside a VM (there is no degradation for the moment)
 > [node-0.acme.org:master:(1) 6.000000] [msg_test/INFO] ### Put a VM on a PM, and put a task to the VM
 > [VM0:compute:(7) 6.100000] [msg_test/INFO] Task took 0.1s to execute
-> [node-0.acme.org:master:(1) 8.000000] [msg_test/INFO] ## Test 2 (ended)
-> [node-0.acme.org:master:(1) 8.000000] [msg_test/INFO] ## Test 3 (started): check impact of running a task collocated with a VM (there is no VM noise for the moment)
-> [node-0.acme.org:master:(1) 8.000000] [msg_test/INFO] ### Put a VM on a PM, and put a task to the PM
-> [node-0.acme.org:compute:(8) 8.100000] [msg_test/INFO] Task took 0.1s to execute
-> [node-0.acme.org:master:(1) 10.000000] [msg_test/INFO] ## Test 3 (ended)
-> [node-0.acme.org:master:(1) 10.000000] [msg_test/INFO] ## Test 4 (started): compare the cost of running two tasks inside two different VMs collocated or not (for the moment, there is no degradation for the VMs. Hence, the time should be equals to the time of test 1
-> [node-0.acme.org:master:(1) 10.000000] [msg_test/INFO] ### Put two VMs on a PM, and put a task to each VM
-> [VM0:compute:(9) 10.200000] [msg_test/INFO] Task took 0.2s to execute
-> [VM1:compute:(10) 10.200000] [msg_test/INFO] Task took 0.2s to execute
-> [node-0.acme.org:master:(1) 12.000000] [msg_test/INFO] ### Put a VM on each PM, and put a task to each VM
-> [VM0:compute:(11) 12.100000] [msg_test/INFO] Task took 0.1s to execute
-> [VM1:compute:(12) 12.100000] [msg_test/INFO] Task took 0.1s to execute
-> [node-0.acme.org:master:(1) 14.000000] [msg_test/INFO] ## Test 4 (ended)
+> [node-0.acme.org:master:(1) 8.000000] [msg_test/INFO] ### Put a VM on a PM, and put two task to the VM
+> [VM0:compute:(9) 8.200000] [msg_test/INFO] Task took 0.2s to execute
+> [VM0:compute:(8) 8.200000] [msg_test/INFO] Task took 0.2s to execute
+> [node-0.acme.org:master:(1) 10.000000] [msg_test/INFO] ## Test 2 (ended)
+> [node-0.acme.org:master:(1) 10.000000] [msg_test/INFO] ## Test 3 (started): check impact of running tasks collocated with VMs (there is no VM noise for the moment)
+> [node-0.acme.org:master:(1) 10.000000] [msg_test/INFO] ### Put a task on a PM collocated with an empty VM
+> [node-0.acme.org:compute:(10) 10.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 12.000000] [msg_test/INFO] ### Put a VM on a PM, put a task to the PM and a task to the VM
+> [node-0.acme.org:compute:(11) 12.200000] [msg_test/INFO] Task took 0.2s to execute
+> [VM0:compute:(12) 12.200000] [msg_test/INFO] Task took 0.2s to execute
+> [node-0.acme.org:master:(1) 14.000000] [msg_test/INFO] ### Put a VM on a PM, put a task to the PM and two tasks to the VM
+> [node-0.acme.org:compute:(13) 14.200000] [msg_test/INFO] Task took 0.2s to execute
+> [VM0:compute:(15) 14.400000] [msg_test/INFO] Task took 0.4s to execute
+> [VM0:compute:(14) 14.400000] [msg_test/INFO] Task took 0.4s to execute
+> [node-0.acme.org:master:(1) 16.000000] [msg_test/INFO] ## Test 3 (ended)
+> [node-0.acme.org:master:(1) 16.000000] [msg_test/INFO] # TEST ON TWO-CORE PMs
+> [node-0.acme.org:master:(1) 16.000000] [msg_test/INFO] ## Test 4 (started): check computation on 2 cores PMs
+> [node-0.acme.org:master:(1) 16.000000] [msg_test/INFO] ### Put a task on a PM
+> [node-0.acme2.org:compute:(16) 16.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 18.000000] [msg_test/INFO] ### Put two tasks on a PM
+> [node-0.acme2.org:compute:(18) 18.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme2.org:compute:(17) 18.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 20.000000] [msg_test/INFO] ### Put three tasks on a PM
+> [node-0.acme2.org:compute:(21) 20.150000] [msg_test/INFO] Task took 0.15s to execute
+> [node-0.acme2.org:compute:(19) 20.150000] [msg_test/INFO] Task took 0.15s to execute
+> [node-0.acme2.org:compute:(20) 20.150000] [msg_test/INFO] Task took 0.15s to execute
+> [node-0.acme.org:master:(1) 22.000000] [msg_test/INFO] ## Test 4 (ended)
+> [node-0.acme.org:master:(1) 22.000000] [msg_test/INFO] # TEST ON TWO-CORE PMs AND SINGLE-CORE VMs
+> [node-0.acme.org:master:(1) 22.000000] [msg_test/INFO] ## Test 5 (started): check impact of a single VM (there is no degradation for the moment)
+> [node-0.acme.org:master:(1) 22.000000] [msg_test/INFO] ### Put a VM on a PM, and put a task to the VM
+> [VM0:compute:(22) 22.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 24.000000] [msg_test/INFO] ### Put a VM on a PM, and put two tasks to the VM
+> [VM0:compute:(24) 24.200000] [msg_test/INFO] Task took 0.2s to execute
+> [VM0:compute:(23) 24.200000] [msg_test/INFO] Task took 0.2s to execute
+> [node-0.acme.org:master:(1) 26.000000] [msg_test/INFO] ### Put a VM on a PM, and put a task to the PM
+> [node-0.acme2.org:compute:(25) 26.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 28.000000] [msg_test/INFO] ### Put a VM on a PM, put a task to the PM and a task to the VM
+> [node-0.acme2.org:compute:(26) 28.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(27) 28.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 30.000000] [msg_test/INFO] ## Test 5 (ended)
+> [node-0.acme.org:master:(1) 30.000000] [msg_test/INFO] ## Test 6 (started): check impact of a several VMs (there is no degradation for the moment)
+> [node-0.acme.org:master:(1) 30.000000] [msg_test/INFO] ### Put two VMs on a PM, and put a task to one VM
+> [VM0:compute:(28) 30.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 32.000000] [msg_test/INFO] ### Put two VMs on a PM, and put a task to each VM
+> [VM0:compute:(29) 32.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM1:compute:(30) 32.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 34.000000] [msg_test/INFO] ### Put three VMs on a PM, and put a task to two VMs
+> [VM0:compute:(31) 34.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM1:compute:(32) 34.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 36.000000] [msg_test/INFO] ### Put three VMs on a PM, and put a task to each VM
+> [VM0:compute:(33) 36.150000] [msg_test/INFO] Task took 0.15s to execute
+> [VM2:compute:(35) 36.150000] [msg_test/INFO] Task took 0.15s to execute
+> [VM1:compute:(34) 36.150000] [msg_test/INFO] Task took 0.15s to execute
+> [node-0.acme.org:master:(1) 38.000000] [msg_test/INFO] ## Test 6 (ended)
+> [node-0.acme.org:master:(1) 38.000000] [msg_test/INFO] # TEST ON TWO-CORE PMs AND TWO-CORE VMs
+> [node-0.acme.org:master:(1) 38.000000] [msg_test/INFO] ## Test 7 (started): check impact of a single VM (there is no degradation for the moment)
+> [node-0.acme.org:master:(1) 38.000000] [msg_test/INFO] ### Put a VM on a PM, and put a task to the VM
+> [VM0:compute:(36) 38.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 40.000000] [msg_test/INFO] ### Put a VM on a PM, and put two tasks to the VM
+> [VM0:compute:(38) 40.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(37) 40.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 42.000000] [msg_test/INFO] ### Put a VM on a PM, and put three tasks to the VM
+> [VM0:compute:(41) 42.150000] [msg_test/INFO] Task took 0.15s to execute
+> [VM0:compute:(39) 42.150000] [msg_test/INFO] Task took 0.15s to execute
+> [VM0:compute:(40) 42.150000] [msg_test/INFO] Task took 0.15s to execute
+> [node-0.acme.org:master:(1) 44.000000] [msg_test/INFO] ## Test 7 (ended)
+> [node-0.acme.org:master:(1) 44.000000] [msg_test/INFO] ## Test 8 (started): check impact of a single VM collocated with a task (there is no degradation for the moment)
+> [node-0.acme.org:master:(1) 44.000000] [msg_test/INFO] ### Put a VM on a PM, and put a task to the PM
+> [node-0.acme2.org:compute:(42) 44.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 46.000000] [msg_test/INFO] ### Put a VM on a PM, put one task to the PM and one task to the VM
+> [node-0.acme2.org:compute:(43) 46.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(44) 46.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 48.000000] [msg_test/INFO] ### Put a VM on a PM, put one task to the PM and two tasks to the VM
+> [node-0.acme2.org:compute:(45) 48.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(47) 48.200000] [msg_test/INFO] Task took 0.2s to execute
+> [VM0:compute:(46) 48.200000] [msg_test/INFO] Task took 0.2s to execute
+> [node-0.acme.org:master:(1) 50.000000] [msg_test/INFO] ### Put a VM on a PM, put one task to the PM and three tasks to the VM
+> [node-0.acme2.org:compute:(48) 50.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(51) 50.300000] [msg_test/INFO] Task took 0.3s to execute
+> [VM0:compute:(49) 50.300000] [msg_test/INFO] Task took 0.3s to execute
+> [VM0:compute:(50) 50.300000] [msg_test/INFO] Task took 0.3s to execute
+> [node-0.acme.org:master:(1) 52.000000] [msg_test/INFO] ## Test 8 (ended)
+> [node-0.acme.org:master:(1) 52.000000] [msg_test/INFO] # TEST ON FOUR-CORE PMs AND TWO-CORE VMs
+> [node-0.acme.org:master:(1) 52.000000] [msg_test/INFO] ## Test 9 (started): check impact of a single VM
+> [node-0.acme.org:master:(1) 52.000000] [msg_test/INFO] ### Put a VM on a PM, and put a task to the VM
+> [VM0:compute:(52) 52.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 54.000000] [msg_test/INFO] ### Put a VM on a PM, and put two tasks to the VM
+> [VM0:compute:(54) 54.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(53) 54.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 56.000000] [msg_test/INFO] ### Put a VM on a PM, and put three tasks to the VM
+> [VM0:compute:(57) 56.150000] [msg_test/INFO] Task took 0.15s to execute
+> [VM0:compute:(55) 56.150000] [msg_test/INFO] Task took 0.15s to execute
+> [VM0:compute:(56) 56.150000] [msg_test/INFO] Task took 0.15s to execute
+> [node-0.acme.org:master:(1) 58.000000] [msg_test/INFO] ## Test 9 (ended)
+> [node-0.acme.org:master:(1) 58.000000] [msg_test/INFO] ## Test 10 (started): check impact of a single emtpy VM collocated with tasks
+> [node-0.acme.org:master:(1) 58.000000] [msg_test/INFO] ### Put a VM on a PM, and put a task to the PM
+> [node-0.acme4.org:compute:(58) 58.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 60.000000] [msg_test/INFO] ### Put a VM on a PM, and put two tasks to the PM
+> [node-0.acme4.org:compute:(60) 60.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(59) 60.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 62.000000] [msg_test/INFO] ### Put a VM on a PM, and put three tasks to the PM
+> [node-0.acme4.org:compute:(63) 62.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(61) 62.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(62) 62.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 64.000000] [msg_test/INFO] ### Put a VM on a PM, and put four tasks to the PM
+> [node-0.acme4.org:compute:(67) 64.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(66) 64.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(65) 64.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(64) 64.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 66.000000] [msg_test/INFO] ## Test 10 (ended)
+> [node-0.acme.org:master:(1) 66.000000] [msg_test/INFO] ## Test 11 (started): check impact of a single working VM collocated with tasks
+> [node-0.acme.org:master:(1) 66.000000] [msg_test/INFO] ### Put a VM on a PM, and put one task to the PM and one task to the VM
+> [node-0.acme4.org:compute:(69) 66.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(68) 66.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 68.000000] [msg_test/INFO] ### Put a VM on a PM, and put two tasks to the PM and one task to the VM
+> [node-0.acme4.org:compute:(71) 68.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(72) 68.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(70) 68.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 70.000000] [msg_test/INFO] ### Put a VM on a PM, and put two tasks to the PM and two tasks to the VM
+> [node-0.acme4.org:compute:(75) 70.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(76) 70.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(74) 70.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(73) 70.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 72.000000] [msg_test/INFO] ### Put a VM on a PM, and put three tasks to the PM and one tasks to the VM
+> [node-0.acme4.org:compute:(80) 72.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(78) 72.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(79) 72.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(77) 72.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme.org:master:(1) 74.000000] [msg_test/INFO] ### Put a VM on a PM, and put three tasks to the PM and two tasks to the VM
+> [node-0.acme4.org:compute:(85) 74.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(83) 74.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(84) 74.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(82) 74.200000] [msg_test/INFO] Task took 0.2s to execute
+> [VM0:compute:(81) 74.200000] [msg_test/INFO] Task took 0.2s to execute
+> [node-0.acme.org:master:(1) 76.000000] [msg_test/INFO] ### Put a VM on a PM, and put three tasks to the PM and three tasks to the VM
+> [node-0.acme4.org:compute:(91) 76.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(89) 76.100000] [msg_test/INFO] Task took 0.1s to execute
+> [node-0.acme4.org:compute:(90) 76.100000] [msg_test/INFO] Task took 0.1s to execute
+> [VM0:compute:(88) 76.300000] [msg_test/INFO] Task took 0.3s to execute
+> [VM0:compute:(86) 76.300000] [msg_test/INFO] Task took 0.3s to execute
+> [VM0:compute:(87) 76.300000] [msg_test/INFO] Task took 0.3s to execute
+> [node-0.acme.org:master:(1) 78.000000] [msg_test/INFO] ## Test 11 (ended)
\ No newline at end of file