From 0bd63b2cefa5b0dc0de3d7d00c2e8b68e95e00dd Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Fri, 21 Oct 2016 18:55:50 +0200 Subject: [PATCH] Create a s4u::VirtualMachine to clean things out. This is still to be populated, with the content of the msg_vm module. --- include/simgrid/s4u/VirtualMachine.hpp | 45 ++++++++++++++++++++++++++ include/simgrid/s4u/host.hpp | 11 +++++-- src/s4u/s4u_VirtualMachine.cpp | 39 ++++++++++++++++++++++ src/s4u/s4u_host.cpp | 4 +-- src/surf/VirtualMachineImpl.cpp | 13 ++++---- src/surf/VirtualMachineImpl.hpp | 2 +- tools/cmake/DefinePackages.cmake | 2 ++ 7 files changed, 104 insertions(+), 12 deletions(-) create mode 100644 include/simgrid/s4u/VirtualMachine.hpp create mode 100644 src/s4u/s4u_VirtualMachine.cpp diff --git a/include/simgrid/s4u/VirtualMachine.hpp b/include/simgrid/s4u/VirtualMachine.hpp new file mode 100644 index 0000000000..968090b051 --- /dev/null +++ b/include/simgrid/s4u/VirtualMachine.hpp @@ -0,0 +1,45 @@ +/* Copyright (c) 2015-2016. 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. */ + +#ifndef SIMGRID_S4U_VM_HPP +#define SIMGRID_S4U_VM_HPP + +#include +#include +#include + +namespace simgrid { + +namespace s4u { + +/** @ingroup s4u_api + * + * @tableofcontents + * + * A VM is a virtual machine that contains actors. The total computing power that the contained + * processes can get is constrained to the virtual machine size. + * + */ +XBT_PUBLIC_CLASS VirtualMachine : public s4u::Host +{ + +public: + explicit VirtualMachine(const char* name, s4u::Host* hostPm); + + // No copy/move + VirtualMachine(VirtualMachine const&) = delete; + VirtualMachine& operator=(VirtualMachine const&) = delete; + +private: + virtual ~VirtualMachine(); + +public: + void parameters(vm_params_t params) override; + void setParameters(vm_params_t params) override; +}; +} +} // namespace simgrid::s4u + +#endif /* SIMGRID_S4U_HOST_HPP */ diff --git a/include/simgrid/s4u/host.hpp b/include/simgrid/s4u/host.hpp index ac7174d64c..b197b726e6 100644 --- a/include/simgrid/s4u/host.hpp +++ b/include/simgrid/s4u/host.hpp @@ -46,11 +46,16 @@ public: explicit Host(const char *name); /** Host destruction logic */ +protected: + virtual ~Host(); + private: - ~Host(); bool currentlyDestroying_ = false; public: void destroy(); + // No copy/move + Host(Host const&) = delete; + Host& operator=(Host const&) = delete; /** Retrieves an host from its name, or return nullptr */ static Host* by_name_or_null(const char* name); @@ -85,8 +90,8 @@ public: int pstatesCount() const; void setPstate(int pstate_index); int pstate(); - void parameters(vm_params_t params); - void setParameters(vm_params_t params); + virtual void parameters(vm_params_t params); + virtual void setParameters(vm_params_t params); xbt_dict_t mountedStoragesAsDict(); // HACK xbt_dynar_t attachedStorages(); diff --git a/src/s4u/s4u_VirtualMachine.cpp b/src/s4u/s4u_VirtualMachine.cpp new file mode 100644 index 0000000000..1b3872ced6 --- /dev/null +++ b/src/s4u/s4u_VirtualMachine.cpp @@ -0,0 +1,39 @@ +/* Copyright (c) 2015-2016. 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. */ + +#include "simgrid/datatypes.h" +#include "simgrid/s4u/VirtualMachine.hpp" +#include "simgrid/s4u/host.hpp" +#include "simgrid/simix.hpp" +#include "src/surf/HostImpl.hpp" +#include "src/surf/VirtualMachineImpl.hpp" +#include "xbt/asserts.h" + +namespace simgrid { + +namespace s4u { + +VirtualMachine::VirtualMachine(const char* name, s4u::Host* Pm) : Host(name) +{ + pimpl_ = new surf::VirtualMachineImpl(this, Pm); +} + +VirtualMachine::~VirtualMachine() +{ + onDestruction(*this); +} + +void VirtualMachine::parameters(vm_params_t params) +{ + this->pimpl_->getParams(params); +} + +void VirtualMachine::setParameters(vm_params_t params) +{ + simgrid::simix::kernelImmediate([&]() { this->pimpl_->setParams(params); }); +} + +} // namespace simgrid +} // namespace s4u diff --git a/src/s4u/s4u_host.cpp b/src/s4u/s4u_host.cpp index 79cc9fc924..ae52217f91 100644 --- a/src/s4u/s4u_host.cpp +++ b/src/s4u/s4u_host.cpp @@ -196,12 +196,12 @@ int Host::pstate() void Host::parameters(vm_params_t params) { - simgrid::simix::kernelImmediate([&]() { this->pimpl_->getParams(params); }); + THROW_IMPOSSIBLE; // This should only be used on VMs } void Host::setParameters(vm_params_t params) { - simgrid::simix::kernelImmediate([&]() { this->pimpl_->setParams(params); }); + THROW_IMPOSSIBLE; // This should only be used on VMs } /** diff --git a/src/surf/VirtualMachineImpl.cpp b/src/surf/VirtualMachineImpl.cpp index 624465e452..be319267a0 100644 --- a/src/surf/VirtualMachineImpl.cpp +++ b/src/surf/VirtualMachineImpl.cpp @@ -4,7 +4,8 @@ /* 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. */ -#include "VirtualMachineImpl.hpp" +#include "src/surf/VirtualMachineImpl.hpp" +#include "simgrid/s4u/VirtualMachine.hpp" #include @@ -41,8 +42,7 @@ std::deque VirtualMachineImpl::allVms_; s4u::Host* VMModel::createVM(const char* name, sg_host_t host_PM) { - VirtualMachineImpl* vm = new VirtualMachineImpl(name, host_PM); - return vm->piface_; + return new s4u::VirtualMachine(name, host_PM); } /* In the real world, processes on the guest operating system will be somewhat degraded due to virtualization overhead. @@ -103,8 +103,8 @@ double VMModel::nextOccuringEvent(double now) * Resource * ************/ -VirtualMachineImpl::VirtualMachineImpl(const char* name, simgrid::s4u::Host* host_PM) - : HostImpl(new simgrid::s4u::Host(name), nullptr /*storage*/), hostPM_(host_PM) +VirtualMachineImpl::VirtualMachineImpl(simgrid::s4u::Host* piface, simgrid::s4u::Host* host_PM) + : HostImpl(piface, nullptr /*storage*/), hostPM_(host_PM) { /* Register this VM to the list of all VMs */ allVms_.push_back(this); @@ -129,7 +129,8 @@ VirtualMachineImpl::VirtualMachineImpl(const char* name, simgrid::s4u::Host* hos /* FIXME: TODO: we have to periodically input GUESTOS_NOISE to the system? how ? */ action_ = sub_cpu->execution_start(0); - XBT_VERB("Create VM(%s)@PM(%s) with %ld mounted disks", name, hostPM_->name().c_str(), xbt_dynar_length(storage_)); + XBT_VERB("Create VM(%s)@PM(%s) with %ld mounted disks", piface->name().c_str(), hostPM_->name().c_str(), + xbt_dynar_length(storage_)); } /* diff --git a/src/surf/VirtualMachineImpl.hpp b/src/surf/VirtualMachineImpl.hpp index aa216e7706..99faa0b7f2 100644 --- a/src/surf/VirtualMachineImpl.hpp +++ b/src/surf/VirtualMachineImpl.hpp @@ -56,7 +56,7 @@ extern XBT_PRIVATE simgrid::xbt::signal