X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2779d8132079c0e1294642981661872af4c30de6..172a73b13fe909117c7fbf3d69d4ce5e87efdbc6:/src/msg/msg_vm.cpp diff --git a/src/msg/msg_vm.cpp b/src/msg/msg_vm.cpp index c6f54a23fb..00ea1e87ec 100644 --- a/src/msg/msg_vm.cpp +++ b/src/msg/msg_vm.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2015. The SimGrid Team. +/* Copyright (c) 2012-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -11,23 +11,22 @@ #include -#include "src/instr/instr_private.h" -#include "src/msg/msg_private.h" +#include "src/instr/instr_private.hpp" +#include "src/msg/msg_private.hpp" #include "src/plugins/vm/VirtualMachineImpl.hpp" #include "src/plugins/vm/VmHostExt.hpp" #include "simgrid/host.h" #include "simgrid/simix.hpp" -SG_BEGIN_DECL() +extern "C" { -struct dirty_page { +struct s_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; +typedef s_dirty_page* dirty_page_t; XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_vm, msg, "Cloud-oriented parts of the MSG API"); @@ -171,9 +170,9 @@ void MSG_vm_destroy(msg_vm_t vm) simgrid::simix::kernelImmediate([vm]() { vm->destroy(); }); if (TRACE_msg_vm_is_enabled()) { - container_t container = PJ_container_get(vm->getCname()); - PJ_container_remove_from_parent(container); - PJ_container_free(container); + container_t container = simgrid::instr::Container::byName(vm->getName()); + container->removeFromParent(); + delete container; } } @@ -186,10 +185,10 @@ void MSG_vm_start(msg_vm_t vm) { vm->start(); if (TRACE_msg_vm_is_enabled()) { - container_t vm_container = PJ_container_get(vm->getCname()); - type_t type = PJ_type_get("MSG_VM_STATE", vm_container->type); - value* val = value::get_or_new("start", "0 0 1", type); // start is blue - new PushStateEvent(MSG_get_clock(), vm_container, type, val); + container_t vm_container = simgrid::instr::Container::byName(vm->getName()); + simgrid::instr::Type* state = vm_container->type_->byName("MSG_VM_STATE"); + state->addEntityValue("start", "0 0 1"); // start is blue + new simgrid::instr::PushStateEvent(MSG_get_clock(), vm_container, state, state->getEntityValue("start")); } } @@ -211,18 +210,18 @@ void MSG_vm_shutdown(msg_vm_t vm) static std::string get_mig_process_tx_name(msg_vm_t vm, msg_host_t src_pm, msg_host_t dst_pm) { - return std::string("__pr_mig_tx:") + vm->getName() + "(" + src_pm->getName() + "-" + dst_pm->getName() + ")"; + return std::string("__pr_mig_tx:") + vm->getCname() + "(" + src_pm->getCname() + "-" + dst_pm->getCname() + ")"; } static std::string get_mig_process_rx_name(msg_vm_t vm, msg_host_t src_pm, msg_host_t dst_pm) { - return std::string("__pr_mig_rx:") + vm->getName() + "(" + src_pm->getName() + "-" + dst_pm->getName() + ")"; + return std::string("__pr_mig_rx:") + vm->getCname() + "(" + src_pm->getCname() + "-" + dst_pm->getCname() + ")"; } static std::string get_mig_task_name(msg_vm_t vm, msg_host_t src_pm, msg_host_t dst_pm, int stage) { - return std::string("__task_mig_stage") + std::to_string(stage) + ":" + vm->getName() + "(" + src_pm->getName() + "-" + - dst_pm->getName() + ")"; + return std::string("__task_mig_stage") + std::to_string(stage) + ":" + vm->getCname() + "(" + src_pm->getCname() + + "-" + dst_pm->getCname() + ")"; } struct migration_session { @@ -242,7 +241,7 @@ static int migration_rx_fun(int argc, char *argv[]) XBT_DEBUG("mig: rx_start"); // The structure has been created in the do_migration function and should only be freed in the same place ;) - struct migration_session* ms = static_cast(MSG_process_get_data(MSG_process_self())); + migration_session* ms = static_cast(MSG_process_get_data(MSG_process_self())); bool received_finalize = false; @@ -290,34 +289,32 @@ static int migration_rx_fun(int argc, char *argv[]) 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); + std::string key = std::to_string(counter); counter++; // start link - container_t msg = PJ_container_get(vm->getCname()); - type_t type = PJ_type_get("MSG_VM_LINK", PJ_type_get_root()); - new StartLinkEvent(MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key); + container_t msg = simgrid::instr::Container::byName(vm->getName()); + simgrid::instr::Type* type = simgrid::instr::Type::getRootType()->byName("MSG_VM_LINK"); + new simgrid::instr::StartLinkEvent(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->getCname()); - PJ_container_remove_from_parent(existing_container); - PJ_container_free(existing_container); + container_t existing_container = simgrid::instr::Container::byName(vm->getName()); + existing_container->removeFromParent(); + delete existing_container; // create new container on the new_host location - PJ_container_new(vm->getCname(), INSTR_MSG_VM, PJ_container_get(ms->dst_pm->getCname())); + new simgrid::instr::Container(vm->getCname(), "MSG_VM", simgrid::instr::Container::byName(ms->dst_pm->getName())); // end link - msg = PJ_container_get(vm->getCname()); - type = PJ_type_get("MSG_VM_LINK", PJ_type_get_root()); - new EndLinkEvent(MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key); + msg = simgrid::instr::Container::byName(vm->getName()); + type = simgrid::instr::Type::getRootType()->byName("MSG_VM_LINK"); + new simgrid::instr::EndLinkEvent(MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key); } // Inform the SRC that the migration has been correctly performed std::string task_name = get_mig_task_name(ms->vm, ms->src_pm, ms->dst_pm, 4); msg_task_t task = MSG_task_create(task_name.c_str(), 0, 0, nullptr); msg_error_t ret = MSG_task_send(task, ms->mbox_ctl); - // xbt_assert(ret == MSG_OK); if(ret == MSG_HOST_FAILURE){ // The DST has crashed, this is a problem has the VM since we are not sure whether SRC is considering that the VM // has been correctly migrated on the DST node @@ -338,7 +335,7 @@ static void start_dirty_page_tracking(msg_vm_t vm) if (vm->pimpl_vm_->dp_objs.empty()) return; - for (auto elm : vm->pimpl_vm_->dp_objs) { + for (auto const& elm : vm->pimpl_vm_->dp_objs) { dirty_page_t dp = elm.second; double remaining = MSG_task_get_flops_amount(dp->task); dp->prev_clock = MSG_get_clock(); @@ -367,14 +364,13 @@ static double lookup_computed_flop_counts(msg_vm_t vm, int stage_for_fancy_debug { double total = 0; - for (auto elm : vm->pimpl_vm_->dp_objs) { + for (auto const& elm : vm->pimpl_vm_->dp_objs) { const char* key = elm.first.c_str(); dirty_page_t dp = elm.second; double remaining = MSG_task_get_flops_amount(dp->task); double clock = MSG_get_clock(); - // total += calc_updated_pages(key, vm, dp, remaining, clock); total += get_computed(key, vm, dp, remaining, clock); dp->prev_remaining = remaining; @@ -432,7 +428,6 @@ void MSG_host_del_task(msg_host_t host, msg_task_t task) if (vm->pimpl_vm_->dp_enabled) { double remaining = MSG_task_get_flops_amount(task); double clock = MSG_get_clock(); - // double updated = calc_updated_pages(key, host, dp, remaining, clock); double updated = get_computed(key, vm, dp, remaining, clock); // was host instead of vm vm->pimpl_vm_->dp_updated_by_deleted_tasks += updated; @@ -498,8 +493,6 @@ static sg_size_t get_updated_size(double computed, double dp_rate, double dp_cap double updated_size = computed * dp_rate; XBT_DEBUG("updated_size %f dp_rate %f", updated_size, dp_rate); if (updated_size > dp_cap) { - // XBT_INFO("mig-stage2.%d: %f bytes updated, but cap it with the working set size %f", stage2_round, updated_size, - // dp_cap); updated_size = dp_cap; } @@ -511,7 +504,7 @@ static int migration_tx_fun(int argc, char *argv[]) XBT_DEBUG("mig: tx_start"); // Note that the ms structure has been allocated in do_migration and hence should be freed in the same function ;) - migration_session *ms = static_cast(MSG_process_get_data(MSG_process_self())); + migration_session* ms = static_cast(MSG_process_get_data(MSG_process_self())); double host_speed = ms->vm->pimpl_vm_->getPm()->getSpeed(); s_vm_params_t params; @@ -710,7 +703,7 @@ void MSG_vm_migrate(msg_vm_t vm, msg_host_t dst_pm) vm->pimpl_vm_->isMigrating = true; - struct migration_session *ms = xbt_new(struct migration_session, 1); + migration_session* ms = xbt_new(migration_session, 1); ms->vm = vm; ms->src_pm = src_pm; ms->dst_pm = dst_pm; @@ -773,10 +766,10 @@ void MSG_vm_suspend(msg_vm_t vm) XBT_DEBUG("vm_suspend done"); if (TRACE_msg_vm_is_enabled()) { - container_t vm_container = PJ_container_get(vm->getCname()); - type_t type = PJ_type_get("MSG_VM_STATE", vm_container->type); - value* val = value::get_or_new("suspend", "1 0 0", type); // suspend is red - new PushStateEvent(MSG_get_clock(), vm_container, type, val); + container_t vm_container = simgrid::instr::Container::byName(vm->getName()); + simgrid::instr::Type* state = vm_container->type_->byName("MSG_VM_STATE"); + state->addEntityValue("suspend", "1 0 0"); // suspend is red + new simgrid::instr::PushStateEvent(MSG_get_clock(), vm_container, state, state->getEntityValue("suspend")); } } @@ -790,9 +783,9 @@ void MSG_vm_resume(msg_vm_t vm) vm->pimpl_vm_->resume(); if (TRACE_msg_vm_is_enabled()) { - container_t vm_container = PJ_container_get(vm->getCname()); - type_t type = PJ_type_get("MSG_VM_STATE", vm_container->type); - new PopStateEvent(MSG_get_clock(), vm_container, type); + container_t vm_container = simgrid::instr::Container::byName(vm->getName()); + simgrid::instr::Type* type = vm_container->type_->byName("MSG_VM_STATE"); + new simgrid::instr::PopStateEvent(MSG_get_clock(), vm_container, type); } } @@ -834,5 +827,4 @@ void MSG_vm_set_bound(msg_vm_t vm, double bound) { simgrid::simix::kernelImmediate([vm, bound]() { vm->pimpl_vm_->setBound(bound); }); } - -SG_END_DECL() +}