X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4929b7f325bed62b338613c63af15c75a185effe..3a1ea70a418f393ca1677074e928c664022295bd:/src/instr/instr_platform.cpp diff --git a/src/instr/instr_platform.cpp b/src/instr/instr_platform.cpp index 7889d9717c..6e825621cc 100644 --- a/src/instr/instr_platform.cpp +++ b/src/instr/instr_platform.cpp @@ -53,8 +53,8 @@ static container_t lowestCommonAncestor(const simgrid::instr::Container* a1, con // find the lowest ancestor p = nullptr; - int i = ancestors_a1.size() - 1; - int j = ancestors_a2.size() - 1; + int i = static_cast(ancestors_a1.size()) - 1; + int j = static_cast(ancestors_a2.size()) - 1; while (i >= 0 && j >= 0) { container_t a1p = ancestors_a1.at(i); const simgrid::instr::Container* a2p = ancestors_a2.at(j); @@ -134,9 +134,9 @@ static void recursiveGraphExtraction(const simgrid::s4u::NetZone* netzone, conta } } - xbt_graph_t graph = xbt_graph_new_graph(0, nullptr); - std::map* nodes = new std::map(); - std::map* edges = new std::map(); + auto* graph = xbt_graph_new_graph(0, nullptr); + auto* nodes = new std::map(); + auto* edges = new std::map(); netzone->get_impl()->get_graph(graph, nodes, edges); for (auto elm : *edges) { @@ -161,7 +161,7 @@ static void recursiveNewVariableType(const std::string& new_typename, const std: if (root->get_name() == "LINK") root->by_name_or_create(std::string("b") + new_typename, color); - for (auto const& elm : root->children_) { + for (auto const& elm : root->get_children()) { recursiveNewVariableType(new_typename, color, elm.second.get()); } } @@ -177,7 +177,7 @@ static void recursiveNewUserVariableType(const std::string& father_type, const s if (root->get_name() == father_type) { root->by_name_or_create(new_typename, color); } - for (auto const& elm : root->children_) + for (auto const& elm : root->get_children()) recursiveNewUserVariableType(father_type, new_typename, color, elm.second.get()); } @@ -193,7 +193,7 @@ static void recursiveNewUserStateType(const std::string& father_type, const std: if (root->get_name() == father_type) root->by_name_or_create(new_typename); - for (auto const& elm : root->children_) + for (auto const& elm : root->get_children()) recursiveNewUserStateType(father_type, new_typename, elm.second.get()); } @@ -208,7 +208,7 @@ static void recursiveNewValueForUserStateType(const std::string& type_name, cons if (root->get_name() == type_name) static_cast(root)->add_entity_value(val, color); - for (auto const& elm : root->children_) + for (auto const& elm : root->get_children()) recursiveNewValueForUserStateType(type_name, val, color, elm.second.get()); } @@ -222,9 +222,9 @@ namespace instr { void platform_graph_export_graphviz(const std::string& output_filename) { - xbt_graph_t g = xbt_graph_new_graph(0, nullptr); - std::map* nodes = new std::map(); - std::map* edges = new std::map(); + auto* g = xbt_graph_new_graph(0, nullptr); + auto* nodes = new std::map(); + auto* edges = new std::map(); s4u::Engine::get_instance()->get_netzone_root()->extract_xbt_graph(g, nodes, edges); std::ofstream fs; @@ -266,11 +266,11 @@ static void on_netzone_creation(s4u::NetZone const& netzone) { std::string id = netzone.get_name(); if (Container::get_root() == nullptr) { - NetZoneContainer* root = new NetZoneContainer(id, 0, nullptr); + auto* root = new NetZoneContainer(id, 0, nullptr); xbt_assert(Container::get_root() == root); if (TRACE_smpi_is_enabled()) { - ContainerType* mpi = root->type_->by_name_or_create("MPI"); + auto* mpi = root->type_->by_name_or_create("MPI"); if (not TRACE_smpi_is_grouped()) mpi->by_name_or_create("MPI_STATE"); root->type_->by_name_or_create("MPI_LINK", mpi, mpi); @@ -286,7 +286,8 @@ static void on_netzone_creation(s4u::NetZone const& netzone) } if (TRACE_needs_platform()) { - NetZoneContainer* container = new NetZoneContainer(id, currentContainer.size(), currentContainer.back()); + auto level = static_cast(currentContainer.size()); + auto* container = new NetZoneContainer(id, level, currentContainer.back()); currentContainer.push_back(container); } } @@ -296,7 +297,7 @@ static void on_link_creation(s4u::Link const& link) if (currentContainer.empty()) // No ongoing parsing. Are you creating the loopback? return; - Container* container = new Container(link.get_name(), "LINK", currentContainer.back()); + auto* container = new Container(link.get_name(), "LINK", currentContainer.back()); if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (not TRACE_disable_link())) { VariableType* bandwidth = container->type_->by_name_or_create("bandwidth", ""); @@ -331,7 +332,7 @@ static void on_host_creation(s4u::Host const& host) container->type_->by_name_or_create("speed_used", "0.5 0.5 0.5"); if (TRACE_smpi_is_enabled() && TRACE_smpi_is_grouped()) { - ContainerType* mpi = container->type_->by_name_or_create("MPI"); + auto* mpi = container->type_->by_name_or_create("MPI"); mpi->by_name_or_create("MPI_STATE"); // TODO See if we can move this to the LoadBalancer plugin root->type_->by_name_or_create("MIGRATE_LINK", mpi, mpi); @@ -339,19 +340,12 @@ static void on_host_creation(s4u::Host const& host) } } -static void on_host_speed_change(s4u::Host const& host) -{ - Container::by_name(host.get_name()) - ->get_variable("speed") - ->set_event(surf_get_clock(), host.get_core_count() * host.get_available_speed()); -} - static void on_action_state_change(kernel::resource::Action const& action, kernel::resource::Action::State /* previous */) { - int n = action.get_variable()->get_number_of_constraint(); + auto n = static_cast(action.get_variable()->get_number_of_constraint()); - for (int i = 0; i < n; i++) { + for (unsigned i = 0; i < n; i++) { double value = action.get_variable()->get_value() * action.get_variable()->get_constraint_weight(i); /* Beware of composite actions: ptasks put links and cpus together. Extra pb: we cannot dynamic_cast from void* */ kernel::resource::Resource* resource = action.get_variable()->get_constraint(i)->get_id(); @@ -369,23 +363,10 @@ static void on_action_state_change(kernel::resource::Action const& action, } } -static void on_link_bandwidth_change(s4u::Link const& link) -{ - Container::by_name(link.get_name()) - ->get_variable("bandwidth") - ->set_event(surf_get_clock(), sg_bandwidth_factor * link.get_bandwidth()); -} - -static void on_netpoint_creation(kernel::routing::NetPoint const& netpoint) -{ - if (netpoint.is_router()) - new RouterContainer(netpoint.get_name(), currentContainer.back()); -} - static void on_platform_created() { currentContainer.clear(); - std::set* filter = new std::set(); + auto* filter = new std::set(); XBT_DEBUG("Starting graph extraction."); recursiveGraphExtraction(s4u::Engine::get_instance()->get_netzone_root(), Container::get_root(), filter); XBT_DEBUG("Graph extraction finished."); @@ -395,21 +376,20 @@ static void on_platform_created() static void on_actor_creation(s4u::Actor const& actor) { - const Container* root = Container::get_root(); - Container* container = Container::by_name(actor.get_host()->get_name()); + const Container* root = Container::get_root(); + Container* container = Container::by_name(actor.get_host()->get_name()); + std::string container_name = instr_pid(actor); - container->create_child(instr_pid(actor), "ACTOR"); - ContainerType* actor_type = container->type_->by_name_or_create("ACTOR"); - StateType* state = actor_type->by_name_or_create("ACTOR_STATE"); + container->create_child(container_name, "ACTOR"); + auto* actor_type = container->type_->by_name_or_create("ACTOR"); + auto* state = actor_type->by_name_or_create("ACTOR_STATE"); state->add_entity_value("suspend", "1 0 1"); state->add_entity_value("sleep", "1 1 0"); state->add_entity_value("receive", "1 0 0"); state->add_entity_value("send", "0 0 1"); state->add_entity_value("execute", "0 1 1"); root->type_->by_name_or_create("ACTOR_LINK", actor_type, actor_type); - root->type_->by_name_or_create("ACTOR_TASK_LINK", actor_type, actor_type); - std::string container_name = instr_pid(actor); actor.on_exit([container_name](bool failed) { if (failed) // kill means that this actor no longer exists, let's destroy it @@ -438,8 +418,8 @@ static void on_vm_creation(s4u::Host const& host) { const Container* container = new HostContainer(host, currentContainer.back()); const Container* root = Container::get_root(); - ContainerType* vm = container->type_->by_name_or_create("VM"); - StateType* state = vm->by_name_or_create("VM_STATE"); + auto* vm = container->type_->by_name_or_create("VM"); + auto* state = vm->by_name_or_create("VM_STATE"); state->add_entity_value("suspend", "1 0 1"); state->add_entity_value("sleep", "1 1 0"); state->add_entity_value("receive", "1 0 0"); @@ -456,12 +436,24 @@ void define_callbacks() if (TRACE_needs_platform()) { s4u::Engine::on_platform_created.connect(on_platform_created); s4u::Host::on_creation.connect(on_host_creation); - s4u::Host::on_speed_change.connect(on_host_speed_change); + s4u::Host::on_speed_change.connect([](s4u::Host const& host) { + Container::by_name(host.get_name()) + ->get_variable("speed") + ->set_event(surf_get_clock(), host.get_core_count() * host.get_available_speed()); + }); s4u::Link::on_creation.connect(on_link_creation); - s4u::Link::on_bandwidth_change.connect(on_link_bandwidth_change); + s4u::Link::on_bandwidth_change.connect([](s4u::Link const& link) { + Container::by_name(link.get_name()) + ->get_variable("bandwidth") + ->set_event(surf_get_clock(), sg_bandwidth_factor * link.get_bandwidth()); + }); s4u::NetZone::on_seal.connect([](s4u::NetZone const& /*netzone*/) { currentContainer.pop_back(); }); - kernel::routing::NetPoint::on_creation.connect(on_netpoint_creation); + kernel::routing::NetPoint::on_creation.connect([](kernel::routing::NetPoint const& netpoint) { + if (netpoint.is_router()) + new RouterContainer(netpoint.get_name(), currentContainer.back()); + }); } + s4u::NetZone::on_creation.connect(on_netzone_creation); kernel::resource::CpuAction::on_state_change.connect(on_action_state_change); @@ -501,6 +493,17 @@ void define_callbacks() s4u::Actor::on_host_change.connect(on_actor_host_change); } + if (TRACE_smpi_is_enabled() && TRACE_smpi_is_computing()) { + s4u::Exec::on_start.connect([](simgrid::s4u::Actor const& actor, s4u::Exec const& exec) { + Container::by_name(std::string("rank-") + std::to_string(actor.get_pid())) + ->get_state("MPI_STATE") + ->push_event("computing", new CpuTIData("compute", exec.get_cost())); + }); + s4u::Exec::on_completion.connect([](s4u::Actor const& actor, s4u::Exec const&) { + Container::by_name(std::string("rank-") + std::to_string(actor.get_pid()))->get_state("MPI_STATE")->pop_event(); + }); + } + if (TRACE_vm_is_enabled()) { s4u::Host::on_creation.connect(on_vm_creation); s4u::VirtualMachine::on_start.connect([](s4u::VirtualMachine const& vm) {