Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Reorganize VM code
authorSUTER Frederic <frederic.suter@cc.in2p3.fr>
Thu, 4 Nov 2021 10:52:54 +0000 (11:52 +0100)
committerSUTER Frederic <frederic.suter@cc.in2p3.fr>
Thu, 4 Nov 2021 10:52:54 +0000 (11:52 +0100)
After 8 years of probation, let's consider VM as an actual part of S4U
rather than as a plugin. This change should be transparent for the
users.

+ Only the Live Migration and its dirty page tracking mechanisms remain
plugins.
+ The user interface has been moved to src/s4u and the kernel
counterpart to src/kernel/resource.
+ The simgrid::vm namespace doesn't exist anymore, but the live
migration stuff is in simgrid::plugin::vm
+ The contents of VmHostExt.* has been merged to
s4u_VirtualMachine.cpp and VirtualMachine.hpp as this extension is
always needed.
+ Cleanup a bit the namespaces too

20 files changed:
MANIFEST.in
include/simgrid/forward.h
include/simgrid/s4u/Host.hpp
include/simgrid/s4u/VirtualMachine.hpp
src/bindings/java/jmsg_vm.cpp
src/kernel/resource/VirtualMachineImpl.cpp [moved from src/plugins/vm/VirtualMachineImpl.cpp with 95% similarity]
src/kernel/resource/VirtualMachineImpl.hpp [moved from src/plugins/vm/VirtualMachineImpl.hpp with 79% similarity]
src/plugins/vm/VmHostExt.cpp [deleted file]
src/plugins/vm/VmHostExt.hpp [deleted file]
src/plugins/vm/VmLiveMigration.cpp
src/plugins/vm/VmLiveMigration.hpp
src/plugins/vm/dirty_page_tracking.cpp [moved from src/plugins/dirty_page_tracking.cpp with 63% similarity]
src/s4u/s4u_Host.cpp
src/s4u/s4u_VirtualMachine.cpp [moved from src/plugins/vm/s4u_VirtualMachine.cpp with 85% similarity]
src/simix/libsmx.cpp
src/surf/HostImpl.cpp
src/surf/HostImpl.hpp
src/surf/cpu_interface.hpp
src/surf/surf_c_bindings.cpp
tools/cmake/DefinePackages.cmake

index db4e029..2f4a23a 100644 (file)
@@ -2268,6 +2268,8 @@ include src/kernel/resource/DiskImpl.hpp
 include src/kernel/resource/Model.cpp
 include src/kernel/resource/NetworkModelIntf_test.cpp
 include src/kernel/resource/Resource.hpp
+include src/kernel/resource/VirtualMachineImpl.cpp
+include src/kernel/resource/VirtualMachineImpl.hpp
 include src/kernel/resource/profile/DatedValue.cpp
 include src/kernel/resource/profile/DatedValue.hpp
 include src/kernel/resource/profile/Event.hpp
@@ -2392,7 +2394,6 @@ include src/msg/msg_private.hpp
 include src/msg/msg_process.cpp
 include src/msg/msg_task.cpp
 include src/plugins/ProducerConsumer.cpp
-include src/plugins/dirty_page_tracking.cpp
 include src/plugins/file_system/s4u_FileSystem.cpp
 include src/plugins/host_dvfs.cpp
 include src/plugins/host_energy.cpp
@@ -2400,13 +2401,9 @@ include src/plugins/host_load.cpp
 include src/plugins/link_energy.cpp
 include src/plugins/link_energy_wifi.cpp
 include src/plugins/link_load.cpp
-include src/plugins/vm/VirtualMachineImpl.cpp
-include src/plugins/vm/VirtualMachineImpl.hpp
-include src/plugins/vm/VmHostExt.cpp
-include src/plugins/vm/VmHostExt.hpp
 include src/plugins/vm/VmLiveMigration.cpp
 include src/plugins/vm/VmLiveMigration.hpp
-include src/plugins/vm/s4u_VirtualMachine.cpp
+include src/plugins/vm/dirty_page_tracking.cpp
 include src/s4u/s4u_Activity.cpp
 include src/s4u/s4u_Actor.cpp
 include src/s4u/s4u_Barrier.cpp
@@ -2422,6 +2419,7 @@ include src/s4u/s4u_Mailbox.cpp
 include src/s4u/s4u_Mutex.cpp
 include src/s4u/s4u_Netzone.cpp
 include src/s4u/s4u_Semaphore.cpp
+include src/s4u/s4u_VirtualMachine.cpp
 include src/simdag/dax.dtd
 include src/simdag/dax_dtd.c
 include src/simdag/dax_dtd.h
index be54d3d..64f9183 100644 (file)
@@ -176,6 +176,8 @@ class LinkImplIntf;
 class NetworkAction;
 class DiskImpl;
 class DiskModel;
