X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/18080b8f80c81ed30600da55f774a52cbd1101f8..95fddd0c107e8782e879758546c97e663a878452:/src/instr/instr_platform.cpp diff --git a/src/instr/instr_platform.cpp b/src/instr/instr_platform.cpp index deaa01a13d..fc0117d073 100644 --- a/src/instr/instr_platform.cpp +++ b/src/instr/instr_platform.cpp @@ -50,12 +50,9 @@ static simgrid::instr::Container* lowestCommonAncestor(const simgrid::instr::Con int j = static_cast(ancestors_a2.size()) - 1; while (i >= 0 && j >= 0) { simgrid::instr::Container* a1p = ancestors_a1.at(i); - const simgrid::instr::Container* a2p = ancestors_a2.at(j); - if (a1p == a2p) { - p = a1p; - } else { + if (a1p != ancestors_a2.at(j)) break; - } + p = a1p; i--; j--; } @@ -131,8 +128,7 @@ static void recursiveGraphExtraction(const simgrid::s4u::NetZone* netzone, const std::map> edges; netzone->get_impl()->get_graph(graph, &nodes, &edges); - for (auto const& elm : edges) { - const xbt_edge* edge = elm.second; + for (auto const& [_, edge] : edges) { linkContainers(simgrid::instr::Container::by_name(static_cast(edge->src->data)), simgrid::instr::Container::by_name(static_cast(edge->dst->data)), filter); } @@ -151,8 +147,8 @@ 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->get_children()) { - recursiveNewVariableType(new_typename, color, elm.second.get()); + for (auto const& [_, child] : root->get_children()) { + recursiveNewVariableType(new_typename, color, child.get()); } } @@ -167,8 +163,8 @@ static void recursiveNewUserVariableType(const std::string& parent_type, const s if (root->get_name() == parent_type) { root->by_name_or_create(new_typename, color); } - for (auto const& elm : root->get_children()) - recursiveNewUserVariableType(parent_type, new_typename, color, elm.second.get()); + for (auto const& [_, child] : root->get_children()) + recursiveNewUserVariableType(parent_type, new_typename, color, child.get()); } void instr_new_user_variable_type(const std::string& parent_type, const std::string& new_typename, @@ -183,8 +179,8 @@ static void recursiveNewUserStateType(const std::string& parent_type, const std: if (root->get_name() == parent_type) root->by_name_or_create(new_typename); - for (auto const& elm : root->get_children()) - recursiveNewUserStateType(parent_type, new_typename, elm.second.get()); + for (auto const& [_, child] : root->get_children()) + recursiveNewUserStateType(parent_type, new_typename, child.get()); } void instr_new_user_state_type(const std::string& parent_type, const std::string& new_typename) @@ -198,8 +194,8 @@ 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->get_children()) - recursiveNewValueForUserStateType(type_name, val, color, elm.second.get()); + for (auto const& [_, child] : root->get_children()) + recursiveNewValueForUserStateType(type_name, val, color, child.get()); } void instr_new_value_for_user_state_type(const std::string& type_name, const char* value, const std::string& color) @@ -207,8 +203,7 @@ void instr_new_value_for_user_state_type(const std::string& type_name, const cha recursiveNewValueForUserStateType(type_name, value, color, simgrid::instr::Container::get_root()->get_type()); } -namespace simgrid { -namespace instr { +namespace simgrid::instr { /** @brief Creates a file with the topology of the platform file used for the simulator. * @@ -227,32 +222,53 @@ void platform_graph_export_graphviz(const std::string& output_filename) xbt_assert(not fs.fail(), "Failed to open %s", output_filename.c_str()); if (g->directed) - fs << "digraph test {" << std::endl; + fs << "digraph test {\n"; else - fs << "graph test {" << std::endl; + fs << "graph test {\n"; - fs << " graph [overlap=scale]" << std::endl; + fs << " graph [overlap=scale]\n"; - fs << " node [shape=box, style=filled]" << std::endl; - fs << " node [width=.3, height=.3, style=filled, color=skyblue]" << std::endl << std::endl; + fs << " node [shape=box, style=filled]\n"; + fs << " node [width=.3, height=.3, style=filled, color=skyblue]\n\n"; - for (auto const& elm : nodes) - fs << " \"" << elm.first << "\";" << std::endl; + for (auto const& [node, _] : nodes) + fs << " \"" << node << "\";\n"; - for (auto const& elm : edges) { - const char* src_s = static_cast(elm.second->src->data); - const char* dst_s = static_cast(elm.second->dst->data); + for (auto const& [_, edge] : edges) { + const char* src_s = static_cast(edge->src->data); + const char* dst_s = static_cast(edge->dst->data); if (g->directed) - fs << " \"" << src_s << "\" -> \"" << dst_s << "\";" << std::endl; + fs << " \"" << src_s << "\" -> \"" << dst_s << "\";\n"; else - fs << " \"" << src_s << "\" -- \"" << dst_s << "\";" << std::endl; + fs << " \"" << src_s << "\" -- \"" << dst_s << "\";\n"; } - fs << "}" << std::endl; + fs << "}\n"; fs.close(); xbt_graph_free_graph(g, xbt_free_f, xbt_free_f, nullptr); } +void platform_graph_export_csv(const std::string& output_filename) +{ + auto* g = xbt_graph_new_graph(0, nullptr); + std::map> nodes; + std::map> edges; + s4u::Engine::get_instance()->get_netzone_root()->extract_xbt_graph(g, &nodes, &edges); + + std::ofstream fs; + fs.open(output_filename, std::ofstream::out); + xbt_assert(not fs.fail(), "Failed to open %s", output_filename.c_str()); + + fs << "src,dst" << std::endl; + for (auto const& [_, edge] : edges) { + const char* src_s = static_cast(edge->src->data); + const char* dst_s = static_cast(edge->dst->data); + fs << src_s << "," << dst_s << "\n"; + } + fs.close(); + xbt_graph_free_graph(g, xbt_free_f, xbt_free_f, nullptr); +} + /* Callbacks */ static std::vector currentContainer; /* push and pop, used only in creation */ static void on_netzone_creation(s4u::NetZone const& netzone) @@ -343,15 +359,11 @@ static void on_action_state_change(kernel::resource::Action const& action, double value = action.get_rate() * 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(); - const kernel::resource::CpuImpl* cpu = dynamic_cast(resource); - - if (cpu != nullptr) + if (const auto* cpu = dynamic_cast(resource)) resource_set_utilization("HOST", "speed_used", cpu->get_cname(), action.get_category(), value, action.get_last_update(), simgrid_get_clock() - action.get_last_update()); - const kernel::resource::StandardLinkImpl* link = dynamic_cast(resource); - - if (link != nullptr) + if (const auto* link = dynamic_cast(resource)) resource_set_utilization("LINK", "bandwidth_used", link->get_cname(), action.get_category(), value, action.get_last_update(), simgrid_get_clock() - action.get_last_update()); } @@ -438,7 +450,7 @@ void define_callbacks() s4u::Link::on_bandwidth_change_cb([](s4u::Link const& link) { Container::by_name(link.get_name()) ->get_variable("bandwidth") - ->set_event(simgrid_get_clock(), sg_bandwidth_factor * link.get_bandwidth()); + ->set_event(simgrid_get_clock(), kernel::resource::NetworkModel::cfg_bandwidth_factor * link.get_bandwidth()); }); s4u::NetZone::on_seal_cb([](s4u::NetZone const& /*netzone*/) { currentContainer.pop_back(); }); kernel::routing::NetPoint::on_creation.connect([](kernel::routing::NetPoint const& netpoint) { @@ -513,5 +525,4 @@ void define_callbacks() [](s4u::Host const& host) { Container::by_name(host.get_name())->remove_from_parent(); }); } } -} // namespace instr -} // namespace simgrid +} // namespace simgrid::instr