X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f89bb4bc494cb511098326ec3f18adbe0739bf26..928dc2ffdce11b4ce364eda56a602c132ee6cb71:/src/instr/instr_platform.cpp diff --git a/src/instr/instr_platform.cpp b/src/instr/instr_platform.cpp index cbafbe50a5..0c785975c8 100644 --- a/src/instr/instr_platform.cpp +++ b/src/instr/instr_platform.cpp @@ -203,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. * @@ -223,32 +222,52 @@ 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& [node, _] : nodes) - fs << " \"" << node << "\";" << std::endl; + fs << " \"" << node << "\";\n"; 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& elm : edges) { + const char* src_s = static_cast(elm.second->src->data); + const char* dst_s = static_cast(elm.second->dst->data); + fs << src_s << "," << dst_s << std::endl; + } + 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) @@ -339,15 +358,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()); } @@ -509,5 +524,4 @@ void define_callbacks() [](s4u::Host const& host) { Container::by_name(host.get_name())->remove_from_parent(); }); } } -} // namespace instr -} // namespace simgrid +} // namespace simgrid::instr