+ {
+ msg_host_t vm0 = MSG_vm_create_core(pm0, "VM0");
+
+ s_vm_params_t params;
+ memset(¶ms, 0, sizeof(params));
+ params.ramsize = 1L * 1000 * 1000 * 1000; // 1Gbytes
+ MSG_host_set_params(vm0, ¶ms);
+ MSG_vm_start(vm0);
+
+ const double cpu_speed = MSG_host_get_speed(pm0);
+ MSG_vm_start(vm0);
+
+ XBT_INFO("# 10. Test migration");
+ const double computation_amount = cpu_speed * 10;
+
+ XBT_INFO("# 10. (a) Put a task on a VM without any bound.");
+ launch_worker(vm0, "worker0", computation_amount, 0, 0);
+ MSG_process_sleep(1000);
+ XBT_INFO(" ");
+
+ XBT_INFO("# 10. (b) set 10%% bound to the VM, and then put a task on the VM.");
+ MSG_vm_set_bound(vm0, cpu_speed / 10);
+ launch_worker(vm0, "worker0", computation_amount, 0, 0);
+ MSG_process_sleep(1000);
+ XBT_INFO(" ");
+
+ XBT_INFO("# 10. (c) migrate");
+ MSG_vm_migrate(vm0, pm1);
+ XBT_INFO(" ");
+
+ XBT_INFO("# 10. (d) Put a task again on the VM.");
+ launch_worker(vm0, "worker0", computation_amount, 0, 0);
+ MSG_process_sleep(1000);
+ XBT_INFO(" ");
+
+ MSG_vm_destroy(vm0);
+ }
+
+
+ XBT_INFO("# 11. Change a bound dynamically.");