Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
use signals a bit more to create tracing stuff
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Wed, 25 Apr 2018 13:22:11 +0000 (15:22 +0200)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Wed, 25 Apr 2018 13:22:11 +0000 (15:22 +0200)
22 files changed:
include/simgrid/s4u/Engine.hpp
src/bindings/lua/lua_platf.cpp
src/include/instr/instr_interface.hpp [deleted file]
src/include/xbt/parmap.hpp
src/instr/instr_config.cpp
src/instr/instr_private.hpp
src/kernel/context/Context.hpp
src/msg/msg_global.cpp
src/s4u/s4u_Engine.cpp
src/simdag/sd_global.cpp
src/simgrid/sg_config.cpp
src/simix/smx_global.cpp
src/simix/smx_private.hpp
src/surf/instr_routing.cpp
src/surf/network_ns3.cpp
src/surf/sg_platf.cpp
src/surf/surf_interface.cpp
src/surf/surf_private.hpp
src/surf/xml/platf_private.hpp
src/surf/xml/surfxml_parseplatf.cpp
src/surf/xml/surfxml_sax_cb.cpp
tools/cmake/DefinePackages.cmake

index 52f96c5..c587b98 100644 (file)
@@ -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<void()> onPlatformCreated;
+extern XBT_PUBLIC xbt::signal<void()> 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<void()> on_platform_creation;
 
 /** Callback fired when the main simulation loop ends, just before the end of Engine::run() */
 extern XBT_PUBLIC xbt::signal<void()> onSimulationEnd;
index a52a707..6ff1fd7 100644 (file)
@@ -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 (file)
index e4cdb94..0000000
+++ /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
index 5f91ac4..1bde553 100644 (file)
@@ -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 <boost/optional.hpp>
 
index 1f76e6a..c8c2ea0 100644 (file)
@@ -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<std::string>(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<std::string>(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<std::string>(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 ()
index 579758c..e7e5c18 100644 (file)
@@ -8,7 +8,6 @@
 
 #include <xbt/base.h>
 
-#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<std::string> trivaNodeTypes;
 extern XBT_PRIVATE std::set<std::string> 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);
index 5d2b69d..8fa9747 100644 (file)
@@ -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"
 
index b3a49bd..f94fdf3 100644 (file)
@@ -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 <xbt/config.hpp>
 
index 6b174d5..4daf853 100644 (file)
@@ -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<void()> onPlatformCreated;
+xbt::signal<void()> on_platform_creation;
+xbt::signal<void()> on_platform_created;
 xbt::signal<void()> onSimulationEnd;
 xbt::signal<void(double)> onTimeAdvance;
 xbt::signal<void(void)> onDeadlock;
index 81682d4..35f4fd9 100644 (file)
@@ -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");
index c16b0c6..70affbf 100644 (file)
@@ -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"
index bf34320..dfee2be 100644 (file)
@@ -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<simgrid::simix::Host>() == nullptr) // another callback to the same signal may have created it
         host.extension_set<simgrid::simix::Host>(new simgrid::simix::Host());
index d8c2e13..bcbb2f6 100644 (file)
@@ -8,6 +8,7 @@
 
 #include "simgrid/s4u/Actor.hpp"
 #include "src/kernel/context/Context.hpp"
+#include <xbt/xbt_os_thread.h>
 
 #include <unordered_map>
 #include <vector>
index b70294a..07a62ca 100644 (file)
@@ -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);
index 6fc7185..372e129 100644 (file)
@@ -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);
 }
 
index 9f71bc5..2577e4f 100644 (file)
@@ -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;
index 2ed96e5..ed1bd2a 100644 (file)
@@ -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"
index fc2e885..64319f3 100644 (file)
@@ -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
index b1c9fab..793941d 100644 (file)
@@ -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
 
index 14767ed..0524b4d 100644 (file)
@@ -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 */
index 91c0d5a..b0b5dcb 100644 (file)
@@ -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 */}
index aae0218..9b8a85d 100644 (file)
@@ -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