X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/173e6cb373d42d61f6eb620771dc5a2e5492173b..db5adf7439201fb67d1d697b86806d58ace9fe85:/src/plugins/vm/s4u_VirtualMachine.cpp?ds=sidebyside diff --git a/src/plugins/vm/s4u_VirtualMachine.cpp b/src/plugins/vm/s4u_VirtualMachine.cpp index 5917ea2606..8c3963ad60 100644 --- a/src/plugins/vm/s4u_VirtualMachine.cpp +++ b/src/plugins/vm/s4u_VirtualMachine.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2015-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2015-2020. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -44,6 +44,10 @@ VirtualMachine::VirtualMachine(const std::string& name, s4u::Host* physical_host surf_cpu_model_vm->create_cpu(this, speeds, core_amount); if (physical_host->get_pstate() != 0) set_pstate(physical_host->get_pstate()); + + // Real hosts are (only) created through NetZone::create_host(), and this where the on_creation signal is fired. + // VMs are created directly, thus firing the signal here. The right solution is probably to separate Host and VM. + simgrid::s4u::Host::on_creation(*this); } VirtualMachine::~VirtualMachine() @@ -122,14 +126,15 @@ void VirtualMachine::destroy() Host::destroy(); } -simgrid::s4u::Host* VirtualMachine::get_pm() +simgrid::s4u::Host* VirtualMachine::get_pm() const { return pimpl_vm_->get_physical_host(); } -void VirtualMachine::set_pm(simgrid::s4u::Host* pm) +VirtualMachine* VirtualMachine::set_pm(simgrid::s4u::Host* pm) { kernel::actor::simcall([this, pm]() { pimpl_vm_->set_physical_host(pm); }); + return this; } VirtualMachine::state VirtualMachine::get_state() @@ -137,14 +142,15 @@ VirtualMachine::state VirtualMachine::get_state() return kernel::actor::simcall([this]() { return pimpl_vm_->get_state(); }); } -size_t VirtualMachine::get_ramsize() +size_t VirtualMachine::get_ramsize() const { return pimpl_vm_->get_ramsize(); } -void VirtualMachine::set_ramsize(size_t ramsize) +VirtualMachine* VirtualMachine::set_ramsize(size_t ramsize) { pimpl_vm_->set_ramsize(ramsize); + return this; } /** @brief Set a CPU bound for a given VM. * @ingroup msg_VMs @@ -172,9 +178,10 @@ void VirtualMachine::set_ramsize(size_t ramsize) * 2. Note that bound == 0 means no bound (i.e., unlimited). But, if a host has multiple CPU cores, the CPU share of a * computation task (or a VM) never exceeds the capacity of a CPU core. */ -void VirtualMachine::set_bound(double bound) +VirtualMachine* VirtualMachine::set_bound(double bound) { kernel::actor::simcall([this, bound]() { pimpl_vm_->set_bound(bound); }); + return this; } } // namespace simgrid @@ -197,13 +204,13 @@ sg_vm_t sg_vm_create_multicore(sg_host_t pm, const char* name, int coreAmount) return new simgrid::s4u::VirtualMachine(name, pm, coreAmount); } -const char* sg_vm_get_name(sg_vm_t vm) +const char* sg_vm_get_name(const_sg_vm_t vm) { return vm->get_cname(); } /** @brief Get the physical host of a given VM. */ -sg_host_t sg_vm_get_pm(sg_vm_t vm) +sg_host_t sg_vm_get_pm(const_sg_vm_t vm) { return vm->get_pm(); } @@ -213,7 +220,7 @@ void sg_vm_set_ramsize(sg_vm_t vm, size_t size) vm->set_ramsize(size); } -size_t sg_vm_get_ramsize(sg_vm_t vm) +size_t sg_vm_get_ramsize(const_sg_vm_t vm) { return vm->get_ramsize(); } @@ -270,9 +277,14 @@ void sg_vm_resume(sg_vm_t vm) } /** @brief Immediately kills all processes within the given VM. - * Any memory that they allocated will be leaked, unless you used #MSG_process_on_exit(). * - * No extra delay occurs. If you want to simulate this too, you want to use a #MSG_process_sleep(). + @beginrst + + The memory allocated by these actors is leaked, unless you used :cpp:func:`simgrid::s4u::Actor::on_exit`. + + @endrst + * + * No extra delay occurs by default. You may let your actor sleep by a specific amount to simulate any extra delay that you want. */ void sg_vm_shutdown(sg_vm_t vm) {