-/* Copyright (c) 2013-2019. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2013-2020. 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. */
}
namespace simgrid {
+
+template class xbt::Extendable<vm::VirtualMachineImpl>;
+
namespace vm {
/*************
* Callbacks *
static void add_active_exec(s4u::Actor const&, s4u::Exec const& task)
{
- s4u::VirtualMachine* vm = dynamic_cast<s4u::VirtualMachine*>(task.get_host());
+ const s4u::VirtualMachine* vm = dynamic_cast<s4u::VirtualMachine*>(task.get_host());
if (vm != nullptr) {
VirtualMachineImpl* vm_impl = vm->get_impl();
- vm_impl->active_tasks_ = vm_impl->active_tasks_ + 1;
+ vm_impl->add_active_exec();
vm_impl->update_action_weight();
}
}
static void remove_active_exec(s4u::Actor const&, s4u::Exec const& task)
{
- s4u::VirtualMachine* vm = dynamic_cast<s4u::VirtualMachine*>(task.get_host());
+ const s4u::VirtualMachine* vm = dynamic_cast<s4u::VirtualMachine*>(task.get_host());
if (vm != nullptr) {
VirtualMachineImpl* vm_impl = vm->get_impl();
- vm_impl->active_tasks_ = vm_impl->active_tasks_ - 1;
+ vm_impl->remove_active_exec();
vm_impl->update_action_weight();
}
}
static void add_active_activity(kernel::activity::ActivityImpl const& act)
{
- s4u::VirtualMachine* vm = get_vm_from_activity(act);
+ const s4u::VirtualMachine* vm = get_vm_from_activity(act);
if (vm != nullptr) {
VirtualMachineImpl *vm_impl = vm->get_impl();
- vm_impl->active_tasks_ = vm_impl->active_tasks_ + 1;
+ vm_impl->add_active_exec();
vm_impl->update_action_weight();
}
}
static void remove_active_activity(kernel::activity::ActivityImpl const& act)
{
- s4u::VirtualMachine* vm = get_vm_from_activity(act);
+ const s4u::VirtualMachine* vm = get_vm_from_activity(act);
if (vm != nullptr) {
VirtualMachineImpl *vm_impl = vm->get_impl();
- vm_impl->active_tasks_ = vm_impl->active_tasks_ - 1;
+ vm_impl->remove_active_exec();
vm_impl->update_action_weight();
}
}
/* iterate for all virtual machines */
for (s4u::VirtualMachine* const& ws_vm : VirtualMachineImpl::allVms_) {
- kernel::resource::Cpu* cpu = ws_vm->pimpl_cpu;
+ const kernel::resource::Cpu* cpu = ws_vm->pimpl_cpu;
- double solved_value =
- ws_vm->get_impl()->action_->get_variable()->get_value(); // this is X1 in comment above, what
- // this VM got in the sharing on the PM
+ // solved_value below is X1 in comment above: what this VM got in the sharing on the PM
+ double solved_value = ws_vm->get_impl()->get_action()->get_variable()->get_value();
XBT_DEBUG("assign %f to vm %s @ pm %s", solved_value, ws_vm->get_cname(), ws_vm->get_pm()->get_cname());
xbt_assert(cpu->get_model() == surf_cpu_model_vm);
VirtualMachineImpl::VirtualMachineImpl(simgrid::s4u::VirtualMachine* piface, simgrid::s4u::Host* host_PM,
int core_amount, size_t ramsize)
- : HostImpl(piface), physical_host_(host_PM), core_amount_(core_amount), user_bound_(std::numeric_limits<double>::max()), ramsize_(ramsize)
+ : HostImpl(piface), physical_host_(host_PM), core_amount_(core_amount), ramsize_(ramsize)
{
/* Register this VM to the list of all VMs */
allVms_.push_back(piface);
throw VmFailureException(XBT_THROW_POINT, xbt::string_printf("Actor %s cannot suspend the VM %s in which it runs",
issuer->get_cname(), piface_->get_cname()));
- XBT_DEBUG("suspend VM(%s), where %zu actors exist", piface_->get_cname(), actor_list_.size());
+ XBT_DEBUG("suspend VM(%s), where %zu actors exist", piface_->get_cname(), get_actor_count());
action_->suspend();
throw VmFailureException(XBT_THROW_POINT,
xbt::string_printf("Cannot resume VM %s: it was not suspended", piface_->get_cname()));
- XBT_DEBUG("Resume VM %s, containing %zu actors.", piface_->get_cname(), actor_list_.size());
+ XBT_DEBUG("Resume VM %s, containing %zu actors.", piface_->get_cname(), get_actor_count());
action_->resume();
XBT_VERB("Shutting down the VM %s even if it's not running but %s", piface_->get_cname(), stateName);
}
- XBT_DEBUG("shutdown VM %s, that contains %zu actors", piface_->get_cname(), actor_list_.size());
+ XBT_DEBUG("shutdown VM %s, that contains %zu actors", piface_->get_cname(), get_actor_count());
for (auto& actor : actor_list_) {
XBT_DEBUG("kill %s@%s on behalf of %s which shutdown that VM.", actor.get_cname(), actor.get_host()->get_cname(),
void VirtualMachineImpl::update_action_weight(){
/* The impact of the VM over its PM is the min between its vCPU amount and the amount of tasks it contains */
- int impact = std::min(active_tasks_, get_core_amount());
+ int impact = std::min(active_execs_, get_core_amount());
- XBT_DEBUG("set the weight of the dummy CPU action of VM%p on PM to %d (#tasks: %d)", this, impact, active_tasks_);
+ XBT_DEBUG("set the weight of the dummy CPU action of VM%p on PM to %d (#tasks: %u)", this, impact, active_execs_);
if (impact > 0)
action_->set_sharing_penalty(1. / impact);