Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Create a s4u::VirtualMachine to clean things out.
authorMartin Quinson <martin.quinson@loria.fr>
Fri, 21 Oct 2016 16:55:50 +0000 (18:55 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Fri, 21 Oct 2016 20:07:49 +0000 (22:07 +0200)
This is still to be populated, with the content of the msg_vm module.

include/simgrid/s4u/VirtualMachine.hpp [new file with mode: 0644]
include/simgrid/s4u/host.hpp
src/s4u/s4u_VirtualMachine.cpp [new file with mode: 0644]
src/s4u/s4u_host.cpp
src/surf/VirtualMachineImpl.cpp
src/surf/VirtualMachineImpl.hpp
tools/cmake/DefinePackages.cmake

diff --git a/include/simgrid/s4u/VirtualMachine.hpp b/include/simgrid/s4u/VirtualMachine.hpp
new file mode 100644 (file)
index 0000000..968090b
--- /dev/null
@@ -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 <simgrid/s4u/forward.hpp>
+#include <simgrid/s4u/host.hpp>
+#include <xbt/base.h>
+
+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 */
index ac7174d..b197b72 100644 (file)
@@ -46,11 +46,16 @@ public:
   explicit Host(const char *name);
 
   /** Host destruction logic */
   explicit Host(const char *name);
 
   /** Host destruction logic */
+protected:
+  virtual ~Host();
+
 private:
 private:
-  ~Host();
   bool currentlyDestroying_ = false;
 public:
   void destroy();
   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);
 
   /** 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();
   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();
 
   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 (file)
index 0000000..1b3872c
--- /dev/null
@@ -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
index 79cc9fc..ae52217 100644 (file)
@@ -196,12 +196,12 @@ int Host::pstate()
 
 void Host::parameters(vm_params_t params)
 {
 
 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)
 {
 }
 
 void Host::setParameters(vm_params_t params)
 {
-  simgrid::simix::kernelImmediate([&]() { this->pimpl_->setParams(params); });
+  THROW_IMPOSSIBLE; // This should only be used on VMs
 }
 
 /**
 }
 
 /**
index 624465e..be31926 100644 (file)
@@ -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. */
 
 /* 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 <xbt/signal.hpp>
 
 
 #include <xbt/signal.hpp>
 
@@ -41,8 +42,7 @@ std::deque<VirtualMachineImpl*> VirtualMachineImpl::allVms_;
 
 s4u::Host* VMModel::createVM(const char* name, sg_host_t host_PM)
 {
 
 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.
 }
 
 /* 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 *
  ************/
 
  * 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);
 {
   /* 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);
 
   /* 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_));
 }
 
 /*
 }
 
 /*
index aa216e7..99faa0b 100644 (file)
@@ -56,7 +56,7 @@ extern XBT_PRIVATE simgrid::xbt::signal<void(simgrid::surf::VirtualMachineImpl*)
  */
 class VirtualMachineImpl : public HostImpl {
 public:
  */
 class VirtualMachineImpl : public HostImpl {
 public:
-  VirtualMachineImpl(const char* name, simgrid::s4u::Host* host);
+  VirtualMachineImpl(s4u::Host* piface, s4u::Host* host);
   ~VirtualMachineImpl();
 
   /** @brief Suspend the VM */
   ~VirtualMachineImpl();
 
   /** @brief Suspend the VM */
index 73b3005..de42ac2 100644 (file)
@@ -391,6 +391,7 @@ set(S4U_SRC
   src/s4u/s4u_mutex.cpp
   src/s4u/s4u_conditionVariable.cpp
   src/s4u/s4u_storage.cpp
   src/s4u/s4u_mutex.cpp
   src/s4u/s4u_conditionVariable.cpp
   src/s4u/s4u_storage.cpp
+  src/s4u/s4u_VirtualMachine.cpp
 )
 
 set(SIMGRID_SRC
 )
 
 set(SIMGRID_SRC
@@ -653,6 +654,7 @@ set(headers_to_install
   include/simgrid/s4u/Mutex.hpp
   include/simgrid/s4u/conditionVariable.hpp
   include/simgrid/s4u/storage.hpp  
   include/simgrid/s4u/Mutex.hpp
   include/simgrid/s4u/conditionVariable.hpp
   include/simgrid/s4u/storage.hpp  
+  include/simgrid/s4u/VirtualMachine.hpp  
   include/simgrid/s4u.hpp
   include/simgrid/plugins/energy.h
   include/smpi/mpi.h
   include/simgrid/s4u.hpp
   include/simgrid/plugins/energy.h
   include/smpi/mpi.h