void parameters(vm_params_t params);
void setParameters(vm_params_t params);
double getRamsize();
+ simgrid::s4u::Host* pm();
/* FIXME: protect me */
simgrid::vm::VirtualMachineImpl* pimpl_vm_ = nullptr;
void MSG_vm_restore(msg_vm_t vm)
{
simgrid::simix::kernelImmediate([vm]() {
- simgrid::s4u::VirtualMachine* typedVm = static_cast<simgrid::s4u::VirtualMachine*>(vm);
-
- if (typedVm->pimpl_vm_->getState() != SURF_VM_STATE_SAVED)
- THROWF(vm_error, 0, "VM(%s) was not saved", vm->cname());
-
- XBT_DEBUG("restore VM(%s), where %d processes exist", vm->cname(), xbt_swag_size(sg_host_simix(vm)->process_list));
-
- /* jump to vm_ws_restore() */
- typedVm->pimpl_vm_->restore();
-
- smx_actor_t smx_process, smx_process_safe;
- xbt_swag_foreach_safe(smx_process, smx_process_safe, sg_host_simix(vm)->process_list) {
- XBT_DEBUG("resume %s", smx_process->name.c_str());
- SIMIX_process_resume(smx_process);
- }
+ static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->restore();
});
if (TRACE_msg_vm_is_enabled()) {
*/
msg_host_t MSG_vm_get_pm(msg_vm_t vm)
{
- return static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->getPm();
+ return static_cast<simgrid::s4u::VirtualMachine*>(vm)->pm();
}
/** @brief Set a CPU bound for a given VM.
#include "src/plugins/vm/VirtualMachineImpl.hpp"
#include "simgrid/s4u/VirtualMachine.hpp"
+#include "src/simix/ActorImpl.hpp"
+#include "src/simix/smx_host_private.h"
#include <xbt/signal.hpp>
void VirtualMachineImpl::restore()
{
+ if (getState() != SURF_VM_STATE_SAVED)
+ THROWF(vm_error, 0, "Cannot restore VM %s: it was not saved", piface_->cname());
+
+ xbt_swag_t process_list = piface_->extension<simgrid::simix::Host>()->process_list;
+ XBT_DEBUG("Restore VM %s, where %d processes exist", piface_->cname(), xbt_swag_size(process_list));
+
vmState_ = SURF_VM_STATE_RESTORING;
action_->resume();
vmState_ = SURF_VM_STATE_RUNNING;
+
+ smx_actor_t smx_process, smx_process_safe;
+ xbt_swag_foreach_safe(smx_process, smx_process_safe, process_list) {
+ XBT_DEBUG("resume %s", smx_process->cname());
+ SIMIX_process_resume(smx_process);
+ }
}
/** @brief returns the physical machine on which the VM is running **/
{
return pimpl_vm_->params_.ramsize;
}
+simgrid::s4u::Host* VirtualMachine::pm()
+{
+ return pimpl_vm_->getPm();
+}
/** @brief Retrieve a copy of the parameters of that VM/PM
* @details The ramsize and overcommit fields are used on the PM too */