-/* Copyright (c) 2013-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2013-2018. 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 {
-namespace vm {
/*************
* Callbacks *
*************/
-simgrid::xbt::signal<void(simgrid::vm::VirtualMachineImpl*)> onVmCreation;
-simgrid::xbt::signal<void(simgrid::vm::VirtualMachineImpl*)> onVmDestruction;
-simgrid::xbt::signal<void(simgrid::vm::VirtualMachineImpl*)> onVmStateChange;
+simgrid::xbt::signal<void(simgrid::vm::VirtualMachineImpl*)> simgrid::vm::VirtualMachineImpl::onVmCreation;
+simgrid::xbt::signal<void(simgrid::vm::VirtualMachineImpl*)> simgrid::vm::VirtualMachineImpl::onVmDestruction;
+simgrid::xbt::signal<void(simgrid::vm::VirtualMachineImpl*)> simgrid::vm::VirtualMachineImpl::onVmStateChange;
+namespace simgrid {
+namespace vm {
/*********
* Model *
*********/
if (vm->getPm() == &host)
trash.push_back(vm);
for (s4u::VirtualMachine* vm : trash)
- vm->pimpl_vm_->shutdown(SIMIX_process_self());
+ vm->shutdown();
}
}
VMModel::VMModel()
surf::Cpu* cpu = ws_vm->pimpl_cpu;
xbt_assert(cpu, "cpu-less host");
- double solved_value = ws_vm->pimpl_vm_->action_->getVariable()->get_value(); // this is X1 in comment above, what
+ double solved_value = ws_vm->getImpl()->action_->getVariable()->get_value(); // this is X1 in comment above, what
// this VM got in the sharing on the PM
- XBT_DEBUG("assign %f to vm %s @ pm %s", solved_value, ws_vm->getCname(), ws_vm->pimpl_vm_->getPm()->getCname());
+ XBT_DEBUG("assign %f to vm %s @ pm %s", solved_value, ws_vm->getCname(), ws_vm->getPm()->getCname());
xbt_assert(cpu->model() == surf_cpu_model_vm);
- lmm_system_t vcpu_system = cpu->model()->getMaxminSystem();
+ kernel::lmm::System* vcpu_system = cpu->model()->getMaxminSystem();
vcpu_system->update_constraint_bound(cpu->constraint(), virt_overhead * solved_value);
}
************/
VirtualMachineImpl::VirtualMachineImpl(simgrid::s4u::VirtualMachine* piface, simgrid::s4u::Host* host_PM,
- int coreAmount)
- : HostImpl(piface), hostPM_(host_PM), coreAmount_(coreAmount)
+ int coreAmount, size_t ramsize)
+ : HostImpl(piface), hostPM_(host_PM), coreAmount_(coreAmount), ramsize_(ramsize)
{
/* Register this VM to the list of all VMs */
allVms_.push_back(piface);
/* TODO: we have to periodically input GUESTOS_NOISE to the system? how ? */
action_ = host_PM->pimpl_cpu->execution_start(0, coreAmount);
- /* Initialize the VM parameters */
- params_.ramsize = 0;
-
XBT_VERB("Create VM(%s)@PM(%s)", piface->getCname(), hostPM_->getCname());
+ onVmCreation(this);
}
/** @brief A physical host does not disappear in the current SimGrid code, but a VM may disappear during a simulation */
if (iter != allVms_.end())
allVms_.erase(iter);
- /* dirty page tracking */
- unsigned int size = dp_objs.size();
- static bool already_warned = false;
- if (size > 0 && not already_warned) {
- auto front = dp_objs.begin();
- XBT_WARN("Dirty page tracking: %u pending task(s) on a destroyed VM (first one is %s).\n"
- "If you don't understand why your task was not properly removed, please report that bug.\n"
- "This is a known bug if you turned the host off during the VM execution.\n"
- "Please remind us of that problem at some point: our code base is not ready to fix this harmless issue in "
- "2016, sorry.",
- size, (xbt_log_no_loc ? "(name hidden)" : front->first.c_str()));
- already_warned = true;
- }
-
/* Free the cpu_action of the VM. */
XBT_ATTRIB_UNUSED int ret = action_->unref();
xbt_assert(ret == 1, "Bug: some resource still remains");
{
vmState_ = state;
}
+
void VirtualMachineImpl::suspend(smx_actor_t issuer)
{
- if (isMigrating)
- THROWF(vm_error, 0, "Cannot suspend VM '%s': it is migrating", piface_->getCname());
if (getState() != SURF_VM_STATE_RUNNING)
THROWF(vm_error, 0, "Cannot suspend VM %s: it is not running.", piface_->getCname());
if (issuer->host == piface_)
XBT_DEBUG("migrate VM(%s): change PM (%s to %s)", vm_name, pm_name_src, pm_name_dst);
}
-sg_size_t VirtualMachineImpl::getRamsize()
-{
- return params_.ramsize;
-}
-
void VirtualMachineImpl::setBound(double bound)
{
action_->setBound(bound);
}
-void VirtualMachineImpl::getParams(vm_params_t params)
-{
- *params = params_;
-}
-
-void VirtualMachineImpl::setParams(vm_params_t params)
-{
- /* may check something here. */
- params_ = *params;
-}
}
}