stage3:
/* Stage3: stop the VM and copy the rest of states. */
XBT_DEBUG("mig-stage3: remaining_size %f", remaining_size);
- simcall_vm_suspend(vm);
- stop_dirty_page_tracking(vm);
-
- TRY{
- send_migration_data(ms->vm, ms->src_pm, ms->dst_pm, remaining_size, ms->mbox, 3, 0, mig_speed, xfer_cpu_overhead);
- }CATCH_ANONYMOUS{
- //hostfailure (if you want to know whether this is the SRC or the DST please check directly in send_migration_data code)
- // Stop the dirty page tracking an return (there is no memory space to release)
- XBT_INFO ("Process tx migration catches an expection and thus return");
- simcall_vm_resume(vm);
- return 0;
- }
-
- // At that point the Migration is considered valid for the SRC node but remind that the DST side should relocate effectively the VM on the DST node.
+ simcall_vm_suspend(ms->vm);
+ stop_dirty_page_tracking(ms->vm);
+
+ TRY {
+ send_migration_data(ms->vm, ms->src_pm, ms->dst_pm, remaining_size, ms->mbox, 3, 0, mig_speed, -1);
+ } CATCH_ANONYMOUS {
+ //hostfailure (if you want to know whether this is the SRC or the DST please check directly in send_migration_data code)
+ // Stop the dirty page tracking an return (there is no memory space to release)
+ simcall_vm_resume(ms->vm);
+ return 0;
+ }
-
- XBT_DEBUG("mig: tx_done");
+ // At that point the Migration is considered valid for the SRC node but remind that the DST side should relocate effectively the VM on the DST node.
+ XBT_INFO("mig: tx_done");
return 0;
}
{
XBT_DEBUG("wait for reception of the final ACK (i.e. migration has been correctly performed");
msg_task_t task = NULL;
- msg_error_t ret = MSG_TIMEOUT;
- while (ret == MSG_TIMEOUT && MSG_host_is_on(dst_pm)) //Wait while you receive the message ok
- // Active waiting, evaluation is performed every one second.
- ret = MSG_task_receive_with_timeout(&task, ms->mbox_ctl, 1);
+ msg_error_t ret = MSG_TIMEOUT;
+ while (ret == MSG_TIMEOUT && MSG_host_is_on(dst_pm)) //Wait while you receive the message o
- ret = MSG_task_receive_with_timeout(&task, ms->mbox_ctl, 10);
++ ret = MSG_task_receive_with_timeout(&task, ms->mbox_ctl, 3);
xbt_free(ms->mbox_ctl);
xbt_free(ms->mbox);
if(ret == MSG_HOST_FAILURE){
// Note that since the communication failed, the owner did not change and the task should be destroyed on the other side.
// Hence, just throw the execption
- //XBT_INFO("SRC crashes, throw an exception (m-control)");
- return -1;
- }
+ XBT_INFO("SRC crashes, throw an exception (m-control)");
- MSG_process_kill(tx_process);
++ MSG_process_kill(tx_process); // Adrien, I made a merge on Nov 28th 2014, I'm not sure whether this line is required or not
+ return -1;
+ }
else if((ret == MSG_TRANSFER_FAILURE) || (ret == MSG_TIMEOUT)){ // MSG_TIMEOUT here means that MSG_host_is_avail() returned false.
- //XBT_INFO("DST crashes, throw an exception (m-control)");
- return -2;
+ XBT_INFO("DST crashes, throw an exception (m-control)");
+ return -2;
}
-
+
char *expected_task_name = get_mig_task_name(vm, src_pm, dst_pm, 4);
xbt_assert(strcmp(task->name, expected_task_name) == 0);
xbt_free(expected_task_name);