X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/666a812d1b3ee4568f2beb317dfcd08d99055697..dd33e946a7ea1e4e00053ff43475566229f5c40a:/src/instr/instr_config.cpp?ds=sidebyside diff --git a/src/instr/instr_config.cpp b/src/instr/instr_config.cpp index c8c2ea0ca3..a1fe6b2773 100644 --- a/src/instr/instr_config.cpp +++ b/src/instr/instr_config.cpp @@ -4,14 +4,19 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "include/xbt/config.hpp" +#include "simgrid/s4u/Engine.hpp" #include "src/instr/instr_private.hpp" #include "surf/surf.hpp" +#include "xbt/virtu.h" /* sg_cmdline */ +#include #include #include XBT_LOG_NEW_CATEGORY(instr, "Logging the behavior of the tracing system (used for Visualization/Analysis of simulations)"); XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_config, instr, "Configuration"); +std::ofstream tracing_file; + #define OPT_TRACING_BASIC "tracing/basic" #define OPT_TRACING_BUFFER "tracing/buffer" #define OPT_TRACING_CATEGORIZED "tracing/categorized" @@ -75,7 +80,7 @@ static bool trace_active = false; simgrid::instr::TraceFormat simgrid::instr::trace_format = simgrid::instr::TraceFormat::Paje; -void TRACE_start() +static void TRACE_start() { if (trace_active) return; @@ -88,25 +93,49 @@ void TRACE_start() 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", format.c_str()); + + /* open the trace file(s) */ + std::string filename = TRACE_get_filename(); + tracing_file.open(filename.c_str(), std::ofstream::out); + if (tracing_file.fail()) { + THROWF(system_error, 1, "Tracefile %s could not be opened for writing.", filename.c_str()); + } + + XBT_DEBUG("Filename %s is open for writing", filename.c_str()); + if (format == "Paje") { - TRACE_paje_start(); - } else if (format == "TI") { - simgrid::instr::trace_format = simgrid::instr::TraceFormat::Ti; - TRACE_TI_start(); - }else{ - xbt_die("Unknown trace format :%s ", format.c_str()); + /* output generator version */ + tracing_file << "#This file was generated using SimGrid-" << SIMGRID_VERSION_MAJOR << "." << SIMGRID_VERSION_MINOR + << "." << SIMGRID_VERSION_PATCH << std::endl; + tracing_file << "#["; + unsigned int cpt; + char* str; + xbt_dynar_foreach (xbt_cmdline, cpt, str) { + tracing_file << str << " "; + } + tracing_file << "]" << std::endl; } + /* output one line comment */ + dump_comment(simgrid::config::get_value(OPT_TRACING_COMMENT)); + + /* output comment file */ + dump_comment_file(simgrid::config::get_value(OPT_TRACING_COMMENT_FILE)); + + if (format == "Paje") { + /* output Pajé header */ + TRACE_header(TRACE_basic(), TRACE_display_sizes()); + } else + simgrid::instr::trace_format = simgrid::instr::TraceFormat::Ti; + trace_active = true; XBT_DEBUG("Tracing is on"); } } -void TRACE_end() +static void TRACE_end() { if (not trace_active) return; @@ -115,21 +144,14 @@ void TRACE_end() TRACE_last_timestamp_to_dump = surf_get_clock(); TRACE_paje_dump_buffer(true); - simgrid::instr::Type* root_type = simgrid::instr::Container::getRoot()->type_; + simgrid::instr::Type* root_type = simgrid::instr::Container::get_root()->type_; /* destroy all data structures of tracing (and free) */ - delete simgrid::instr::Container::getRoot(); + delete simgrid::instr::Container::get_root(); 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()); - } + tracing_file.close(); + XBT_DEBUG("Filename %s is closed", TRACE_get_filename().c_str()); /* de-activate trace */ trace_active = false; @@ -233,16 +255,6 @@ bool TRACE_display_sizes () return trace_display_sizes && trace_smpi_enabled && trace_enabled; } -std::string TRACE_get_comment() -{ - return simgrid::config::get_value(OPT_TRACING_COMMENT); -} - -std::string TRACE_get_comment_file() -{ - return simgrid::config::get_value(OPT_TRACING_COMMENT_FILE); -} - int TRACE_precision () { return simgrid::config::get_value(OPT_TRACING_PRECISION); @@ -260,6 +272,7 @@ void TRACE_global_init() return; is_initialised = true; + /* name of the tracefile */ simgrid::config::declare_flag(OPT_TRACING_FILENAME, "Trace file created by the instrumented SimGrid.", "simgrid.trace"); @@ -276,6 +289,11 @@ void TRACE_global_init() simgrid::config::declare_flag(OPT_TRACING_PRECISION, "Numerical precision used when timestamping events " "(expressed in number of digits after decimal point)", 6); + + /* Connect callbacks */ + simgrid::s4u::on_platform_creation.connect(TRACE_start); + simgrid::s4u::on_deadlock.connect(TRACE_end); + simgrid::s4u::on_simulation_end.connect(TRACE_end); } static void print_line (const char *option, const char *desc, const char *longdesc, int detailed)