+class VirtualMachineImpl;
+class VMModel;
 }
 namespace timer {
 class Timer;
@@ -197,10 +199,6 @@ namespace surf {
 namespace mc {
 class CommunicationDeterminismChecker;
 }
-namespace vm {
-class VMModel;
-class VirtualMachineImpl;
-} // namespace vm
 } // namespace simgrid
 
 using s4u_Actor             = simgrid::s4u::Actor;
index b3b1821..7be79dc 100644 (file)
@@ -37,8 +37,8 @@ namespace s4u {
  */
 class XBT_PUBLIC Host : public xbt::Extendable<Host> {
 #ifndef DOXYGEN
-  friend vm::VMModel;            // Use the pimpl_cpu to compute the VM sharing
-  friend vm::VirtualMachineImpl; // creates the the pimpl_cpu
+  friend kernel::resource::VMModel;            // Use the pimpl_cpu to compute the VM sharing
+  friend kernel::resource::VirtualMachineImpl; // creates the the pimpl_cpu
   friend kernel::routing::NetZoneImpl;
   friend surf::HostImpl; // call destructor from private implementation
 
index 73f03e5..d1c7a84 100644 (file)
 namespace simgrid {
 namespace s4u {
 
+/** @brief Host extension for the VMs */
+class VmHostExt {
+public:
+  static xbt::Extension<s4u::Host, VmHostExt> EXTENSION_ID;
+
+  sg_size_t ramsize = 0;    /* available ramsize (0= not taken into account) */
+  bool overcommit   = true; /* Whether the host allows overcommiting more VM than the avail ramsize allows */
+  static void ensureVmExtInstalled();
+};
+
 /** @ingroup s4u_api
  *
  * @tableofcontents
@@ -22,7 +32,7 @@ namespace s4u {
  *
  */
 class XBT_PUBLIC VirtualMachine : public s4u::Host {
-  vm::VirtualMachineImpl* const pimpl_vm_;
+  kernel::resource::VirtualMachineImpl* const pimpl_vm_;
 
 public:
   explicit VirtualMachine(const std::string& name, Host* physical_host, int core_amount);
@@ -45,7 +55,7 @@ public:
   using state XBT_ATTRIB_DEPRECATED_v332("Please use VirtualMachine::State") = State;
 #endif
 
-  vm::VirtualMachineImpl* get_vm_impl() const { return pimpl_vm_; }
+  kernel::resource::VirtualMachineImpl* get_vm_impl() const { return pimpl_vm_; }
   void start();
   void suspend();
   void resume();
index af947a2..ed2126b 100644 (file)
@@ -11,7 +11,7 @@
 #include "simgrid/Exception.hpp"
 #include "simgrid/plugins/live_migration.h"
 #include "src/kernel/context/Context.hpp"
-#include "src/plugins/vm/VirtualMachineImpl.hpp"
+#include "src/kernel/resource/VirtualMachineImpl.hpp"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(java);
 
@@ -141,7 +141,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_VM_destroy(JNIEnv* env, jobject jvm)
   sg_vm_t vm = jvm_get_native(env, jvm);
   if (vm) {
     sg_vm_destroy(vm);
-    auto* vmList = &simgrid::vm::VirtualMachineImpl::allVms_;
+    auto* vmList = &simgrid::kernel::resource::VirtualMachineImpl::allVms_;
     vmList->erase(std::remove(vmList->begin(), vmList->end(), vm), vmList->end());
   }
 }
similarity index 95%
rename from src/plugins/vm/VirtualMachineImpl.cpp
rename to src/kernel/resource/VirtualMachineImpl.cpp
index e615852..d0162ce 100644 (file)
@@ -10,7 +10,7 @@
 #include "simgrid/sg_config.hpp"
 #include "src/kernel/EngineImpl.hpp"
 #include "src/kernel/activity/ExecImpl.hpp"
-#include "src/plugins/vm/VirtualMachineImpl.hpp"
+#include "src/kernel/resource/VirtualMachineImpl.hpp"
 #include "src/surf/cpu_cas01.hpp"
 #include "src/surf/cpu_ti.hpp"
 
@@ -18,7 +18,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(res_vm, ker_resource, "Virtual Machines, contain
 
 void surf_vm_model_init_HL13(simgrid::kernel::resource::CpuModel* cpu_pm_model)
 {
-  auto vm_model = std::make_shared<simgrid::vm::VMModel>("VM_HL13");
+  auto vm_model = std::make_shared<simgrid::kernel::resource::VMModel>("VM_HL13");
   auto* engine  = simgrid::kernel::EngineImpl::get_instance();
 
   engine->add_model(vm_model, {cpu_pm_model});
@@ -35,10 +35,10 @@ void surf_vm_model_init_HL13(simgrid::kernel::resource::CpuModel* cpu_pm_model)
 }
 
 namespace simgrid {
+template class xbt::Extendable<kernel::resource::VirtualMachineImpl>;
 
-template class xbt::Extendable<vm::VirtualMachineImpl>;
-
-namespace vm {
+namespace kernel {
+namespace resource {
 
 /*********
  * Model *
@@ -116,8 +116,8 @@ VMModel::VMModel(const std::string& name) : HostModel(name)
   s4u::Host::on_state_change.connect(host_state_change);
   s4u::Exec::on_start.connect(add_active_exec);
   s4u::Exec::on_completion.connect(remove_active_exec);
-  kernel::activity::ActivityImpl::on_resumed.connect(add_active_activity);
-  kernel::activity::ActivityImpl::on_suspended.connect(remove_active_activity);
+  activity::ActivityImpl::on_resumed.connect(add_active_activity);
+  activity::ActivityImpl::on_suspended.connect(remove_active_activity);
 }
 
 double VMModel::next_occurring_event(double now)
@@ -157,7 +157,7 @@ double VMModel::next_occurring_event(double now)
     double solved_value = ws_vm->get_vm_impl()->get_action()->get_rate();
     XBT_DEBUG("assign %f to vm %s @ pm %s", solved_value, ws_vm->get_cname(), ws_vm->get_pm()->get_cname());
 
-    kernel::lmm::System* vcpu_system = cpu->get_model()->get_maxmin_system();
+    lmm::System* vcpu_system = cpu->get_model()->get_maxmin_system();
     vcpu_system->update_constraint_bound(cpu->get_constraint(), virt_overhead * solved_value);
   }
   /* actual next occurring event is determined by VM CPU model at surf_solve */
@@ -288,7 +288,7 @@ void VirtualMachineImpl::set_physical_host(s4u::Host* destination)
 
   /* Update vcpu's action for the new pm */
   /* create a cpu action bound to the pm model at the destination. */
-  kernel::resource::CpuAction* new_cpu_action = destination->get_cpu()->execution_start(0, this->core_amount_);
+  CpuAction* new_cpu_action = destination->get_cpu()->execution_start(0, this->core_amount_);
 
   if (action_->get_remains_no_update() > 0)
     XBT_CRITICAL("FIXME: need copy the state(?), %f", action_->get_remains_no_update());
@@ -330,5 +330,6 @@ void VirtualMachineImpl::update_action_weight()
   action_->set_bound(std::min(impact * physical_host_->get_speed(), user_bound_));
 }
 
-} // namespace vm
+} // namespace resource
+} // namespace kernel
 } // namespace simgrid
similarity index 79%
rename from src/plugins/vm/VirtualMachineImpl.hpp
rename to src/kernel/resource/VirtualMachineImpl.hpp
index 5104288..6ab458f 100644 (file)
 
 namespace simgrid {
 
-extern template class XBT_PUBLIC xbt::Extendable<vm::VirtualMachineImpl>;
+extern template class XBT_PUBLIC xbt::Extendable<kernel::resource::VirtualMachineImpl>;
 
-namespace vm {
+namespace kernel {
+namespace resource {
 
 /************
  * Resource *
  ************/
 
-/** @ingroup SURF_vm_interface
- * @brief SURF VM interface class
- * @details A VM represent a virtual machine
- */
-class XBT_PUBLIC VirtualMachineImpl : public surf::HostImpl, public simgrid::xbt::Extendable<VirtualMachineImpl> {
+class XBT_PUBLIC VirtualMachineImpl : public surf::HostImpl, public xbt::Extendable<VirtualMachineImpl> {
 #ifndef DOXYGEN
-  friend simgrid::s4u::VirtualMachine;
+  friend s4u::VirtualMachine;
 #endif
 
 public:
@@ -35,7 +32,7 @@ public:
   explicit VirtualMachineImpl(const std::string& name, s4u::VirtualMachine* piface, s4u::Host* host, int core_amount,
                               size_t ramsize);
 
-  void suspend(kernel::actor::ActorImpl* issuer);
+  void suspend(actor::ActorImpl* issuer);
   void resume();
   void shutdown(kernel::actor::ActorImpl* issuer);
   void vm_destroy();
@@ -52,7 +49,7 @@ public:
   void set_state(s4u::VirtualMachine::State state) { vm_state_ = state; }
 
   unsigned int get_core_amount() const { return core_amount_; }
-  kernel::resource::Action* get_action() const { return action_; }
+  Action* get_action() const { return action_; }
 
   const s4u::VirtualMachine* get_iface() const override { return piface_; }
   s4u::VirtualMachine* get_iface() override { return piface_; }
@@ -70,8 +67,8 @@ public:
 
 private:
   s4u::VirtualMachine* piface_;
-  kernel::resource::Action* action_ = nullptr;
-  unsigned int active_execs_        = 0;
+  Action* action_            = nullptr;
+  unsigned int active_execs_ = 0;
   s4u::Host* physical_host_;
   unsigned int core_amount_;
   double user_bound_                   = std::numeric_limits<double>::max();
@@ -93,13 +90,14 @@ public:
 
   double next_occurring_event(double now) override;
   void update_actions_state(double /*now*/, double /*delta*/) override{};
-  kernel::resource::Action* execute_parallel(const std::vector<s4u::Host*>& host_list, const double* flops_amount,
-                                             const double* bytes_amount, double rate) override
+  Action* execute_parallel(const std::vector<s4u::Host*>& host_list, const double* flops_amount,
+                           const double* bytes_amount, double rate) override
   {
     return nullptr;
   };
 };
-} // namespace vm
+} // namespace resource
+} // namespace kernel
 } // namespace simgrid
 
 #endif /* VM_INTERFACE_HPP_ */
diff --git a/src/plugins/vm/VmHostExt.cpp b/src/plugins/vm/VmHostExt.cpp
deleted file mode 100644 (file)
index 454e8e1..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Copyright (c) 2013-2021. 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 "src/plugins/vm/VmHostExt.hpp"
-
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(res_vm);
-
-namespace simgrid {
-namespace vm {
-simgrid::xbt::Extension<s4u::Host, VmHostExt> VmHostExt::EXTENSION_ID;
-
-void VmHostExt::ensureVmExtInstalled()
-{
-  if (not EXTENSION_ID.valid())
-    EXTENSION_ID = simgrid::s4u::Host::extension_create<VmHostExt>();
-}
-} // namespace vm
-} // namespace simgrid
diff --git a/src/plugins/vm/VmHostExt.hpp b/src/plugins/vm/VmHostExt.hpp
deleted file mode 100644 (file)
index 624eb20..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright (c) 2004-2021. 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 "src/surf/HostImpl.hpp"
-
-#ifndef VM_HOST_INFO_HPP_
-#define VM_HOST_INFO_HPP_
-
-namespace simgrid {
-namespace vm {
-/** @brief Host extension for the VMs */
-class VmHostExt {
-public:
-  static simgrid::xbt::Extension<simgrid::s4u::Host, VmHostExt> EXTENSION_ID;
-
-  sg_size_t ramsize = 0;    /* available ramsize (0= not taken into account) */
-  bool overcommit   = true; /* Whether the host allows overcommiting more VM than the avail ramsize allows */
-
-  static void ensureVmExtInstalled();
-};
-} // namespace vm
-} // namespace simgrid
-
-#endif /* VM_HOST_INFO_HPP_ */
index 6f7413d..3dce9fb 100644 (file)
@@ -5,14 +5,14 @@
 
 #include <simgrid/Exception.hpp>
 
-#include "src/plugins/vm/VmLiveMigration.hpp"
 #include "src/instr/instr_private.hpp"
-#include "src/plugins/vm/VirtualMachineImpl.hpp"
-#include "src/plugins/vm/VmHostExt.hpp"
+#include "src/kernel/resource/VirtualMachineImpl.hpp"
+#include "src/plugins/vm/VmLiveMigration.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(vm_live_migration, s4u, "S4U virtual machines live migration");
 
 namespace simgrid {
+namespace plugin {
 namespace vm {
 xbt::Extension<s4u::Host, VmMigrationExt> VmMigrationExt::EXTENSION_ID;
 
@@ -271,14 +271,17 @@ void MigrationTx::operator()()
   XBT_DEBUG("mig: tx_done");
 }
 } // namespace vm
+} // namespace plugin
 } // namespace simgrid
 
+using simgrid::plugin::vm::VmMigrationExt;
+
 static void onVirtualMachineShutdown(simgrid::s4u::VirtualMachine const& vm)
 {
   if (vm.get_vm_impl()->is_migrating()) {
-    vm.extension<simgrid::vm::VmMigrationExt>()->rx_->kill();
-    vm.extension<simgrid::vm::VmMigrationExt>()->tx_->kill();
-    vm.extension<simgrid::vm::VmMigrationExt>()->issuer_->kill();
+    vm.extension<VmMigrationExt>()->rx_->kill();
+    vm.extension<VmMigrationExt>()->tx_->kill();
+    vm.extension<VmMigrationExt>()->issuer_->kill();
     vm.get_vm_impl()->end_migration();
   }
 }
@@ -286,14 +289,14 @@ static void onVirtualMachineShutdown(simgrid::s4u::VirtualMachine const& vm)
 void sg_vm_live_migration_plugin_init()
 {
   sg_vm_dirty_page_tracking_init();
-  simgrid::vm::VmMigrationExt::ensureVmMigrationExtInstalled();
+  VmMigrationExt::ensureVmMigrationExtInstalled();
   simgrid::s4u::VirtualMachine::on_shutdown.connect(&onVirtualMachineShutdown);
 }
 
 simgrid::s4u::VirtualMachine* sg_vm_create_migratable(simgrid::s4u::Host* pm, const char* name, int coreAmount,
                                                       int ramsize, int mig_netspeed, int dp_intensity)
 {
-  simgrid::vm::VmHostExt::ensureVmExtInstalled();
+  simgrid::s4u::VmHostExt::ensureVmExtInstalled();
 
   /* For the moment, intensity_rate is the percentage against the migration bandwidth */
 
@@ -342,11 +345,11 @@ void sg_vm_migrate(simgrid::s4u::VirtualMachine* vm, simgrid::s4u::Host* dst_pm)
       std::string("__pr_mig_tx:") + vm->get_cname() + "(" + src_pm->get_cname() + "-" + dst_pm->get_cname() + ")";
 
   simgrid::s4u::ActorPtr rx =
-      simgrid::s4u::Actor::create(rx_name.c_str(), dst_pm, simgrid::vm::MigrationRx(vm, dst_pm));
+      simgrid::s4u::Actor::create(rx_name.c_str(), dst_pm, simgrid::plugin::vm::MigrationRx(vm, dst_pm));
   simgrid::s4u::ActorPtr tx =
-      simgrid::s4u::Actor::create(tx_name.c_str(), src_pm, simgrid::vm::MigrationTx(vm, dst_pm));
+      simgrid::s4u::Actor::create(tx_name.c_str(), src_pm, simgrid::plugin::vm::MigrationTx(vm, dst_pm));
 
-  vm->extension_set<simgrid::vm::VmMigrationExt>(new simgrid::vm::VmMigrationExt(simgrid::s4u::Actor::self(), rx, tx));
+  vm->extension_set<VmMigrationExt>(new VmMigrationExt(simgrid::s4u::Actor::self(), rx, tx));
 
   /* wait until the migration have finished or on error has occurred */
   XBT_DEBUG("wait for reception of the final ACK (i.e. migration has been correctly performed");
index a9a2755..169b8b6 100644 (file)
 #define VM_LIVE_MIGRATION_HPP_
 
 namespace simgrid {
+namespace plugin {
 namespace vm {
 class VmMigrationExt {
 public:
   s4u::ActorPtr issuer_ = nullptr;
   s4u::ActorPtr tx_     = nullptr;
   s4u::ActorPtr rx_     = nullptr;
-  static simgrid::xbt::Extension<simgrid::s4u::Host, VmMigrationExt> EXTENSION_ID;
+  static xbt::Extension<s4u::Host, VmMigrationExt> EXTENSION_ID;
   explicit VmMigrationExt(s4u::ActorPtr issuer, s4u::ActorPtr rx, s4u::ActorPtr tx) : issuer_(issuer), tx_(tx), rx_(rx)
   {
   }
@@ -64,6 +65,7 @@ public:
   void operator()();
   sg_size_t sendMigrationData(sg_size_t size, int stage, int stage2_round, double mig_speed, double timeout);
 };
-}
-}
+} // namespace vm
+} // namespace plugin
+} // namespace simgrid
 #endif
similarity index 63%
rename from src/plugins/dirty_page_tracking.cpp
rename to src/plugins/vm/dirty_page_tracking.cpp
index 18f435e..501e3be 100644 (file)
@@ -8,9 +8,10 @@
 #include <simgrid/s4u/VirtualMachine.hpp>
 
 #include "src/kernel/activity/ExecImpl.hpp"
-#include "src/plugins/vm/VirtualMachineImpl.hpp"
+#include "src/kernel/resource/VirtualMachineImpl.hpp"
 
 namespace simgrid {
+namespace plugin {
 namespace vm {
 class DirtyPageTrackingExt {
   bool dp_tracking_ = false;
@@ -39,11 +40,11 @@ public:
   double get_migration_speed() const { return mig_speed_; }
   double get_max_downtime() const { return max_downtime_; }
 
-  static simgrid::xbt::Extension<VirtualMachineImpl, DirtyPageTrackingExt> EXTENSION_ID;
-  DirtyPageTrackingExt()          = default;
+  static simgrid::xbt::Extension<kernel::resource::VirtualMachineImpl, DirtyPageTrackingExt> EXTENSION_ID;
+  DirtyPageTrackingExt() = default;
 };
 
-simgrid::xbt::Extension<VirtualMachineImpl, DirtyPageTrackingExt> DirtyPageTrackingExt::EXTENSION_ID;
+simgrid::xbt::Extension<kernel::resource::VirtualMachineImpl, DirtyPageTrackingExt> DirtyPageTrackingExt::EXTENSION_ID;
 
 void DirtyPageTrackingExt::start_tracking()
 {
@@ -67,11 +68,14 @@ double DirtyPageTrackingExt::computed_flops_lookup()
   return total;
 }
 } // namespace vm
+} // namespace plugin
 } // namespace simgrid
 
+using simgrid::plugin::vm::DirtyPageTrackingExt;
+
 static void on_virtual_machine_creation(const simgrid::s4u::VirtualMachine& vm)
 {
-  vm.get_vm_impl()->extension_set<simgrid::vm::DirtyPageTrackingExt>(new simgrid::vm::DirtyPageTrackingExt());
+  vm.get_vm_impl()->extension_set<DirtyPageTrackingExt>(new DirtyPageTrackingExt());
 }
 
 static void on_exec_creation(simgrid::s4u::Exec const& e)
@@ -81,34 +85,34 @@ static void on_exec_creation(simgrid::s4u::Exec const& e)
   if (vm == nullptr)
     return;
 
-  if (vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->is_tracking()) {
-    vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->track(exec, exec->get_remaining());
+  if (vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->is_tracking()) {
+    vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->track(exec, exec->get_remaining());
   } else {
-    vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->track(exec, 0.0);
+    vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->track(exec, 0.0);
   }
 }
 
 static void on_exec_completion(simgrid::s4u::Exec const& e)
 {
-  auto exec                        = static_cast<simgrid::kernel::activity::ExecImpl*>(e.get_impl());
+  auto exec                              = static_cast<simgrid::kernel::activity::ExecImpl*>(e.get_impl());
   const simgrid::s4u::VirtualMachine* vm = dynamic_cast<simgrid::s4u::VirtualMachine*>(exec->get_host());
   if (vm == nullptr)
     return;
 
   /* If we are in the middle of dirty page tracking, we record how much computation has been done until now, and keep
    * the information for the lookup_() function that will called soon. */
-  if (vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->is_tracking()) {
-    double delta = vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->get_stored_remains(exec);
-    vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->update_dirty_page_count(delta);
+  if (vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->is_tracking()) {
+    double delta = vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->get_stored_remains(exec);
+    vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->update_dirty_page_count(delta);
   }
-  vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->untrack(exec);
+  vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->untrack(exec);
 }
 
 void sg_vm_dirty_page_tracking_init()
 {
-  if (not simgrid::vm::DirtyPageTrackingExt::EXTENSION_ID.valid()) {
-    simgrid::vm::DirtyPageTrackingExt::EXTENSION_ID =
-        simgrid::vm::VirtualMachineImpl::extension_create<simgrid::vm::DirtyPageTrackingExt>();
+  if (not DirtyPageTrackingExt::EXTENSION_ID.valid()) {
+    DirtyPageTrackingExt::EXTENSION_ID =
+        simgrid::kernel::resource::VirtualMachineImpl::extension_create<DirtyPageTrackingExt>();
     simgrid::s4u::VirtualMachine::on_creation.connect(&on_virtual_machine_creation);
     simgrid::s4u::Exec::on_start.connect(&on_exec_creation);
     simgrid::s4u::Exec::on_completion.connect(&on_exec_completion);
@@ -117,50 +121,50 @@ void sg_vm_dirty_page_tracking_init()
 
 void sg_vm_start_dirty_page_tracking(const_sg_vm_t vm)
 {
-  vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->start_tracking();
+  vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->start_tracking();
 }
 
 void sg_vm_stop_dirty_page_tracking(const_sg_vm_t vm)
 {
-  vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->stop_tracking();
+  vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->stop_tracking();
 }
 
 double sg_vm_lookup_computed_flops(const_sg_vm_t vm)
 {
-  return vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->computed_flops_lookup();
+  return vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->computed_flops_lookup();
 }
 
 void sg_vm_set_dirty_page_intensity(const_sg_vm_t vm, double intensity)
 {
-  vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->set_intensity(intensity);
+  vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->set_intensity(intensity);
 }
 
 double sg_vm_get_dirty_page_intensity(const_sg_vm_t vm)
 {
-  return vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->get_intensity();
+  return vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->get_intensity();
 }
 
 void sg_vm_set_working_set_memory(const_sg_vm_t vm, sg_size_t size)
 {
-  vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->set_working_set_memory(size);
+  vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->set_working_set_memory(size);
 }
 
 sg_size_t sg_vm_get_working_set_memory(const_sg_vm_t vm)
 {
-  return vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->get_working_set_memory();
+  return vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->get_working_set_memory();
 }
 
 void sg_vm_set_migration_speed(const_sg_vm_t vm, double speed)
 {
-  vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->set_migration_speed(speed);
+  vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->set_migration_speed(speed);
 }
 
 double sg_vm_get_migration_speed(const_sg_vm_t vm)
 {
-  return vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->get_migration_speed();
+  return vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->get_migration_speed();
 }
 
 double sg_vm_get_max_downtime(const_sg_vm_t vm)
 {
-  return vm->get_vm_impl()->extension<simgrid::vm::DirtyPageTrackingExt>()->get_max_downtime();
+  return vm->get_vm_impl()->extension<DirtyPageTrackingExt>()->get_max_downtime();
 }
index 12ce201..be5c558 100644 (file)
@@ -13,7 +13,7 @@
 #include <simgrid/s4u/VirtualMachine.hpp>
 #include <xbt/parse_units.hpp>
 
-#include "src/plugins/vm/VirtualMachineImpl.hpp"
+#include "src/kernel/resource/VirtualMachineImpl.hpp"
 #include "src/surf/HostImpl.hpp"
 
 #include <string>
@@ -108,7 +108,7 @@ void Host::turn_off()
   if (is_on()) {
     const kernel::actor::ActorImpl* self = kernel::actor::ActorImpl::self();
     kernel::actor::simcall([this, self] {
-      for (VirtualMachine* const& vm : vm::VirtualMachineImpl::allVms_)
+      for (VirtualMachine* const& vm : kernel::resource::VirtualMachineImpl::allVms_)
         if (vm->get_pm() == this) {
           vm->shutdown();
           vm->turn_off();
similarity index 85%
rename from src/plugins/vm/s4u_VirtualMachine.cpp
rename to src/s4u/s4u_VirtualMachine.cpp
index 0285832..df4b909 100644 (file)
@@ -7,23 +7,30 @@
 #include <simgrid/kernel/routing/NetPoint.hpp>
 #include <simgrid/vm.h>
 
-#include "src/plugins/vm/VirtualMachineImpl.hpp"
-#include "src/plugins/vm/VmHostExt.hpp"
+#include "src/kernel/resource/VirtualMachineImpl.hpp"
 #include "src/surf/cpu_cas01.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_vm, s4u, "S4U virtual machines");
 
 namespace simgrid {
 namespace s4u {
-simgrid::xbt::signal<void(VirtualMachine&)> VirtualMachine::on_creation;
-simgrid::xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_start;
-simgrid::xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_started;
-simgrid::xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_shutdown;
-simgrid::xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_suspend;
-simgrid::xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_resume;
-simgrid::xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_migration_start;
-simgrid::xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_migration_end;
-simgrid::xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_destruction;
+xbt::signal<void(VirtualMachine&)> VirtualMachine::on_creation;
+xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_start;
+xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_started;
+xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_shutdown;
+xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_suspend;
+xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_resume;
+xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_migration_start;
+xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_migration_end;
+xbt::signal<void(VirtualMachine const&)> VirtualMachine::on_destruction;
+
+xbt::Extension<Host, VmHostExt> VmHostExt::EXTENSION_ID;
+
+void VmHostExt::ensureVmExtInstalled()
+{
+  if (not EXTENSION_ID.valid())
+    EXTENSION_ID = Host::extension_create<VmHostExt>();
+}
 
 VirtualMachine::VirtualMachine(const std::string& name, s4u::Host* physical_host, int core_amount)
     : VirtualMachine(name, physical_host, core_amount, 1024)
@@ -31,8 +38,8 @@ VirtualMachine::VirtualMachine(const std::string& name, s4u::Host* physical_host
 }
 
 VirtualMachine::VirtualMachine(const std::string& name, s4u::Host* physical_host, int core_amount, size_t ramsize)
-    : Host(new vm::VirtualMachineImpl(name, this, physical_host, core_amount, ramsize))
-    , pimpl_vm_(dynamic_cast<vm::VirtualMachineImpl*>(Host::get_impl()))
+    : Host(new kernel::resource::VirtualMachineImpl(name, this, physical_host, core_amount, ramsize))
+    , pimpl_vm_(dynamic_cast<kernel::resource::VirtualMachineImpl*>(Host::get_impl()))
 {
   XBT_DEBUG("Create VM %s", get_cname());
 
@@ -62,18 +69,18 @@ void VirtualMachine::start()
 {
   on_start(*this);
 
-  vm::VmHostExt::ensureVmExtInstalled();
+  VmHostExt::ensureVmExtInstalled();
 
   kernel::actor::simcall([this]() {
     Host* pm = this->pimpl_vm_->get_physical_host();
-    if (pm->extension<vm::VmHostExt>() == nullptr)
-      pm->extension_set(new vm::VmHostExt());
+    if (pm->extension<VmHostExt>() == nullptr)
+      pm->extension_set(new VmHostExt());
 
-    size_t pm_ramsize = pm->extension<vm::VmHostExt>()->ramsize;
-    if (pm_ramsize && not pm->extension<vm::VmHostExt>()->overcommit) { /* Need to verify that we don't overcommit */
+    size_t pm_ramsize = pm->extension<VmHostExt>()->ramsize;
+    if (pm_ramsize && not pm->extension<VmHostExt>()->overcommit) { /* Need to verify that we don't overcommit */
       /* Retrieve the memory occupied by the VMs on that host. Yep, we have to traverse all VMs of all hosts for that */
       size_t total_ramsize_of_vms = 0;
-      for (VirtualMachine* const& ws_vm : vm::VirtualMachineImpl::allVms_)
+      for (VirtualMachine* const& ws_vm : kernel::resource::VirtualMachineImpl::allVms_)
         if (pm == ws_vm->get_pm())
           total_ramsize_of_vms += ws_vm->get_ramsize();
 
index 2ad6045..204a613 100644 (file)
@@ -19,8 +19,8 @@
 #include "src/kernel/activity/MutexImpl.hpp"
 #include "src/kernel/activity/SemaphoreImpl.hpp"
 #include "src/kernel/actor/SimcallObserver.hpp"
+#include "src/kernel/resource/VirtualMachineImpl.hpp"
 #include "src/mc/mc_replay.hpp"
-#include "src/plugins/vm/VirtualMachineImpl.hpp"
 #include "xbt/random.hpp"
 
 #include "popping_bodies.cpp"
index aeac40d..cb429d0 100644 (file)
@@ -3,11 +3,12 @@
 /* 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/kernel/routing/NetPoint.hpp"
-#include "simgrid/s4u/Engine.hpp"
-#include "simgrid/s4u/Host.hpp"
+#include <simgrid/kernel/routing/NetPoint.hpp>
+#include <simgrid/s4u/Engine.hpp>
+#include <simgrid/s4u/Host.hpp>
+
 #include "src/kernel/EngineImpl.hpp"
-#include "src/plugins/vm/VirtualMachineImpl.hpp"
+#include "src/kernel/resource/VirtualMachineImpl.hpp"
 
 #include <string>
 
index 8b16e7c..16c39c7 100644 (file)
@@ -58,7 +58,7 @@ protected:
   HostImpl(const std::string& name, s4u::Host* piface);
 
 public:
-  friend simgrid::vm::VirtualMachineImpl;
+  friend kernel::resource::VirtualMachineImpl;
   explicit HostImpl(const std::string& name);
 
   void destroy(); // Must be called instead of the destructor
index 8cd60d0..8149662 100644 (file)
@@ -49,7 +49,7 @@ public:
  ************/
 
 class XBT_PUBLIC CpuImpl : public Resource_T<CpuImpl> {
-  friend vm::VirtualMachineImpl; // Resets the VCPU
+  friend VirtualMachineImpl; // Resets the VCPU
 
   s4u::Host* piface_;
   int core_count_ = 1;
index d050de8..59fd67e 100644 (file)
@@ -8,8 +8,8 @@
 #include "src/instr/instr_private.hpp"
 #include "src/kernel/EngineImpl.hpp"
 #include "src/kernel/resource/DiskImpl.hpp"
+#include "src/kernel/resource/VirtualMachineImpl.hpp"
 #include "src/kernel/resource/profile/FutureEvtSet.hpp"
-#include "src/plugins/vm/VirtualMachineImpl.hpp"
 #include "surf/surf.hpp"
 
 #include <algorithm>
index 1ee79aa..aff655f 100644 (file)
@@ -314,6 +314,8 @@ set(SURF_SRC
   src/kernel/resource/DiskImpl.cpp
   src/kernel/resource/DiskImpl.hpp
   src/kernel/resource/Resource.hpp
+  src/kernel/resource/VirtualMachineImpl.hpp
+  src/kernel/resource/VirtualMachineImpl.cpp
 
   src/kernel/resource/profile/DatedValue.cpp
   src/kernel/resource/profile/DatedValue.hpp
@@ -370,7 +372,6 @@ set(SURF_SRC
 
 set(PLUGINS_SRC
   src/plugins/ProducerConsumer.cpp
-  src/plugins/dirty_page_tracking.cpp
   src/plugins/host_dvfs.cpp
   src/plugins/host_energy.cpp
   src/plugins/link_energy.cpp
@@ -378,12 +379,7 @@ set(PLUGINS_SRC
   src/plugins/host_load.cpp
   src/plugins/link_load.cpp
   src/plugins/file_system/s4u_FileSystem.cpp
-  src/plugins/vm/VirtualMachineImpl.hpp
-  src/plugins/vm/s4u_VirtualMachine.cpp
-  src/plugins/vm/VirtualMachineImpl.hpp
-  src/plugins/vm/VirtualMachineImpl.cpp
-  src/plugins/vm/VmHostExt.hpp
-  src/plugins/vm/VmHostExt.cpp
+  src/plugins/vm/dirty_page_tracking.cpp
   src/plugins/vm/VmLiveMigration.cpp
   src/plugins/vm/VmLiveMigration.hpp
   )
@@ -459,6 +455,7 @@ set(S4U_SRC
   src/s4u/s4u_Mutex.cpp
   src/s4u/s4u_Netzone.cpp
   src/s4u/s4u_Semaphore.cpp
+  src/s4u/s4u_VirtualMachine.cpp
 )
 
 set(SIMGRID_SRC