{
xbt_dynar_t hosts_dynar = MSG_hosts_as_dynar();
msg_host_t pm0 = xbt_dynar_get_as(hosts_dynar, 0, msg_host_t);
+ msg_host_t pm1 = xbt_dynar_get_as(hosts_dynar, 0, msg_host_t);
{
}
- XBT_INFO("# 10. Change a bound dynamically.");
+ {
+ msg_host_t vm0 = MSG_vm_create_core(pm0, "VM0");
+
+ s_ws_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_get_host_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.");
test_dynamic_change();
return 0;
double clock_post_send = MSG_get_clock();
double bandwidth = ramsize / (clock_post_send - clock_prev_send);
threshold = get_threshold_value(bandwidth, max_downtime);
- XBT_INFO("actual banwdidth %f, threshold %f", bandwidth / 1024 / 1024, threshold);
+ XBT_INFO("actual banwdidth %f (MB/s), threshold %f", bandwidth / 1024 / 1024, threshold);
}
double m_finish; /**< finish time : this is modified during the run and fluctuates until the task is completed */
ModelPtr getModel() {return p_model;}
- double getBound() {return m_bound;}
public:
e_surf_action_state_t getState(); /**< get the state*/
virtual void setState(e_surf_action_state_t state); /**< Change state*/
+ double getBound() {return m_bound;}
double getStartTime(); /**< Return the start time of an action */
double getFinishTime(); /**< Return the finish time of an action */
void *getData() {return p_data;}
int ret = p_action->unref();
xbt_assert(ret == 1, "Bug: some resource still remains");
+ /* keep the bound value of the cpu action of the VM. */
+ double old_bound = p_action->getBound();
+ if (old_bound != 0) {
+ XBT_INFO("migrate VM(%s): set bound (%lf) at %s", vm_name, old_bound, pm_name_dst);
+ new_cpu_action->setBound(old_bound);
+ }
+
p_action = new_cpu_action;
}