A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add new entry in Release_Notes.
[simgrid.git]
/
src
/
kernel
/
resource
/
VirtualMachineImpl.cpp
diff --git
a/src/kernel/resource/VirtualMachineImpl.cpp
b/src/kernel/resource/VirtualMachineImpl.cpp
index 854aafcbf7d4d455bda3c8aba08b1da4b085d1e5..e8d813ffd8da33e87534cbed7abd280526aed4cd 100644
(file)
--- a/
src/kernel/resource/VirtualMachineImpl.cpp
+++ b/
src/kernel/resource/VirtualMachineImpl.cpp
@@
-1,4
+1,4
@@
-/* Copyright (c) 2013-202
2
. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2013-202
3
. 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. */
/* 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. */
@@
-8,19
+8,21
@@
#include <simgrid/kernel/routing/NetZoneImpl.hpp>
#include <simgrid/s4u/Exec.hpp>
#include <simgrid/kernel/routing/NetZoneImpl.hpp>
#include <simgrid/s4u/Exec.hpp>
-#include "simgrid/sg_config.hpp"
#include "src/kernel/EngineImpl.hpp"
#include "src/kernel/activity/ExecImpl.hpp"
#include "src/kernel/resource/VirtualMachineImpl.hpp"
#include "src/kernel/EngineImpl.hpp"
#include "src/kernel/activity/ExecImpl.hpp"
#include "src/kernel/resource/VirtualMachineImpl.hpp"
-#include "src/surf/cpu_cas01.hpp"
-#include "src/surf/cpu_ti.hpp"
+#include "src/kernel/resource/models/cpu_cas01.hpp"
+#include "src/kernel/resource/models/cpu_ti.hpp"
+#include "src/simgrid/module.hpp"
+#include "src/simgrid/sg_config.hpp"
#include <numeric>
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(res_vm, ker_resource, "Virtual Machines, containing actors and mobile across hosts");
#include <numeric>
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(res_vm, ker_resource, "Virtual Machines, containing actors and mobile across hosts");
-void s
urf_vm_model_init_HL13(simgrid::kernel::resource::CpuModel* cpu_pm_model
)
+void s
imgrid_vm_model_init_HL13(
)
{
{
+ auto* cpu_pm_model = simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->get_cpu_pm_model().get();
auto vm_model = std::make_shared<simgrid::kernel::resource::VMModel>("VM_HL13");
auto* engine = simgrid::kernel::EngineImpl::get_instance();
auto vm_model = std::make_shared<simgrid::kernel::resource::VMModel>("VM_HL13");
auto* engine = simgrid::kernel::EngineImpl::get_instance();
@@
-53,15
+55,15
@@
std::deque<s4u::VirtualMachine*> VirtualMachineImpl::allVms_;
*/
const double virt_overhead = 1; // 0.95
*/
const double virt_overhead = 1; // 0.95
-static void host_
state_change
(s4u::Host const& host)
+static void host_
onoff
(s4u::Host const& host)
{
if (not host.is_on()) { // just turned off.
std::vector<s4u::VirtualMachine*> trash;
/* Find all VMs living on that host */
{
if (not host.is_on()) { // just turned off.
std::vector<s4u::VirtualMachine*> trash;
/* Find all VMs living on that host */
- for (
s4u::VirtualMachine* const&
vm : VirtualMachineImpl::allVms_)
+ for (
auto*
vm : VirtualMachineImpl::allVms_)
if (vm->get_pm() == &host)
trash.push_back(vm);
if (vm->get_pm() == &host)
trash.push_back(vm);
- for (
s4u::VirtualMachine
* vm : trash)
+ for (
auto
* vm : trash)
vm->shutdown();
}
}
vm->shutdown();
}
}
@@
-71,29
+73,28
@@
static void add_active_exec(s4u::Exec const& task)
const s4u::VirtualMachine* vm = dynamic_cast<s4u::VirtualMachine*>(task.get_host());
if (vm != nullptr) {
VirtualMachineImpl* vm_impl = vm->get_vm_impl();
const s4u::VirtualMachine* vm = dynamic_cast<s4u::VirtualMachine*>(task.get_host());
if (vm != nullptr) {
VirtualMachineImpl* vm_impl = vm->get_vm_impl();
- vm_impl->add_active_exec();
+ for (int i = 1; i <= task.get_thread_count(); i++)
+ vm_impl->add_active_exec();
vm_impl->update_action_weight();
}
}
vm_impl->update_action_weight();
}
}
-static void remove_active_exec(s4u::
Activity const& task
)
+static void remove_active_exec(s4u::
Exec const& exec
)
{
{
- const auto* exec = dynamic_cast<s4u::Exec const*>(&task);
- if (exec == nullptr)
- return;
- if (not exec->is_assigned())
+ if (not exec.is_assigned())
return;
return;
- const s4u::VirtualMachine* vm = dynamic_cast<s4u::VirtualMachine*>(exec
->
get_host());
+ const s4u::VirtualMachine* vm = dynamic_cast<s4u::VirtualMachine*>(exec
.
get_host());
if (vm != nullptr) {
VirtualMachineImpl* vm_impl = vm->get_vm_impl();
if (vm != nullptr) {
VirtualMachineImpl* vm_impl = vm->get_vm_impl();
- vm_impl->remove_active_exec();
+ for (int i = 1; i <= exec.get_thread_count(); i++)
+ vm_impl->remove_active_exec();
vm_impl->update_action_weight();
}
}
static s4u::VirtualMachine* get_vm_from_activity(s4u::Activity const& act)
{
vm_impl->update_action_weight();
}
}
static s4u::VirtualMachine* get_vm_from_activity(s4u::Activity const& act)
{
- auto* exec = dynamic_cast<kernel::activity::ExecImpl const*>(act.get_impl());
+
const
auto* exec = dynamic_cast<kernel::activity::ExecImpl const*>(act.get_impl());
return exec != nullptr ? dynamic_cast<s4u::VirtualMachine*>(exec->get_host()) : nullptr;
}
return exec != nullptr ? dynamic_cast<s4u::VirtualMachine*>(exec->get_host()) : nullptr;
}
@@
-119,11
+120,11
@@
static void remove_active_activity(s4u::Activity const& act)
VMModel::VMModel(const std::string& name) : HostModel(name)
{
VMModel::VMModel(const std::string& name) : HostModel(name)
{
- s4u::Host::on_
state_change_cb(host_state_change
);
+ s4u::Host::on_
onoff_cb(host_onoff
);
s4u::Exec::on_start_cb(add_active_exec);
s4u::Exec::on_start_cb(add_active_exec);
- s4u::
Activity
::on_completion_cb(remove_active_exec);
- s4u::
Activity::on_resumed
_cb(add_active_activity);
- s4u::
Activity::on_suspende
d_cb(remove_active_activity);
+ s4u::
Exec
::on_completion_cb(remove_active_exec);
+ s4u::
Exec::on_resume
_cb(add_active_activity);
+ s4u::
Exec::on_suspen
d_cb(remove_active_activity);
}
double VMModel::next_occurring_event(double now)
}
double VMModel::next_occurring_event(double now)
@@
-153,7
+154,7
@@
double VMModel::next_occurring_event(double now)
**/
/* iterate for all virtual machines */
**/
/* iterate for all virtual machines */
- for (
s4u::VirtualMachine* const&
ws_vm : VirtualMachineImpl::allVms_) {
+ for (
auto const*
ws_vm : VirtualMachineImpl::allVms_) {
if (ws_vm->get_state() == s4u::VirtualMachine::State::SUSPENDED) // Ignore suspended VMs
continue;
if (ws_vm->get_state() == s4u::VirtualMachine::State::SUSPENDED) // Ignore suspended VMs
continue;
@@
-172,7
+173,7
@@
double VMModel::next_occurring_event(double now)
Action* VMModel::execute_thread(const s4u::Host* host, double flops_amount, int thread_count)
{
Action* VMModel::execute_thread(const s4u::Host* host, double flops_amount, int thread_count)
{
- auto cpu = host->get_cpu();
+ auto
*
cpu = host->get_cpu();
return cpu->execution_start(thread_count * flops_amount, thread_count, -1);
}
return cpu->execution_start(thread_count * flops_amount, thread_count, -1);
}
@@
-235,6
+236,7
@@
void VirtualMachineImpl::vm_destroy()
void VirtualMachineImpl::start()
{
s4u::VirtualMachine::on_start(*get_iface());
void VirtualMachineImpl::start()
{
s4u::VirtualMachine::on_start(*get_iface());
+ get_iface()->on_this_start(*get_iface());
s4u::VmHostExt::ensureVmExtInstalled();
if (physical_host_->extension<s4u::VmHostExt>() == nullptr)
s4u::VmHostExt::ensureVmExtInstalled();
if (physical_host_->extension<s4u::VmHostExt>() == nullptr)
@@
-245,7
+247,7
@@
void VirtualMachineImpl::start()
not physical_host_->extension<s4u::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;
not physical_host_->extension<s4u::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 (auto
* const&
ws_vm : allVms_)
+ for (auto
const*
ws_vm : allVms_)
if (physical_host_ == ws_vm->get_pm())
total_ramsize_of_vms += ws_vm->get_ramsize();
if (physical_host_ == ws_vm->get_pm())
total_ramsize_of_vms += ws_vm->get_ramsize();
@@
-260,11
+262,13
@@
void VirtualMachineImpl::start()
vm_state_ = s4u::VirtualMachine::State::RUNNING;
s4u::VirtualMachine::on_started(*get_iface());
vm_state_ = s4u::VirtualMachine::State::RUNNING;
s4u::VirtualMachine::on_started(*get_iface());
+ get_iface()->on_this_started(*get_iface());
}
void VirtualMachineImpl::suspend(const actor::ActorImpl* issuer)
{
s4u::VirtualMachine::on_suspend(*get_iface());
}
void VirtualMachineImpl::suspend(const actor::ActorImpl* issuer)
{
s4u::VirtualMachine::on_suspend(*get_iface());
+ get_iface()->on_this_suspend(*get_iface());
if (vm_state_ != s4u::VirtualMachine::State::RUNNING)
throw VmFailureException(XBT_THROW_POINT,
if (vm_state_ != s4u::VirtualMachine::State::RUNNING)
throw VmFailureException(XBT_THROW_POINT,
@@
-304,6
+308,7
@@
void VirtualMachineImpl::resume()
vm_state_ = s4u::VirtualMachine::State::RUNNING;
s4u::VirtualMachine::on_resume(*get_iface());
vm_state_ = s4u::VirtualMachine::State::RUNNING;
s4u::VirtualMachine::on_resume(*get_iface());
+ get_iface()->on_this_resume(*get_iface());
}
/** @brief Power off a VM.
}
/** @brief Power off a VM.
@@
-330,7
+335,7
@@
void VirtualMachineImpl::shutdown(actor::ActorImpl* issuer)
set_state(s4u::VirtualMachine::State::DESTROYED);
s4u::VirtualMachine::on_shutdown(*get_iface());
set_state(s4u::VirtualMachine::State::DESTROYED);
s4u::VirtualMachine::on_shutdown(*get_iface());
- /* FIXME: we may have to do something at the surf layer, e.g., vcpu action */
+ get_iface()->on_this_shutdown(*get_iface());
}
/** @brief Change the physical host on which the given VM is running
}
/** @brief Change the physical host on which the given VM is running
@@
-399,12
+404,14
@@
void VirtualMachineImpl::start_migration()
{
is_migrating_ = true;
s4u::VirtualMachine::on_migration_start(*get_iface());
{
is_migrating_ = true;
s4u::VirtualMachine::on_migration_start(*get_iface());
+ get_iface()->on_this_migration_start(*get_iface());
}
void VirtualMachineImpl::end_migration()
{
is_migrating_ = false;
s4u::VirtualMachine::on_migration_end(*get_iface());
}
void VirtualMachineImpl::end_migration()
{
is_migrating_ = false;
s4u::VirtualMachine::on_migration_end(*get_iface());
+ get_iface()->on_this_migration_end(*get_iface());
}
void VirtualMachineImpl::seal()
}
void VirtualMachineImpl::seal()