X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/eb543cc29c42f9144694e275b520dc4bdb1c0c9c..6881de492a24aabf11263478e6371f5412912189:/src/instr/instr_config.cpp diff --git a/src/instr/instr_config.cpp b/src/instr/instr_config.cpp index 7ea943f98a..fbee1f43de 100644 --- a/src/instr/instr_config.cpp +++ b/src/instr/instr_config.cpp @@ -8,13 +8,14 @@ #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"); -extern FILE* tracing_file; +std::ofstream tracing_file; #define OPT_TRACING_BASIC "tracing/basic" #define OPT_TRACING_BUFFER "tracing/buffer" @@ -25,23 +26,27 @@ extern FILE* tracing_file; #define OPT_TRACING_DISABLE_LINK "tracing/disable-link" #define OPT_TRACING_DISABLE_POWER "tracing/disable-power" #define OPT_TRACING_DISPLAY_SIZES "tracing/smpi/display-sizes" -#define OPT_TRACING_FILENAME "tracing/filename" #define OPT_TRACING_FORMAT_TI_ONEFILE "tracing/smpi/format/ti-one-file" -#define OPT_TRACING_FORMAT "tracing/smpi/format" -#define OPT_TRACING_ACTOR "tracing/msg/process" -#define OPT_TRACING_VM "tracing/vm" #define OPT_TRACING_PLATFORM "tracing/platform" -#define OPT_TRACING_PRECISION "tracing/precision" #define OPT_TRACING_SMPI_COMPUTING "tracing/smpi/computing" #define OPT_TRACING_SMPI_GROUP "tracing/smpi/group" #define OPT_TRACING_SMPI_INTERNALS "tracing/smpi/internals" #define OPT_TRACING_SMPI_SLEEPING "tracing/smpi/sleeping" #define OPT_TRACING_SMPI "tracing/smpi" #define OPT_TRACING_TOPOLOGY "tracing/platform/topology" -#define OPT_TRACING "tracing" #define OPT_TRACING_UNCATEGORIZED "tracing/uncategorized" -static simgrid::config::Flag trace_enabled{OPT_TRACING, "Enable Tracing.", false}; +static simgrid::config::Flag trace_enabled{ + "tracing", "Enable the tracing system. You have to enable this option to use other tracing options.", false}; + +static simgrid::config::Flag trace_actor_enabled{ + "tracing/msg/process", // FIXME rename this flag + "Trace the behavior of all categorized actors, grouping them by host. " + "Can be used to track actor location if the simulator does actor migration.", + false}; + +static simgrid::config::Flag trace_vm_enabled{"tracing/vm", "Trace the behavior of all virtual machines.", false}; + static simgrid::config::Flag trace_platform{OPT_TRACING_PLATFORM, "Register the platform in the trace as a hierarchy.", false}; static simgrid::config::Flag trace_platform_topology{ @@ -58,8 +63,6 @@ static simgrid::config::Flag trace_categorized{ OPT_TRACING_CATEGORIZED, "Tracing categorized resource utilization of hosts and links.", false}; static simgrid::config::Flag trace_uncategorized{ OPT_TRACING_UNCATEGORIZED, "Tracing uncategorized resource utilization of hosts and links.", false}; -static simgrid::config::Flag trace_actor_enabled{OPT_TRACING_ACTOR, "Tracing of actor behavior.", false}; -static simgrid::config::Flag trace_vm_enabled{OPT_TRACING_VM, "Tracing of virtual machine behavior.", false}; static simgrid::config::Flag trace_buffer{OPT_TRACING_BUFFER, "Buffer trace events to put them in temporal order.", true}; static simgrid::config::Flag trace_disable_destroy{ @@ -92,13 +95,13 @@ static void TRACE_start() XBT_DEBUG("Tracing starts"); /* init the tracing module to generate the right output */ - std::string format = simgrid::config::get_value(OPT_TRACING_FORMAT); + std::string format = simgrid::config::get_value("tracing/smpi/format"); XBT_DEBUG("Tracing format %s", format.c_str()); /* open the trace file(s) */ std::string filename = TRACE_get_filename(); - tracing_file = fopen(filename.c_str(), "w"); - if (tracing_file == nullptr) { + 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()); } @@ -106,22 +109,22 @@ static void TRACE_start() if (format == "Paje") { /* output generator version */ - fprintf(tracing_file, "#This file was generated using SimGrid-%d.%d.%d\n", SIMGRID_VERSION_MAJOR, - SIMGRID_VERSION_MINOR, SIMGRID_VERSION_PATCH); - fprintf(tracing_file, "#["); + 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) { - fprintf(tracing_file, "%s ", str); + tracing_file << str << " "; } - fprintf(tracing_file, "]\n"); + tracing_file << "]" << std::endl; } /* output one line comment */ - dump_comment(TRACE_get_comment()); + dump_comment(simgrid::config::get_value(OPT_TRACING_COMMENT)); /* output comment file */ - dump_comment_file(TRACE_get_comment_file()); + dump_comment_file(simgrid::config::get_value(OPT_TRACING_COMMENT_FILE)); if (format == "Paje") { /* output Pajé header */ @@ -143,13 +146,13 @@ static 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 */ - fclose(tracing_file); + tracing_file.close(); XBT_DEBUG("Filename %s is closed", TRACE_get_filename().c_str()); /* de-activate trace */ @@ -254,24 +257,14 @@ 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); + return simgrid::config::get_value("tracing/precision"); } std::string TRACE_get_filename() { - return simgrid::config::get_value(OPT_TRACING_FILENAME); + return simgrid::config::get_value("tracing/filename"); } void TRACE_global_init() @@ -283,10 +276,13 @@ void TRACE_global_init() is_initialised = true; /* name of the tracefile */ - simgrid::config::declare_flag(OPT_TRACING_FILENAME, "Trace file created by the instrumented SimGrid.", + simgrid::config::declare_flag("tracing/filename", "Trace file created by the instrumented SimGrid.", "simgrid.trace"); - simgrid::config::declare_flag(OPT_TRACING_FORMAT, "(smpi only) Switch the output format of Tracing", - "Paje"); + simgrid::config::declare_flag( + "tracing/smpi/format", "Select trace output format used by SMPI. The default is the 'Paje' format. " + "The 'TI' (Time-Independent) format allows for trace replay.", + "Paje"); + simgrid::config::declare_flag(OPT_TRACING_FORMAT_TI_ONEFILE, "(smpi only) For replay format only : output to one file only", false); simgrid::config::alias(OPT_TRACING_FORMAT_TI_ONEFILE, {"tracing/smpi/format/ti_one_file"}); @@ -295,8 +291,8 @@ void TRACE_global_init() simgrid::config::declare_flag( OPT_TRACING_COMMENT_FILE, "The contents of the file are added to the top of the trace file as comment.", ""); simgrid::config::alias(OPT_TRACING_COMMENT_FILE, {"tracing/comment_file"}); - simgrid::config::declare_flag(OPT_TRACING_PRECISION, "Numerical precision used when timestamping events " - "(expressed in number of digits after decimal point)", + simgrid::config::declare_flag("tracing/precision", "Numerical precision used when timestamping events " + "(expressed in number of digits after decimal point)", 6); /* Connect callbacks */ @@ -319,9 +315,6 @@ static void print_line (const char *option, const char *desc, const char *longde void TRACE_help (int detailed) { printf("Description of the tracing options accepted by this simulator:\n\n"); - print_line (OPT_TRACING, "Enable the tracing system", - " It activates the tracing system and register the simulation platform\n" - " in the trace file. You have to enable this option to others take effect.", detailed); print_line (OPT_TRACING_CATEGORIZED, "Trace categorized resource utilization", " It activates the categorized resource utilization tracing. It should\n" " be enabled if tracing categories are used by this simulator.", detailed); @@ -329,13 +322,6 @@ void TRACE_help (int detailed) " It activates the uncategorized resource utilization tracing. Use it if\n" " this simulator do not use tracing categories and resource use have to be\n" " traced.", detailed); - print_line(OPT_TRACING_FILENAME, "Filename to register traces", - " A file with this name will be created to register the simulation. The file\n" - " is in the Paje format and can be analyzed using Paje, and PajeNG visualization\n" - " tools. More information can be found in these webpages:\n" - " http://github.com/schnorr/pajeng/\n" - " http://paje.sourceforge.net/", - detailed); print_line (OPT_TRACING_SMPI, "Trace the MPI Interface (SMPI)", " This option only has effect if this simulator is SMPI-based. Traces the MPI\n" " interface and generates a trace that can be analyzed using Gantt-like\n" @@ -352,11 +338,6 @@ void TRACE_help (int detailed) " to allow further study of simulated or real sleep time", detailed); print_line (OPT_TRACING_SMPI_INTERNALS, "Generates tracing events corresponding", " to point-to-point messages sent by collective communications", detailed); - print_line(OPT_TRACING_ACTOR, "Trace actor behavior", - " This option traces the behavior of all categorized actors, grouping them\n" - " by hosts. This option can be used to track actor location if the simulator\n" - " does actor migration.", - detailed); print_line (OPT_TRACING_BUFFER, "Buffer events to put them in temporal order", " This option put some events in a time-ordered buffer using the insertion\n" " sort algorithm. The process of acquiring and releasing locks to access this\n" @@ -376,9 +357,6 @@ void TRACE_help (int detailed) " Message size (in bytes) is added to links, and to states. For collectives,\n" " the displayed value is the more relevant to the collective (total sent by\n" " the process, usually)", detailed); - print_line (OPT_TRACING_FORMAT, "Only works for SMPI now. Switch output format", - " Default format is Paje. Time independent traces are also supported,\n" - " to output traces that can later be used by the trace replay tool", detailed); print_line (OPT_TRACING_FORMAT_TI_ONEFILE, "Only works for SMPI now, and TI output format", " By default, each process outputs to a separate file, inside a filename_files folder\n" " By setting this option to yes, all processes will output to only one file\n"