#include <xbt/ex.hpp>
+#include "src/instr/instr_private.h"
+#include "src/msg/msg_private.h"
#include "src/plugins/vm/VirtualMachineImpl.hpp"
#include "src/plugins/vm/VmHostExt.hpp"
-#include "src/simix/ActorImpl.hpp"
-#include <simgrid/s4u/VirtualMachine.hpp>
-#include <simgrid/s4u/host.hpp>
-#include "msg_private.h"
-#include "xbt/sysdep.h"
-#include "xbt/log.h"
#include "simgrid/host.h"
+#include "simgrid/simix.hpp"
-#include "src/simix/smx_host_private.h" /* don't ask me why the VM functions are in there (FIXME:KILLME) */
+struct dirty_page {
+ double prev_clock;
+ double prev_remaining;
+ msg_task_t task;
+};
+typedef struct dirty_page s_dirty_page;
+typedef struct dirty_page* dirty_page_t;
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_vm, msg, "Cloud-oriented parts of the MSG API");
-
/* **** ******** GENERAL ********* **** */
/** \ingroup m_vm_management
return __MSG_vm_is_state(vm, SURF_VM_STATE_SUSPENDED);
}
-/** @brief Returns whether the given VM is being saved (FIXME: live saving or not?).
- * @ingroup msg_VMs
- */
-int MSG_vm_is_saving(msg_vm_t vm)
-{
- return __MSG_vm_is_state(vm, SURF_VM_STATE_SAVING);
-}
-
-/** @brief Returns whether the given VM has been saved, not running.
- * @ingroup msg_VMs
- */
-int MSG_vm_is_saved(msg_vm_t vm)
-{
- return __MSG_vm_is_state(vm, SURF_VM_STATE_SAVED);
-}
-
-/** @brief Returns whether the given VM is being restored, not running.
- * @ingroup msg_VMs
- */
-int MSG_vm_is_restoring(msg_vm_t vm)
-{
- return __MSG_vm_is_state(vm, SURF_VM_STATE_RESTORING);
-}
-
/* **** ******** MSG vm actions ********* **** */
/** @brief Create a new VM with specified parameters.
* @ingroup msg_VMs*
params.dp_cap = params.ramsize * 0.9; // assume working set memory is 90% of ramsize
params.mig_speed = (double)mig_netspeed * 1024 * 1024; // mig_speed
- //XBT_INFO("dp rate %f migspeed : %f intensity mem : %d, updatespeed %f, hostspeed %f",params.dp_rate,
- // params.mig_speed, dp_intensity, update_speed, host_speed);
+ XBT_DEBUG("dp rate %f migspeed : %f intensity mem : %d, updatespeed %f, hostspeed %f", params.dp_rate,
+ params.mig_speed, dp_intensity, update_speed, host_speed);
static_cast<simgrid::s4u::VirtualMachine*>(vm)->setParameters(¶ms);
return vm;
}
}
-
-/** @brief Immediately save the execution of all processes within the given VM.
- * @ingroup msg_VMs
- *
- * This function stops the execution of the VM. All the processes on this VM
- * will pause. The state of the VM is preserved. We can later resume it again.
- *
- * FIXME: No suspension cost occurs. If you want to simulate this too, you want to use a \ref MSG_file_write() before
- * or after, depending on the exact semantic of VM save to you.
- */
-void MSG_vm_save(msg_vm_t vm)
-{
- smx_actor_t issuer=SIMIX_process_self();
- simgrid::simix::kernelImmediate([vm,issuer]() {
- static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->save(issuer);
- });
-
- if (TRACE_msg_vm_is_enabled()) {
- container_t vm_container = PJ_container_get(vm->cname());
- type_t type = PJ_type_get("MSG_VM_STATE", vm_container->type);
- val_t value = PJ_value_get_or_new("save", "0 1 0", type); // save is green
- new_pajePushState(MSG_get_clock(), vm_container, type, value);
- }
-}
-
-/** @brief Restore the execution of the VM. All processes on the VM run again.
- * @ingroup msg_VMs
- *
- * FIXME: No restore cost occurs. If you want to simulate this too, you want to use a \ref MSG_file_read() before or
- * after, depending on the exact semantic of VM restore to you.
- */
-void MSG_vm_restore(msg_vm_t vm)
-{
- simgrid::simix::kernelImmediate([vm]() {
- static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->restore();
- });
-
- if (TRACE_msg_vm_is_enabled()) {
- container_t vm_container = PJ_container_get(vm->cname());
- type_t type = PJ_type_get("MSG_VM_STATE", vm_container->type);
- new_pajePopState(MSG_get_clock(), vm_container, type);
- }
-}
-
/** @brief Get the physical host of a given VM.
* @ingroup msg_VMs
*/