From d4abf745ddd1a9ad9480003c42964d55ec966f29 Mon Sep 17 00:00:00 2001 From: Bruno Donassolo Date: Tue, 19 Apr 2022 19:13:58 +0200 Subject: [PATCH] Set s4u::VirtualMachine as deprecated Use s4u::Host::create_vm instead. Workaround to keep it working meanwhile. --- include/simgrid/s4u/VirtualMachine.hpp | 7 ++++++- src/kernel/resource/VirtualMachineImpl.cpp | 19 ++++++++++++++++--- src/kernel/resource/VirtualMachineImpl.hpp | 4 +++- src/s4u/s4u_VirtualMachine.cpp | 6 ++++++ src/surf/HostImpl.cpp | 12 ++++++++++-- src/surf/HostImpl.hpp | 1 + 6 files changed, 42 insertions(+), 7 deletions(-) diff --git a/include/simgrid/s4u/VirtualMachine.hpp b/include/simgrid/s4u/VirtualMachine.hpp index c4e7dd3a0a..841e2f3391 100644 --- a/include/simgrid/s4u/VirtualMachine.hpp +++ b/include/simgrid/s4u/VirtualMachine.hpp @@ -47,10 +47,15 @@ class XBT_PUBLIC VirtualMachine : public s4u::Host { #ifndef DOXYGEN friend kernel::resource::VirtualMachineImpl; // calls signals from Impl + friend kernel::resource::HostImpl; // call private constructor + VirtualMachine(kernel::resource::VirtualMachineImpl* impl); #endif public: - explicit VirtualMachine(const std::string& name, Host* physical_host, int core_amount, size_t ramsize); + XBT_ATTRIB_DEPRECATED_v336("Please use s4u::Host::create_vm") explicit VirtualMachine(const std::string& name, + Host* physical_host, + int core_amount, + size_t ramsize = 1024); #ifndef DOXYGEN // No copy/move diff --git a/src/kernel/resource/VirtualMachineImpl.cpp b/src/kernel/resource/VirtualMachineImpl.cpp index 9288d0bc96..9d829dea32 100644 --- a/src/kernel/resource/VirtualMachineImpl.cpp +++ b/src/kernel/resource/VirtualMachineImpl.cpp @@ -184,10 +184,15 @@ Action* VMModel::execute_thread(const s4u::Host* host, double flops_amount, int VirtualMachineImpl::VirtualMachineImpl(const std::string& name, s4u::VirtualMachine* piface, simgrid::s4u::Host* host_PM, int core_amount, size_t ramsize) - : HostImpl(name), piface_(piface), physical_host_(host_PM), core_amount_(core_amount), ramsize_(ramsize) + : VirtualMachineImpl(name, host_PM, core_amount, ramsize) +{ + set_piface(piface); +} + +VirtualMachineImpl::VirtualMachineImpl(const std::string& name, simgrid::s4u::Host* host_PM, int core_amount, + size_t ramsize) + : HostImpl(name), physical_host_(host_PM), core_amount_(core_amount), ramsize_(ramsize) { - /* Register this VM to the list of all VMs */ - allVms_.push_back(piface); /* We create cpu_action corresponding to a VM process on the host operating system. */ /* TODO: we have to periodically input GUESTOS_NOISE to the system? how ? * The value for GUESTOS_NOISE corresponds to the cost of the global action associated to the VM. It corresponds to @@ -200,6 +205,14 @@ VirtualMachineImpl::VirtualMachineImpl(const std::string& name, s4u::VirtualMach XBT_VERB("Create VM(%s)@PM(%s)", name.c_str(), physical_host_->get_cname()); } +void VirtualMachineImpl::set_piface(s4u::VirtualMachine* piface) +{ + xbt_assert(not piface_, "Pointer to interface already configured for this VM (%s)", get_cname()); + piface_ = piface; + /* Register this VM to the list of all VMs */ + allVms_.push_back(piface); +} + /** @brief A physical host does not disappear in the current SimGrid code, but a VM may disappear during a simulation */ void VirtualMachineImpl::vm_destroy() { diff --git a/src/kernel/resource/VirtualMachineImpl.hpp b/src/kernel/resource/VirtualMachineImpl.hpp index c5a4bc0da7..3628c77f0c 100644 --- a/src/kernel/resource/VirtualMachineImpl.hpp +++ b/src/kernel/resource/VirtualMachineImpl.hpp @@ -31,6 +31,8 @@ public: explicit VirtualMachineImpl(const std::string& name, s4u::VirtualMachine* piface, s4u::Host* host, int core_amount, size_t ramsize); + explicit VirtualMachineImpl(const std::string& name, simgrid::s4u::Host* host_PM, int core_amount, size_t ramsize); + void set_piface(s4u::VirtualMachine* piface); void start(); void suspend(const actor::ActorImpl* issuer); @@ -68,7 +70,7 @@ public: void seal() override; private: - s4u::VirtualMachine* piface_; + s4u::VirtualMachine* piface_ = nullptr; Action* action_ = nullptr; unsigned int active_execs_ = 0; s4u::Host* physical_host_; diff --git a/src/s4u/s4u_VirtualMachine.cpp b/src/s4u/s4u_VirtualMachine.cpp index b0bb7576aa..bcb7c1ed21 100644 --- a/src/s4u/s4u_VirtualMachine.cpp +++ b/src/s4u/s4u_VirtualMachine.cpp @@ -35,6 +35,12 @@ void VmHostExt::ensureVmExtInstalled() VirtualMachine::VirtualMachine(const std::string& name, s4u::Host* physical_host, int core_amount, size_t ramsize) : Host(new kernel::resource::VirtualMachineImpl(name, this, physical_host, core_amount, ramsize)) , pimpl_vm_(dynamic_cast(Host::get_impl())) +{ + physical_host->get_impl()->create_vm(name, this); +} + +VirtualMachine::VirtualMachine(kernel::resource::VirtualMachineImpl* impl) + : Host(impl), pimpl_vm_(dynamic_cast(Host::get_impl())) { } diff --git a/src/surf/HostImpl.cpp b/src/surf/HostImpl.cpp index bc4c7de2fa..488aca5f7f 100644 --- a/src/surf/HostImpl.cpp +++ b/src/surf/HostImpl.cpp @@ -140,7 +140,14 @@ std::vector HostImpl::get_disks() const s4u::VirtualMachine* HostImpl::create_vm(const std::string& name, int core_amount, size_t ramsize) { - auto* vm = new s4u::VirtualMachine(name, get_iface(), core_amount, ramsize); + auto* host_vm = new kernel::resource::VirtualMachineImpl(name, get_iface(), core_amount, ramsize); + auto* vm = new s4u::VirtualMachine(host_vm); + host_vm->set_piface(vm); + return create_vm(name, vm); +} + +s4u::VirtualMachine* HostImpl::create_vm(const std::string& name, s4u::VirtualMachine* vm) +{ vms_[name] = vm->get_vm_impl(); // Create a VCPU for this VM @@ -148,7 +155,8 @@ s4u::VirtualMachine* HostImpl::create_vm(const std::string& name, int core_amoun for (unsigned long i = 0; i < get_iface()->get_pstate_count(); i++) speeds.push_back(get_iface()->get_pstate_speed(i)); - auto* cpu = englobing_zone_->get_cpu_vm_model()->create_cpu(vm, speeds)->set_core_count(core_amount); + auto* cpu = + englobing_zone_->get_cpu_vm_model()->create_cpu(vm, speeds)->set_core_count(vm->get_vm_impl()->get_core_amount()); if (get_iface()->get_pstate() != 0) cpu->set_pstate(get_iface()->get_pstate()); diff --git a/src/surf/HostImpl.hpp b/src/surf/HostImpl.hpp index 944844b2c2..d82906db54 100644 --- a/src/surf/HostImpl.hpp +++ b/src/surf/HostImpl.hpp @@ -67,6 +67,7 @@ public: std::vector get_disks() const; s4u::Disk* create_disk(const std::string& name, double read_bandwidth, double write_bandwidth); s4u::VirtualMachine* create_vm(const std::string& name, int core_amount, size_t ramsize = 1024); + s4u::VirtualMachine* create_vm(const std::string& name, s4u::VirtualMachine* vm); void destroy_vm(const std::string& name); void add_disk(const s4u::Disk* disk); void remove_disk(const std::string& name); -- 2.20.1