X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/084771f34162570d18b8b2cf1d3b65237a17ade2..dbb6723a79b9b957971b41da882cf31cf292aa4c:/src/instr/instr_config.c diff --git a/src/instr/instr_config.c b/src/instr/instr_config.c index f8a58a7c0c..9ee6472b04 100644 --- a/src/instr/instr_config.c +++ b/src/instr/instr_config.c @@ -9,10 +9,13 @@ #ifdef HAVE_TRACING +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"); + #define OPT_TRACING "tracing" #define OPT_TRACING_SMPI "tracing/smpi" #define OPT_TRACING_SMPI_GROUP "tracing/smpi/group" -#define OPT_TRACING_PLATFORM "tracing/platform" +#define OPT_TRACING_CATEGORIZED "tracing/categorized" #define OPT_TRACING_UNCATEGORIZED "tracing/uncategorized" #define OPT_TRACING_MSG_TASK "tracing/msg/task" #define OPT_TRACING_MSG_PROCESS "tracing/msg/process" @@ -25,20 +28,67 @@ static int trace_configured = 0; static int trace_active = 0; -extern xbt_dict_t created_categories; //declared in instr_interface.c +xbt_dict_t created_categories; //declared in instr_interface.c -void TRACE_activate (void) +int TRACE_start() { - if (trace_active){ - THROW0(tracing_error, TRACE_ERROR_ALREADY_ACTIVE, - "Tracing is already active."); + // tracing system must be: + // - enabled (with --cfg=tracing:1) + // - already configured (TRACE_global_init already called) + if (!(TRACE_is_enabled() && TRACE_is_configured())){ + return 0; } + + DEBUG0("Tracing starts"); + + /* open the trace file */ + TRACE_paje_start(); + + /* activate trace */ + TRACE_activate (); + + /* other trace initialization */ + created_categories = xbt_dict_new(); + TRACE_surf_alloc(); + TRACE_smpi_alloc(); + return 0; +} + +int TRACE_end() +{ + if (!TRACE_is_active()) + return 1; + + /* close the trace file */ + TRACE_paje_end(); + + /* generate uncategorized graph configuration for triva */ + if (TRACE_get_triva_uncat_conf()){ + TRACE_generate_triva_uncat_conf(); + } + + /* generate categorized graph configuration for triva */ + if (TRACE_get_triva_cat_conf()){ + TRACE_generate_triva_cat_conf(); + } + + /* activate trace */ + TRACE_desactivate (); + DEBUG0("Tracing system is shutdown"); + return 0; +} + +void TRACE_activate (void) +{ + xbt_assert0 (trace_active==0, "Tracing is already active."); trace_active = 1; + DEBUG0 ("Tracing is on"); } void TRACE_desactivate (void) { trace_active = 0; + DEBUG0 ("Tracing is off"); } int TRACE_is_active (void) @@ -66,9 +116,9 @@ int TRACE_smpi_is_grouped(void) return xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI_GROUP); } -int TRACE_platform_is_enabled(void) +int TRACE_categorized (void) { - return xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_PLATFORM); + return xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_CATEGORIZED); } int TRACE_uncategorized (void) @@ -144,7 +194,7 @@ void TRACE_global_init(int *argc, char **argv) /* platform */ int default_tracing_platform = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_PLATFORM, + xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_CATEGORIZED, "Tracing of categorized platform (host and link) utilization.", xbt_cfgelm_int, &default_tracing_platform, 0, 1, NULL, NULL); @@ -222,7 +272,7 @@ void TRACE_help (int detailed) " 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_PLATFORM, "Trace categorized resource utilization", + 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); @@ -294,10 +344,9 @@ void TRACE_generate_triva_uncat_conf (void) char *output = TRACE_get_triva_uncat_conf (); if (output && strlen(output) > 0){ FILE *file = fopen (output, "w"); - if (!file){ - THROW1(tracing_error, TRACE_ERROR_FILE_OPEN, - "Unable to open file (%s) for writing triva graph configuration (uncategorized).", output); - } + xbt_assert1 (file != NULL, + "Unable to open file (%s) for writing triva graph " + "configuration (uncategorized).", output); fprintf (file, "{\n" " node = (HOST);\n" @@ -336,16 +385,15 @@ void TRACE_generate_triva_cat_conf (void) if (output && strlen(output) > 0){ //check if we do have categories declared if (xbt_dict_length(created_categories) == 0){ -// INFO0("No categories declared, ignoring generation of triva graph configuration"); + INFO0("No categories declared, ignoring generation of triva graph configuration"); return; } xbt_dict_cursor_t cursor=NULL; char *key, *data; FILE *file = fopen (output, "w"); - if (!file){ - THROW1(tracing_error, TRACE_ERROR_FILE_OPEN, - "Unable to open file (%s) for writing triva graph configuration (categorized).", output); - } + xbt_assert1 (file != NULL, + "Unable to open file (%s) for writing triva graph " + "configuration (categorized).", output); fprintf (file, "{\n" " node = (HOST);\n" @@ -359,7 +407,7 @@ void TRACE_generate_triva_cat_conf (void) " size = power;\n" " values = ("); xbt_dict_foreach(created_categories,cursor,key,data) { - fprintf(file, "p%s, ",key); + fprintf(file, "%s, ",key); } fprintf (file, ");\n" @@ -375,7 +423,7 @@ void TRACE_generate_triva_cat_conf (void) " size = bandwidth;\n" " values = ("); xbt_dict_foreach(created_categories,cursor,key,data) { - fprintf(file, "b%s, ",key); + fprintf(file, "%s, ",key); } fprintf (file, ");\n" @@ -391,7 +439,7 @@ void TRACE_generate_triva_cat_conf (void) #undef OPT_TRACING #undef OPT_TRACING_SMPI #undef OPT_TRACING_SMPI_GROUP -#undef OPT_TRACING_PLATFORM +#undef OPT_TRACING_CATEGORIZED #undef OPT_TRACING_UNCATEGORIZED #undef OPT_TRACING_MSG_TASK #undef OPT_TRACING_MSG_PROCESS