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
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
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
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
class NetworkAction;
class DiskImpl;
class DiskModel;
+class VirtualMachineImpl;
+class VMModel;
}
namespace timer {
class Timer;
namespace mc {
class CommunicationDeterminismChecker;
}
-namespace vm {
-class VMModel;
-class VirtualMachineImpl;
-} // namespace vm
} // namespace simgrid
using s4u_Actor = simgrid::s4u::Actor;
*/
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
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
*
*/
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);
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();
#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);
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());
}
}
#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"
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});
}
namespace simgrid {
+template class xbt::Extendable<kernel::resource::VirtualMachineImpl>;
-template class xbt::Extendable<vm::VirtualMachineImpl>;
-
-namespace vm {
+namespace kernel {
+namespace resource {
/*********
* Model *
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)
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 */
/* 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());
action_->set_bound(std::min(impact * physical_host_->get_speed(), user_bound_));
}
-} // namespace vm
+} // namespace resource
+} // namespace kernel
} // namespace simgrid
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:
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();
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_; }
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();
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_ */
+++ /dev/null
-/* 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
+++ /dev/null
-/* 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_ */
#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;
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();
}
}
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 */
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");
#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)
{
}
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
#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;
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()
{
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)
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);
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();
}
#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>
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();
#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)
}
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());
{
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();
#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"
/* 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>
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
************/
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;
#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>
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
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
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
)
src/s4u/s4u_Mutex.cpp
src/s4u/s4u_Netzone.cpp
src/s4u/s4u_Semaphore.cpp
+ src/s4u/s4u_VirtualMachine.cpp
)
set(SIMGRID_SRC