X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/cf75850220edfeb6e0f46881e8b3b11fe85a25cc..a837e93ca12a007708f0b89cd9ef41e8c0967d5d:/src/instr/instr_config.c diff --git a/src/instr/instr_config.c b/src/instr/instr_config.c index eebe5bca65..f9ffce0c1b 100644 --- a/src/instr/instr_config.c +++ b/src/instr/instr_config.c @@ -15,7 +15,7 @@ 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/categorized" +#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" @@ -28,7 +28,62 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_config, instr, "Configuration"); 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 + +int TRACE_start() +{ + // 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; + + /* 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(); + } + + /* dump trace buffer */ + TRACE_last_timestamp_to_dump = surf_get_clock(); + TRACE_paje_dump_buffer(); + + /* destroy all data structures of tracing (and free) */ + destroyAllContainers(); + + /* close the trace file */ + TRACE_paje_end(); + + /* activate trace */ + TRACE_desactivate (); + DEBUG0("Tracing system is shutdown"); + return 0; +} void TRACE_activate (void) { @@ -60,7 +115,8 @@ int TRACE_is_configured(void) int TRACE_smpi_is_enabled(void) { - return xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI); + return xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI) && + TRACE_is_enabled(); } int TRACE_smpi_is_grouped(void) @@ -68,9 +124,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) @@ -80,17 +136,20 @@ int TRACE_uncategorized (void) int TRACE_msg_task_is_enabled(void) { - return xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_TASK); + return xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_TASK) && + TRACE_is_enabled(); } int TRACE_msg_process_is_enabled(void) { - return xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_PROCESS); + return xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_PROCESS) && + TRACE_is_enabled(); } int TRACE_msg_volume_is_enabled(void) { - return xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_VOLUME); + return xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_VOLUME) && + TRACE_is_enabled(); } char *TRACE_get_filename(void) @@ -146,7 +205,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); @@ -224,7 +283,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); @@ -295,38 +354,75 @@ void TRACE_generate_triva_uncat_conf (void) { char *output = TRACE_get_triva_uncat_conf (); if (output && strlen(output) > 0){ + xbt_dict_cursor_t cursor=NULL; + char *name, *value; + FILE *file = fopen (output, "w"); xbt_assert1 (file != NULL, "Unable to open file (%s) for writing triva graph " "configuration (uncategorized).", output); + + //open + fprintf (file, "{\n"); + + //register NODE types + fprintf (file, " node = ("); + xbt_dict_foreach(trivaNodeTypes, cursor, name, value) { + fprintf (file, "%s, ", name); + } + + //register EDGE types + fprintf (file, + ");\n" + " edge = ("); + xbt_dict_foreach(trivaEdgeTypes, cursor, name, value) { + fprintf (file, "%s, ", name); + } fprintf (file, - "{\n" - " node = (HOST);\n" - " edge = (LINK);\n" - "\n" - " HOST = {\n" - " size = power;\n" - " scale = global;\n" - " host_sep = {\n" - " type = separation;\n" - " size = power;\n" - " values = (power_used);\n" - " };\n" - " };\n" - " LINK = {\n" - " src = source;\n" - " dst = destination;\n" - " size = bandwidth;\n" - " scale = global;\n" - " link_sep = {\n" - " type = separation;\n" - " size = bandwidth;\n" - " values = (bandwidth_used);\n" - " };\n" - " };\n" - " graphviz-algorithm = neato;\n" - "}\n" - ); + ");\n" + "\n"); + + //register each NODE type layout + xbt_dict_foreach(trivaNodeTypes, cursor, name, value) { + fprintf (file, " %s = {\n", name); + if (strcmp (name, "HOST") == 0){ + fprintf (file, + " type = node;\n" + " size = power;\n" + " host_sep = {\n" + " type = separation;\n" + " size = power;\n" + " values = (power_used);\n" + " };\n"); + }else if (strcmp (name, "ROUTER") == 0){ + fprintf (file, + " type = node;\n" + " size = 10;\n"); + }else if (strcmp (name, "LINK") == 0){ + fprintf (file, + " type = edge;\n" + " size = bandwidth;\n" + " scale = global;\n" + " link_sep = {\n" + " type = separation;\n" + " size = bandwidth;\n" + " values = (bandwidth_used);\n" + " };\n"); + } + fprintf (file, " };\n\n"); + } + + //EDGE configuration + xbt_dict_foreach(trivaEdgeTypes, cursor, name, value) { + fprintf (file, " %s = { size = 1; };\n", name); + } + + //graphviz configuration + fprintf (file, "\n"); + fprintf (file, " graphviz-algorithm = neato;\n"); + + //close + fprintf (file, "}\n"); fclose (file); } } @@ -335,63 +431,99 @@ void TRACE_generate_triva_cat_conf (void) { char *output = TRACE_get_triva_cat_conf(); if (output && strlen(output) > 0){ + xbt_dict_cursor_t cursor=NULL, cursor2=NULL; + char *name, *name2, *value, *value2; + //check if we do have categories declared if (xbt_dict_length(created_categories) == 0){ 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"); xbt_assert1 (file != NULL, "Unable to open file (%s) for writing triva graph " "configuration (categorized).", output); - fprintf (file, - "{\n" - " node = (HOST);\n" - " edge = (LINK);\n" - "\n" - " HOST = {\n" - " size = power;\n" - " scale = global;\n" - " host_sep = {\n" - " type = separation;\n" - " size = power;\n" - " values = ("); - xbt_dict_foreach(created_categories,cursor,key,data) { - fprintf(file, "p%s, ",key); + + //open + fprintf (file, "{\n"); + + //register NODE types + fprintf (file, " node = ("); + xbt_dict_foreach(trivaNodeTypes, cursor, name, value) { + fprintf (file, "%s, ", name); } + + //register EDGE types fprintf (file, ");\n" - " };\n" - " };\n" - " LINK = {\n" - " src = source;\n" - " dst = destination;\n" - " size = bandwidth;\n" - " scale = global;\n" - " link_sep = {\n" - " type = separation;\n" - " size = bandwidth;\n" - " values = ("); - xbt_dict_foreach(created_categories,cursor,key,data) { - fprintf(file, "b%s, ",key); + " edge = ("); + xbt_dict_foreach(trivaEdgeTypes, cursor, name, value) { + fprintf (file, "%s, ", name); } fprintf (file, ");\n" - " };\n" - " };\n" - " graphviz-algorithm = neato;\n" - "}\n" - ); - fclose(file); + "\n"); + + //register each NODE type layout + xbt_dict_foreach(trivaNodeTypes, cursor, name, value) { + fprintf (file, " %s = {\n", name); + if (strcmp (name, "HOST") == 0){ + fprintf (file, + " type = node;\n" + " size = power;\n" + " host_sep = {\n" + " type = separation;\n" + " size = power;\n" + " values = ("); + xbt_dict_foreach(created_categories,cursor2,name2,value2) { + fprintf (file, "%s, ", name2); + } + fprintf (file, + ");\n" + " };\n"); + }else if (strcmp (name, "ROUTER") == 0){ + fprintf (file, + " type = node;\n" + " size = 10;\n"); + }else if (strcmp (name, "LINK") == 0){ + fprintf (file, + " type = edge;\n" + " size = bandwidth;\n" + " scale = global;\n" + " link_sep = {\n" + " type = separation;\n" + " size = bandwidth;\n" + " values = ("); + xbt_dict_foreach(created_categories,cursor2,name2,value2) { + fprintf (file, "%s, ", name2); + } + fprintf (file, + ");\n" + " };\n"); + } + fprintf (file, " };\n\n"); + } + + //EDGE configuration + xbt_dict_foreach(trivaEdgeTypes, cursor, name, value) { + fprintf (file, " %s = { size = 1; };\n", name); + } + + //graphviz configuration + fprintf (file, "\n"); + fprintf (file, " graphviz-algorithm = neato;\n"); + + //close + fprintf (file, "}\n"); + fclose (file); } } #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