X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dd05e77cf9fe231aef1608d42c8e45ac3ee5c15c..d46afc036c17f291795eaaab14ce42d0a96e3feb:/src/plugins/vm/VmLiveMigration.cpp diff --git a/src/plugins/vm/VmLiveMigration.cpp b/src/plugins/vm/VmLiveMigration.cpp index c6b77602ed..384d90f66e 100644 --- a/src/plugins/vm/VmLiveMigration.cpp +++ b/src/plugins/vm/VmLiveMigration.cpp @@ -4,10 +4,10 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "src/plugins/vm/VmLiveMigration.hpp" +#include "simgrid/Exception.hpp" #include "src/instr/instr_private.hpp" #include "src/plugins/vm/VirtualMachineImpl.hpp" #include "src/plugins/vm/VmHostExt.hpp" -#include "xbt/ex.hpp" XBT_LOG_NEW_DEFAULT_CATEGORY(vm_live_migration, "S4U virtual machines live migration"); @@ -43,14 +43,14 @@ void MigrationRx::operator()() /* Update the vm location */ /* precopy migration makes the VM temporally paused */ - xbt_assert(vm_->getState() == SURF_VM_STATE_SUSPENDED); + xbt_assert(vm_->get_state() == s4u::VirtualMachine::state::SUSPENDED); /* Update the vm location and resume it */ - vm_->setPm(dst_pm_); + vm_->set_pm(dst_pm_); vm_->resume(); // Now the VM is running on the new host (the migration is completed) (even if the SRC crash) - vm_->getImpl()->isMigrating = false; + vm_->get_impl()->is_migrating_ = false; XBT_DEBUG("VM(%s) moved from PM(%s) to PM(%s)", vm_->get_cname(), src_pm_->get_cname(), dst_pm_->get_cname()); if (TRACE_vm_is_enabled()) { @@ -104,9 +104,9 @@ sg_size_t MigrationTx::sendMigrationData(sg_size_t size, int stage, int stage2_r s4u::Activity* comm = nullptr; try { if (mig_speed > 0) - comm = mbox->put_init(msg, size)->set_rate(mig_speed)->wait(timeout); + comm = mbox->put_init(msg, size)->set_rate(mig_speed)->wait_for(timeout); else - comm = mbox->put_async(msg, size)->wait(); + comm = mbox->put_async(msg, size)->wait_for(timeout); } catch (xbt_ex& e) { if (comm) { sg_size_t remaining = static_cast(comm->get_remaining()); @@ -134,8 +134,8 @@ void MigrationTx::operator()() { XBT_DEBUG("mig: tx_start"); - double host_speed = vm_->getPm()->getSpeed(); - const sg_size_t ramsize = vm_->getRamsize(); + double host_speed = vm_->get_pm()->get_speed(); + const sg_size_t ramsize = vm_->get_ramsize(); const double dp_rate = host_speed ? (sg_vm_get_migration_speed(vm_) * sg_vm_get_dirty_page_intensity(vm_)) / host_speed : 1; const sg_size_t dp_cap = sg_vm_get_working_set_memory(vm_); @@ -285,11 +285,11 @@ void MigrationTx::operator()() static void onVirtualMachineShutdown(simgrid::s4u::VirtualMachine& vm) { - if (vm.getImpl()->isMigrating) { + if (vm.get_impl()->is_migrating_) { vm.extension()->rx_->kill(); vm.extension()->tx_->kill(); vm.extension()->issuer_->kill(); - vm.getImpl()->isMigrating = false; + vm.get_impl()->is_migrating_ = false; } } @@ -300,13 +300,6 @@ void sg_vm_live_migration_plugin_init() simgrid::s4u::VirtualMachine::on_shutdown.connect(&onVirtualMachineShutdown); } -/* Deprecated. Please use MSG_vm_create_migratable() instead */ -msg_vm_t MSG_vm_create(msg_host_t ind_pm, const char* name, int coreAmount, int ramsize, int mig_netspeed, - int dp_intensity) -{ - return sg_vm_create_migratable(ind_pm, name, coreAmount, ramsize, mig_netspeed, dp_intensity); -} - simgrid::s4u::VirtualMachine* sg_vm_create_migratable(simgrid::s4u::Host* pm, const char* name, int coreAmount, int ramsize, int mig_netspeed, int dp_intensity) { @@ -316,7 +309,7 @@ simgrid::s4u::VirtualMachine* sg_vm_create_migratable(simgrid::s4u::Host* pm, co sg_vm_t vm = new simgrid::s4u::VirtualMachine(name, pm, coreAmount, static_cast(ramsize) * 1024 * 1024); sg_vm_set_dirty_page_intensity(vm, dp_intensity / 100.0); - sg_vm_set_working_set_memory(vm, vm->getRamsize() * 0.9); // assume working set memory is 90% of ramsize + sg_vm_set_working_set_memory(vm, vm->get_ramsize() * 0.9); // assume working set memory is 90% of ramsize sg_vm_set_migration_speed(vm, mig_netspeed * 1024 * 1024.0); XBT_DEBUG("migspeed : %f intensity mem : %d", mig_netspeed * 1024 * 1024.0, dp_intensity); @@ -326,24 +319,25 @@ simgrid::s4u::VirtualMachine* sg_vm_create_migratable(simgrid::s4u::Host* pm, co int sg_vm_is_migrating(simgrid::s4u::VirtualMachine* vm) { - return vm->getImpl()->isMigrating; + return vm->get_impl()->is_migrating_; } void sg_vm_migrate(simgrid::s4u::VirtualMachine* vm, simgrid::s4u::Host* dst_pm) { - simgrid::s4u::Host* src_pm = vm->getPm(); + simgrid::s4u::Host* src_pm = vm->get_pm(); if (src_pm->is_off()) THROWF(vm_error, 0, "Cannot migrate VM '%s' from host '%s', which is offline.", vm->get_cname(), src_pm->get_cname()); if (dst_pm->is_off()) THROWF(vm_error, 0, "Cannot migrate VM '%s' to host '%s', which is offline.", vm->get_cname(), dst_pm->get_cname()); - if (vm->getState() != SURF_VM_STATE_RUNNING) + if (vm->get_state() != simgrid::s4u::VirtualMachine::state::RUNNING) THROWF(vm_error, 0, "Cannot migrate VM '%s' that is not running yet.", vm->get_cname()); - if (vm->getImpl()->isMigrating) + if (vm->get_impl()->is_migrating_) THROWF(vm_error, 0, "Cannot migrate VM '%s' that is already migrating.", vm->get_cname()); - vm->getImpl()->isMigrating = true; + vm->get_impl()->is_migrating_ = true; + simgrid::s4u::VirtualMachine::on_migration_start(*vm); std::string rx_name = std::string("__pr_mig_rx:") + vm->get_cname() + "(" + src_pm->get_cname() + "-" + dst_pm->get_cname() + ")"; @@ -365,5 +359,6 @@ void sg_vm_migrate(simgrid::s4u::VirtualMachine* vm, simgrid::s4u::Host* dst_pm) tx->join(); rx->join(); - vm->getImpl()->isMigrating = false; + vm->get_impl()->is_migrating_ = false; + simgrid::s4u::VirtualMachine::on_migration_end(*vm); }