From: Frederic Suter Date: Wed, 25 Apr 2018 13:22:11 +0000 (+0200) Subject: use signals a bit more to create tracing stuff X-Git-Tag: v3.20~324^2~2^2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/149757f655ffaf7bc403d634de3ef04b72b7a067 use signals a bit more to create tracing stuff --- diff --git a/include/simgrid/s4u/Engine.hpp b/include/simgrid/s4u/Engine.hpp index 52f96c5d13..c587b9833e 100644 --- a/include/simgrid/s4u/Engine.hpp +++ b/include/simgrid/s4u/Engine.hpp @@ -208,7 +208,10 @@ private: /** Callback fired when the platform is created (ie, the xml file parsed), * right before the actual simulation starts. */ -extern XBT_PUBLIC xbt::signal onPlatformCreated; +extern XBT_PUBLIC xbt::signal on_platform_created; + +/** Callback fired when the platform is about to be created (ie, just before the xml file is parsed) */ +extern XBT_PUBLIC xbt::signal on_platform_creation; /** Callback fired when the main simulation loop ends, just before the end of Engine::run() */ extern XBT_PUBLIC xbt::signal onSimulationEnd; diff --git a/src/bindings/lua/lua_platf.cpp b/src/bindings/lua/lua_platf.cpp index a52a7070d8..6ff1fd721d 100644 --- a/src/bindings/lua/lua_platf.cpp +++ b/src/bindings/lua/lua_platf.cpp @@ -61,13 +61,13 @@ static simgrid::s4u::Link::SharingPolicy link_policy_get_by_name(const char* pol int console_open(lua_State *L) { sg_platf_init(); - sg_platf_begin(); + simgrid::s4u::on_platform_creation(); return 0; } int console_close(lua_State *L) { - sg_platf_end(); + simgrid::s4u::on_platform_created(); sg_platf_exit(); return 0; } diff --git a/src/include/instr/instr_interface.hpp b/src/include/instr/instr_interface.hpp deleted file mode 100644 index e4cdb94200..0000000000 --- a/src/include/instr/instr_interface.hpp +++ /dev/null @@ -1,16 +0,0 @@ -/* Copyright (c) 2012-2018. 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. */ - -#ifndef SIMGRID_INSTR_INTERFACE_HPP -#define SIMGRID_INSTR_INTERFACE_HPP - -#include "xbt.h" - -XBT_PUBLIC int TRACE_start(); -XBT_PUBLIC int TRACE_end(); -XBT_PUBLIC void TRACE_global_init(); -XBT_PUBLIC void TRACE_help(int detailed); - -#endif diff --git a/src/include/xbt/parmap.hpp b/src/include/xbt/parmap.hpp index 5f91ac4175..1bde553e5c 100644 --- a/src/include/xbt/parmap.hpp +++ b/src/include/xbt/parmap.hpp @@ -10,6 +10,7 @@ #include "src/internal_config.h" // HAVE_FUTEX_H #include "src/kernel/context/Context.hpp" +#include "xbt/xbt_os_thread.h" #include diff --git a/src/instr/instr_config.cpp b/src/instr/instr_config.cpp index 1f76e6ad89..c8c2ea0ca3 100644 --- a/src/instr/instr_config.cpp +++ b/src/instr/instr_config.cpp @@ -75,20 +75,23 @@ static bool trace_active = false; simgrid::instr::TraceFormat simgrid::instr::trace_format = simgrid::instr::TraceFormat::Paje; -int TRACE_start() +void TRACE_start() { + if (trace_active) + return; + // tracing system must be: // - enabled (with --cfg=tracing:yes) // - already configured (TRACE_global_init already called) if (TRACE_is_enabled()) { - instr_routing_define_callbacks(); + instr_define_callbacks(); XBT_DEBUG("Tracing starts"); /* init the tracing module to generate the right output */ /* open the trace file(s) */ std::string format = simgrid::config::get_value(OPT_TRACING_FORMAT); - XBT_DEBUG("Tracing format %s\n", format.c_str()); + XBT_DEBUG("Tracing format %s", format.c_str()); if (format == "Paje") { TRACE_paje_start(); } else if (format == "TI") { @@ -98,50 +101,40 @@ int TRACE_start() xbt_die("Unknown trace format :%s ", format.c_str()); } - /* activate trace */ - if (trace_active) { - THROWF(tracing_error, 0, "Tracing is already active"); - } trace_active = true; XBT_DEBUG("Tracing is on"); } - return 0; } -int TRACE_end() +void TRACE_end() { - int retval; - if (not trace_active) { - retval = 1; - } else { - retval = 0; - - /* dump trace buffer */ - TRACE_last_timestamp_to_dump = surf_get_clock(); - TRACE_paje_dump_buffer(true); - - simgrid::instr::Type* root_type = simgrid::instr::Container::getRoot()->type_; - /* destroy all data structures of tracing (and free) */ - delete simgrid::instr::Container::getRoot(); - delete root_type; - - /* close the trace files */ - std::string format = simgrid::config::get_value(OPT_TRACING_FORMAT); - XBT_DEBUG("Tracing format %s\n", format.c_str()); - if (format == "Paje") { - TRACE_paje_end(); - } else if (format == "TI") { - TRACE_TI_end(); - }else{ - xbt_die("Unknown trace format :%s ", format.c_str()); - } + if (not trace_active) + return; - /* de-activate trace */ - trace_active = false; - XBT_DEBUG("Tracing is off"); - XBT_DEBUG("Tracing system is shutdown"); + /* dump trace buffer */ + TRACE_last_timestamp_to_dump = surf_get_clock(); + TRACE_paje_dump_buffer(true); + + simgrid::instr::Type* root_type = simgrid::instr::Container::getRoot()->type_; + /* destroy all data structures of tracing (and free) */ + delete simgrid::instr::Container::getRoot(); + delete root_type; + + /* close the trace files */ + std::string format = simgrid::config::get_value(OPT_TRACING_FORMAT); + XBT_DEBUG("Tracing format %s\n", format.c_str()); + if (format == "Paje") { + TRACE_paje_end(); + } else if (format == "TI") { + TRACE_TI_end(); + } else { + xbt_die("Unknown trace format :%s ", format.c_str()); } - return retval; + + /* de-activate trace */ + trace_active = false; + XBT_DEBUG("Tracing is off"); + XBT_DEBUG("Tracing system is shutdown"); } bool TRACE_needs_platform () diff --git a/src/instr/instr_private.hpp b/src/instr/instr_private.hpp index 579758ce0f..e7e5c18a5e 100644 --- a/src/instr/instr_private.hpp +++ b/src/instr/instr_private.hpp @@ -8,7 +8,6 @@ #include -#include "instr/instr_interface.hpp" #include "simgrid/instr.h" #include "simgrid_config.h" #include "src/instr/instr_paje_containers.hpp" @@ -249,15 +248,19 @@ XBT_PRIVATE void TRACE_surf_link_set_utilization(const char* resource, const cha extern XBT_PRIVATE std::set trivaNodeTypes; extern XBT_PRIVATE std::set trivaEdgeTypes; XBT_PRIVATE long long int instr_new_paje_id(); -XBT_PRIVATE void instr_routing_define_callbacks(); +XBT_PRIVATE void instr_define_callbacks(); void instr_new_variable_type(std::string new_typename, std::string color); void instr_new_user_variable_type(std::string father_type, std::string new_typename, std::string color); void instr_new_user_state_type(std::string father_type, std::string new_typename); void instr_new_value_for_user_state_type(std::string new_typename, const char* value, std::string color); /* instr_config.c */ +XBT_PRIVATE void TRACE_start(); XBT_PRIVATE void TRACE_TI_start(); XBT_PRIVATE void TRACE_TI_end(); +XBT_PRIVATE void TRACE_end(); +XBT_PRIVATE void TRACE_global_init(); +XBT_PRIVATE void TRACE_help(int detailed); XBT_PRIVATE void TRACE_paje_dump_buffer(bool force); XBT_PRIVATE void dump_comment_file(std::string filename); diff --git a/src/kernel/context/Context.hpp b/src/kernel/context/Context.hpp index 5d2b69dc54..8fa974730e 100644 --- a/src/kernel/context/Context.hpp +++ b/src/kernel/context/Context.hpp @@ -6,7 +6,6 @@ #ifndef SIMGRID_KERNEL_CONTEXT_CONTEXT_HPP #define SIMGRID_KERNEL_CONTEXT_CONTEXT_HPP -#include "instr/instr_interface.hpp" #include "src/internal_config.h" #include "src/simix/smx_network_private.hpp" diff --git a/src/msg/msg_global.cpp b/src/msg/msg_global.cpp index b3a49bdf3a..f94fdf3d1f 100644 --- a/src/msg/msg_global.cpp +++ b/src/msg/msg_global.cpp @@ -6,8 +6,8 @@ #include "simgrid/s4u/Engine.hpp" #include "simgrid/s4u/Host.hpp" -#include "instr/instr_interface.hpp" #include "mc/mc.h" +#include "src/instr/instr_private.hpp" #include "src/msg/msg_private.hpp" #include diff --git a/src/s4u/s4u_Engine.cpp b/src/s4u/s4u_Engine.cpp index 6b174d58f5..4daf853d49 100644 --- a/src/s4u/s4u_Engine.cpp +++ b/src/s4u/s4u_Engine.cpp @@ -5,7 +5,6 @@ /* 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 "instr/instr_interface.hpp" #include "mc/mc.h" #include "simgrid/kernel/routing/NetPoint.hpp" #include "simgrid/kernel/routing/NetZoneImpl.hpp" @@ -15,6 +14,7 @@ #include "simgrid/s4u/NetZone.hpp" #include "simgrid/s4u/Storage.hpp" #include "simgrid/simix.h" +#include "src/instr/instr_private.hpp" #include "src/kernel/EngineImpl.hpp" #include "src/surf/network_interface.hpp" #include "surf/surf.hpp" // routing_platf. FIXME:KILLME. SOON @@ -23,7 +23,8 @@ XBT_LOG_NEW_CATEGORY(s4u, "Log channels of the S4U (Simgrid for you) interface") namespace simgrid { namespace s4u { -xbt::signal onPlatformCreated; +xbt::signal on_platform_creation; +xbt::signal on_platform_created; xbt::signal onSimulationEnd; xbt::signal onTimeAdvance; xbt::signal onDeadlock; diff --git a/src/simdag/sd_global.cpp b/src/simdag/sd_global.cpp index 81682d44d5..35f4fd9204 100644 --- a/src/simdag/sd_global.cpp +++ b/src/simdag/sd_global.cpp @@ -7,7 +7,7 @@ #include "simgrid/kernel/resource/Action.hpp" #include "simgrid/s4u/Engine.hpp" #include "simgrid/sg_config.hpp" -#include "src/include/instr/instr_interface.hpp" +#include "src/instr/instr_private.hpp" #include "src/surf/surf_interface.hpp" XBT_LOG_NEW_CATEGORY(sd, "Logging specific to SimDag"); diff --git a/src/simgrid/sg_config.cpp b/src/simgrid/sg_config.cpp index c16b0c630f..70affbfd4f 100644 --- a/src/simgrid/sg_config.cpp +++ b/src/simgrid/sg_config.cpp @@ -6,8 +6,8 @@ /* sg_config: configuration infrastructure for the simulation world */ #include "simgrid/sg_config.hpp" -#include "instr/instr_interface.hpp" #include "simgrid/instr.h" +#include "src/instr/instr_private.hpp" #include "src/internal_config.h" #include "src/kernel/lmm/maxmin.hpp" #include "src/mc/mc_config.hpp" diff --git a/src/simix/smx_global.cpp b/src/simix/smx_global.cpp index bf34320c46..dfee2be40b 100644 --- a/src/simix/smx_global.cpp +++ b/src/simix/smx_global.cpp @@ -208,7 +208,7 @@ void SIMIX_global_init(int *argc, char **argv) #endif /* register a function to be called by SURF after the environment creation */ sg_platf_init(); - simgrid::s4u::onPlatformCreated.connect(SIMIX_post_create_environment); + simgrid::s4u::on_platform_created.connect(SIMIX_post_create_environment); simgrid::s4u::Host::onCreation.connect([](simgrid::s4u::Host& host) { if (host.extension() == nullptr) // another callback to the same signal may have created it host.extension_set(new simgrid::simix::Host()); diff --git a/src/simix/smx_private.hpp b/src/simix/smx_private.hpp index d8c2e13aba..bcbb2f6a8d 100644 --- a/src/simix/smx_private.hpp +++ b/src/simix/smx_private.hpp @@ -8,6 +8,7 @@ #include "simgrid/s4u/Actor.hpp" #include "src/kernel/context/Context.hpp" +#include #include #include diff --git a/src/surf/instr_routing.cpp b/src/surf/instr_routing.cpp index b70294a5db..07a62ca514 100644 --- a/src/surf/instr_routing.cpp +++ b/src/surf/instr_routing.cpp @@ -153,7 +153,6 @@ static void recursiveGraphExtraction(simgrid::s4u::NetZone* netzone, container_t static void instr_netzone_on_creation(simgrid::s4u::NetZone& netzone) { std::string id = netzone.get_name(); - if (simgrid::instr::Container::getRoot() == nullptr) { simgrid::instr::NetZoneContainer* root = new simgrid::instr::NetZoneContainer(id, 0, nullptr); @@ -257,7 +256,7 @@ static void instr_host_on_creation(simgrid::s4u::Host& host) static void instr_netpoint_on_creation(simgrid::kernel::routing::NetPoint* netpoint) { - if (netpoint->is_router() && TRACE_is_enabled() && TRACE_needs_platform()) + if (netpoint->is_router() && TRACE_needs_platform() && TRACE_is_enabled()) new simgrid::instr::RouterContainer(netpoint->get_cname(), currentContainer.back()); } @@ -273,14 +272,14 @@ static void instr_on_platform_created() TRACE_paje_dump_buffer(true); } -void instr_routing_define_callbacks() +void instr_define_callbacks() { // always need the callbacks to zones (we need only the root zone), to create the rootContainer and the rootType // properly if (TRACE_needs_platform()) { + simgrid::s4u::on_platform_created.connect(instr_on_platform_created); simgrid::s4u::Host::onCreation.connect(instr_host_on_creation); simgrid::s4u::Link::onCreation.connect(instr_link_on_creation); - simgrid::s4u::onPlatformCreated.connect(instr_on_platform_created); } simgrid::s4u::NetZone::onCreation.connect(instr_netzone_on_creation); simgrid::s4u::NetZone::onSeal.connect(instr_netzone_on_seal); diff --git a/src/surf/network_ns3.cpp b/src/surf/network_ns3.cpp index 6fc7185e19..372e1291db 100644 --- a/src/surf/network_ns3.cpp +++ b/src/surf/network_ns3.cpp @@ -165,7 +165,7 @@ NetworkNS3Model::NetworkNS3Model() : NetworkModel(Model::UpdateAlgo::Full) }); simgrid::surf::on_cluster.connect(&clusterCreation_cb); - simgrid::s4u::onPlatformCreated.connect(&postparse_cb); + simgrid::s4u::on_platform_created.connect(&postparse_cb); simgrid::s4u::NetZone::onRouteCreation.connect(&routeCreation_cb); } diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index 9f71bc53b4..2577e4fd53 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -16,6 +16,7 @@ #include "simgrid/kernel/routing/VivaldiZone.hpp" #include "simgrid/s4u/Engine.hpp" #include "src/include/simgrid/sg_config.hpp" +#include "src/instr/instr_private.hpp" #include "src/kernel/EngineImpl.hpp" #include "src/simix/smx_host_private.hpp" #include "src/simix/smx_private.hpp" @@ -49,13 +50,14 @@ static simgrid::kernel::routing::NetZoneImpl* routing_get_current() /** Module management function: creates all internal data structures */ void sg_platf_init() { - simgrid::s4u::onPlatformCreated.connect(check_disk_attachment); + simgrid::s4u::on_platform_creation.connect(TRACE_start); + simgrid::s4u::on_platform_created.connect(check_disk_attachment); } /** Module management function: frees all internal data structures */ void sg_platf_exit() { simgrid::surf::on_cluster.disconnectSlots(); - simgrid::s4u::onPlatformCreated.disconnectSlots(); + simgrid::s4u::on_platform_created.disconnectSlots(); /* make sure that we will reinit the models while loading the platf once reinited */ surf_parse_models_setup_already_called = 0; @@ -492,12 +494,6 @@ void sg_platf_new_peer(simgrid::kernel::routing::PeerCreationArgs* peer) host->pimpl_cpu->set_speed_trace(peer->speed_trace); } -void sg_platf_begin() { /* Do nothing: just for symmetry of user code */ } - -void sg_platf_end() { - simgrid::s4u::onPlatformCreated(); -} - /* Pick the right models for CPU, net and host, and call their model_init_preparse */ static void surf_config_models_setup() { @@ -617,7 +613,6 @@ simgrid::s4u::NetZone* sg_platf_new_Zone_begin(simgrid::kernel::routing::ZoneCre /* set the new current component of the tree */ current_routing = new_zone; - simgrid::s4u::NetZone::onCreation(*new_zone); // notify the signal return new_zone; diff --git a/src/surf/surf_interface.cpp b/src/surf/surf_interface.cpp index 2ed96e5e92..ed1bd2a8a7 100644 --- a/src/surf/surf_interface.cpp +++ b/src/surf/surf_interface.cpp @@ -4,10 +4,10 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "surf_interface.hpp" -#include "instr/instr_interface.hpp" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals #include "mc/mc.h" #include "simgrid/s4u/Engine.hpp" #include "simgrid/sg_config.hpp" +#include "src/instr/instr_private.hpp" // TRACE_end(). FIXME: remove by subscribing tracing to the surf signals #include "src/internal_config.h" #include "src/surf/HostImpl.hpp" #include "src/surf/xml/platf.hpp" diff --git a/src/surf/surf_private.hpp b/src/surf/surf_private.hpp index fc2e885fc2..64319f3586 100644 --- a/src/surf/surf_private.hpp +++ b/src/surf/surf_private.hpp @@ -21,6 +21,5 @@ XBT_PRIVATE std::ifstream* surf_ifsopen(std::string name); XBT_PRIVATE int __surf_is_absolute_file_path(const char* file_path); XBT_PRIVATE void check_disk_attachment(); -XBT_PRIVATE void parse_after_config(); #endif diff --git a/src/surf/xml/platf_private.hpp b/src/surf/xml/platf_private.hpp index b1c9fab897..793941dbc9 100644 --- a/src/surf/xml/platf_private.hpp +++ b/src/surf/xml/platf_private.hpp @@ -185,9 +185,6 @@ public: void routing_cluster_add_backbone(simgrid::kernel::resource::LinkImpl* bb); /*** END of the parsing cruft ***/ -XBT_PUBLIC void sg_platf_begin(); // Start a new platform -XBT_PUBLIC void sg_platf_end(); // Finish the creation of the platform - XBT_PUBLIC simgrid::s4u::NetZone* sg_platf_new_Zone_begin(simgrid::kernel::routing::ZoneCreationArgs* zone); // Begin description of new Zone XBT_PUBLIC void sg_platf_new_Zone_seal(); // That Zone is fully described diff --git a/src/surf/xml/surfxml_parseplatf.cpp b/src/surf/xml/surfxml_parseplatf.cpp index 14767edce3..0524b4dc23 100644 --- a/src/surf/xml/surfxml_parseplatf.cpp +++ b/src/surf/xml/surfxml_parseplatf.cpp @@ -4,7 +4,6 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "surf/surf.hpp" -#include "instr/instr_interface.hpp" // TRACE_start(). FIXME: remove by subscribing tracing to the surf signals #include "src/surf/cpu_interface.hpp" #include "src/surf/network_interface.hpp" #include "src/surf/surf_interface.hpp" @@ -60,15 +59,6 @@ void sg_platf_trace_connect(simgrid::kernel::routing::TraceConnectCreationArgs* } } -static int after_config_done; -void parse_after_config() { - if (not after_config_done) { - TRACE_start(); - - after_config_done = 1; - } -} - /* This function acts as a main in the parsing area. */ void parse_platform_file(const char *file) { @@ -105,7 +95,6 @@ void parse_platform_file(const char *file) int parse_status; /* init the flex parser */ - after_config_done = 0; surf_parse_open(file); /* Do the actual parsing */ diff --git a/src/surf/xml/surfxml_sax_cb.cpp b/src/surf/xml/surfxml_sax_cb.cpp index 91c0d5a1ca..b0b5dcbad6 100644 --- a/src/surf/xml/surfxml_sax_cb.cpp +++ b/src/surf/xml/surfxml_sax_cb.cpp @@ -6,6 +6,7 @@ #include "simgrid/kernel/routing/NetPoint.hpp" #include "simgrid/s4u/Engine.hpp" #include "simgrid/sg_config.hpp" +#include "src/instr/instr_private.hpp" #include "src/surf/network_interface.hpp" #include "src/surf/surf_interface.hpp" #include "src/surf/xml/platf_private.hpp" @@ -390,10 +391,10 @@ void STag_surfxml_platform() { "Please update your code, or use another, more adapted, file.", surf_parsed_filename, version); - sg_platf_begin(); + simgrid::s4u::on_platform_creation(); } void ETag_surfxml_platform(){ - sg_platf_end(); + simgrid::s4u::on_platform_created(); } void STag_surfxml_host(){ @@ -530,12 +531,10 @@ void ETag_surfxml_cluster(){ void STag_surfxml_cluster(){ ZONE_TAG = 0; - parse_after_config(); xbt_assert(current_property_set == nullptr, "Someone forgot to reset the property set to nullptr in its closing tag (or XML malformed)"); } void STag_surfxml_cabinet(){ - parse_after_config(); simgrid::kernel::routing::CabinetCreationArgs cabinet; cabinet.id = A_surfxml_cabinet_id; cabinet.prefix = A_surfxml_cabinet_prefix; @@ -549,7 +548,6 @@ void STag_surfxml_cabinet(){ } void STag_surfxml_peer(){ - parse_after_config(); simgrid::kernel::routing::PeerCreationArgs peer; peer.id = std::string(A_surfxml_peer_id); @@ -792,7 +790,6 @@ void ETag_surfxml_trace(){ void STag_surfxml_trace___connect() { - parse_after_config(); simgrid::kernel::routing::TraceConnectCreationArgs trace_connect; trace_connect.element = A_surfxml_trace___connect_element; @@ -836,7 +833,6 @@ void ETag_surfxml_AS() void STag_surfxml_zone() { - parse_after_config(); ZONE_TAG = 1; simgrid::kernel::routing::ZoneCreationArgs zone; zone.id = A_surfxml_zone_id; @@ -872,6 +868,8 @@ void ETag_surfxml_config() XBT_INFO("The custom configuration '%s' is already defined by user!", elm.first.c_str()); } XBT_DEBUG("End configuration name = %s",A_surfxml_config_id); + if (TRACE_is_enabled()) + TRACE_start(); delete current_property_set; current_property_set = nullptr; @@ -946,7 +944,7 @@ void ETag_surfxml_prop(){/* Nothing to do */} void STag_surfxml_random(){/* Nothing to do */} void ETag_surfxml_random(){/* Nothing to do */} void ETag_surfxml_trace___connect(){/* Nothing to do */} -void STag_surfxml_trace(){parse_after_config();} +void STag_surfxml_trace(){/* Nothing to do */} void ETag_surfxml_router(){/*Nothing to do*/} void ETag_surfxml_host___link(){/* Nothing to do */} void ETag_surfxml_cabinet(){/* Nothing to do */} diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index aae0218237..9b8a85d5d6 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -2,7 +2,6 @@ set(EXTRA_DIST src/bindings/java/MANIFEST.in - src/include/instr/instr_interface.hpp src/include/mc/datatypes.h src/include/mc/mc.h src/include/simgrid/sg_config.hpp