+++ /dev/null
-/* Copyright (c) 2012-2015. 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. */
-
-#include "msg_private.h"
-#include "simgrid/s4u/VirtualMachine.hpp"
-
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_msg_vm, instr, "MSG VM");
-
-/*
- * Instrumentation functions to trace MSG VMs (msg_vm_t)
- */
-void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host, msg_host_t new_host)
-{
- if (TRACE_msg_vm_is_enabled()){
- static long long int counter = 0;
- char key[INSTR_DEFAULT_STR_SIZE];
- snprintf (key, INSTR_DEFAULT_STR_SIZE, "%lld", counter++);
-
- //start link
- container_t msg = PJ_container_get(vm->name().c_str());
- type_t type = PJ_type_get ("MSG_VM_LINK", PJ_type_get_root());
- new_pajeStartLink (MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key);
-
- //destroy existing container of this vm
- container_t existing_container = PJ_container_get(vm->name().c_str());
- PJ_container_remove_from_parent (existing_container);
- PJ_container_free(existing_container);
-
- //create new container on the new_host location
- PJ_container_new(vm->name().c_str(), INSTR_MSG_VM, PJ_container_get(sg_host_get_name(new_host)));
-
- //end link
- msg = PJ_container_get(vm->name().c_str());
- type = PJ_type_get ("MSG_VM_LINK", PJ_type_get_root());
- new_pajeEndLink (MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key);
- }
-}
-
-void TRACE_msg_vm_start(msg_vm_t vm)
-{
- if (TRACE_msg_vm_is_enabled()){
- container_t vm_container = PJ_container_get(vm->name().c_str());
- type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type);
- val_t value = PJ_value_get_or_new ("start", "0 0 1", type); //start is blue
- new_pajePushState (MSG_get_clock(), vm_container, type, value);
- }
-
-}
-
-void TRACE_msg_vm_kill(msg_vm_t vm) {
- if (TRACE_msg_vm_is_enabled()) {
- //kill means that this vm no longer exists, let's destroy it
- container_t process = PJ_container_get(vm->name().c_str());
- PJ_container_remove_from_parent (process);
- PJ_container_free (process);
- }
-}
-
-void TRACE_msg_vm_suspend(msg_vm_t vm)
-{
- if (TRACE_msg_vm_is_enabled()){
- container_t vm_container = PJ_container_get(vm->name().c_str());
- type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type);
- val_t value = PJ_value_get_or_new ("suspend", "1 0 0", type); //suspend is red
- new_pajePushState (MSG_get_clock(), vm_container, type, value);
- }
-}
-
-void TRACE_msg_vm_resume(msg_vm_t vm)
-{
- if (TRACE_msg_vm_is_enabled()){
- container_t vm_container = PJ_container_get(vm->name().c_str());
- type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type);
- new_pajePopState (MSG_get_clock(), vm_container, type);
- }
-}
-
-void TRACE_msg_vm_save(msg_vm_t vm)
-{
- if (TRACE_msg_vm_is_enabled()){
- container_t vm_container = PJ_container_get(vm->name().c_str());
- 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);
- }
-}
-
-void TRACE_msg_vm_restore(msg_vm_t vm)
-{
- if (TRACE_msg_vm_is_enabled()){
- container_t vm_container = PJ_container_get(vm->name().c_str());
- type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type);
- new_pajePopState (MSG_get_clock(), vm_container, type);
- }
-}
-
-// that's the end, let's destroy it
-void TRACE_msg_vm_end(msg_vm_t vm)
-{
- if (TRACE_msg_vm_is_enabled()) {
- container_t container = PJ_container_get(vm->name().c_str());
- PJ_container_remove_from_parent (container);
- PJ_container_free (container);
- }
-}
XBT_PRIVATE void TRACE_msg_process_sleep_in(msg_process_t process); //called from msg/gos.c
XBT_PRIVATE void TRACE_msg_process_sleep_out(msg_process_t process);
-/* declaration of instrumentation functions from instr_msg_vm.c */
-XBT_PRIVATE void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host, msg_host_t new_host);
-XBT_PRIVATE void TRACE_msg_vm_start(msg_vm_t vm);
-XBT_PRIVATE void TRACE_msg_vm_kill(msg_vm_t process);
-XBT_PRIVATE void TRACE_msg_vm_suspend(msg_vm_t vm);
-XBT_PRIVATE void TRACE_msg_vm_resume(msg_vm_t vm);
-XBT_PRIVATE void TRACE_msg_vm_save(msg_vm_t vm);
-XBT_PRIVATE void TRACE_msg_vm_restore(msg_vm_t vm);
-XBT_PRIVATE void TRACE_msg_vm_end(msg_vm_t vm);
-
SG_END_DECL()
XBT_PUBLIC(msg_process_t) MSG_process_create_with_environment(
vm->destroy();
});
- TRACE_msg_vm_end(vm);
+ if (TRACE_msg_vm_is_enabled()) {
+ container_t container = PJ_container_get(vm->name().c_str());
+ PJ_container_remove_from_parent(container);
+ PJ_container_free(container);
+ }
}
/** @brief Start a vm (i.e., boot the guest operating system)
{
simcall_vm_start(vm);
- TRACE_msg_vm_start(vm);
+ if (TRACE_msg_vm_is_enabled()) {
+ container_t vm_container = PJ_container_get(vm->name().c_str());
+ type_t type = PJ_type_get("MSG_VM_STATE", vm_container->type);
+ val_t value = PJ_value_get_or_new("start", "0 0 1", type); // start is blue
+ new_pajePushState(MSG_get_clock(), vm_container, type, value);
+ }
}
/** @brief Immediately kills all processes within the given VM. Any memory that they allocated will be leaked.
*/
void MSG_vm_shutdown(msg_vm_t vm)
{
- /* msg_vm_t equals to msg_host_t */
simcall_vm_shutdown(vm);
MSG_process_sleep(0.); // Make sure that the processes in the VM are killed in this scheduling round before processing
// (eg with the VM destroy)
- // TRACE_msg_vm_(vm);
}
/* We have two mailboxes. mbox is used to transfer migration data between source and destination PMs. mbox_ctl is used
vm->pimpl_vm_->isMigrating = false;
XBT_DEBUG("VM(%s) moved from PM(%s) to PM(%s)", sg_host_get_name(ms->vm), sg_host_get_name(ms->src_pm),
sg_host_get_name(ms->dst_pm));
- TRACE_msg_vm_change_host(ms->vm, ms->src_pm, ms->dst_pm);
+
+ if (TRACE_msg_vm_is_enabled()) {
+ static long long int counter = 0;
+ char key[INSTR_DEFAULT_STR_SIZE];
+ snprintf(key, INSTR_DEFAULT_STR_SIZE, "%lld", counter++);
+
+ // start link
+ container_t msg = PJ_container_get(vm->name().c_str());
+ type_t type = PJ_type_get("MSG_VM_LINK", PJ_type_get_root());
+ new_pajeStartLink(MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key);
+
+ // destroy existing container of this vm
+ container_t existing_container = PJ_container_get(vm->name().c_str());
+ PJ_container_remove_from_parent(existing_container);
+ PJ_container_free(existing_container);
+
+ // create new container on the new_host location
+ PJ_container_new(vm->name().c_str(), INSTR_MSG_VM, PJ_container_get(sg_host_get_name(ms->dst_pm)));
+
+ // end link
+ msg = PJ_container_get(vm->name().c_str());
+ type = PJ_type_get("MSG_VM_LINK", PJ_type_get_root());
+ new_pajeEndLink(MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key);
+ }
}
// Inform the SRC that the migration has been correctly performed
{
XBT_DEBUG("vm_suspend done");
- TRACE_msg_vm_suspend(vm);
+ if (TRACE_msg_vm_is_enabled()) {
+ container_t vm_container = PJ_container_get(vm->name().c_str());
+ type_t type = PJ_type_get("MSG_VM_STATE", vm_container->type);
+ val_t value = PJ_value_get_or_new("suspend", "1 0 0", type); // suspend is red
+ new_pajePushState(MSG_get_clock(), vm_container, type, value);
+ }
}
/** @brief Resume the execution of the VM. All processes on the VM run again.
{
simcall_vm_resume(vm);
- TRACE_msg_vm_resume(vm);
+ if (TRACE_msg_vm_is_enabled()) {
+ container_t vm_container = PJ_container_get(vm->name().c_str());
+ type_t type = PJ_type_get("MSG_VM_STATE", vm_container->type);
+ new_pajePopState(MSG_get_clock(), vm_container, type);
+ }
}
THROWF(vm_error, 0, "VM(%s) is migrating", sg_host_get_name(vm));
simcall_vm_save(vm);
- TRACE_msg_vm_save(vm);
+
+ if (TRACE_msg_vm_is_enabled()) {
+ container_t vm_container = PJ_container_get(vm->name().c_str());
+ 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.
{
simcall_vm_restore(vm);
- TRACE_msg_vm_restore(vm);
+ if (TRACE_msg_vm_is_enabled()) {
+ container_t vm_container = PJ_container_get(vm->name().c_str());
+ 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.
XBT_LOG_CONNECT(instr_config);
XBT_LOG_CONNECT(instr_msg);
XBT_LOG_CONNECT(instr_msg_process);
- XBT_LOG_CONNECT(instr_msg_vm);
XBT_LOG_CONNECT(instr_paje_containers);
XBT_LOG_CONNECT(instr_paje_header);
XBT_LOG_CONNECT(instr_paje_trace);
set(MSG_SRC
src/msg/instr_msg_process.cpp
src/msg/instr_msg_task.cpp
- src/msg/instr_msg_vm.cpp
src/msg/msg_actions.cpp
src/msg/msg_deployment.cpp
src/msg/msg_environment.cpp