X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a81bbe9d6d298459a0dacbdb558ddaef3febf538..a837e93ca12a007708f0b89cd9ef41e8c0967d5d:/src/instr/instr_config.c diff --git a/src/instr/instr_config.c b/src/instr/instr_config.c index 6b8eaf67b7..f9ffce0c1b 100644 --- a/src/instr/instr_config.c +++ b/src/instr/instr_config.c @@ -28,8 +28,7 @@ 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 -extern xbt_dict_t defined_types; //declared in instr_interface.c +xbt_dict_t created_categories; //declared in instr_interface.c int TRACE_start() { @@ -48,79 +47,9 @@ int TRACE_start() /* activate trace */ TRACE_activate (); - /* base type hierarchy: - * --cfg=tracing - */ - pajeDefineContainerType("PLATFORM", "0", "platform"); - pajeDefineContainerType("HOST", "PLATFORM", "HOST"); - pajeDefineContainerType("LINK", "PLATFORM", "LINK"); - pajeDefineVariableType("power", "HOST", "power"); - pajeDefineVariableType("bandwidth", "LINK", "bandwidth"); - pajeDefineVariableType("latency", "LINK", "latency"); - pajeDefineEventType("source", "LINK", "source"); - pajeDefineEventType("destination", "LINK", "destination"); - - /* type hierarchy for: - * --cfg=tracing/uncategorized - */ - if (TRACE_uncategorized()){ - pajeDefineVariableTypeWithColor("power_used", "HOST", "power_used", "0.5 0.5 0.5"); - pajeDefineVariableTypeWithColor("bandwidth_used", "LINK", "bandwidth_used", "0.5 0.5 0.5"); - } - - /* type hierarchy for: - * --cfg=tracing/msg/process - * --cfg=tracing/msg/volume - */ - if (TRACE_msg_process_is_enabled() || TRACE_msg_volume_is_enabled()) { - //processes grouped by host - pajeDefineContainerType("PROCESS", "HOST", "PROCESS"); - } - - if (TRACE_msg_process_is_enabled()) { - pajeDefineStateType("category", "PROCESS", "category"); - pajeDefineStateType("presence", "PROCESS", "presence"); - } - - if (TRACE_msg_volume_is_enabled()) { - pajeDefineLinkType("volume", "0", "PROCESS", "PROCESS", "volume"); - } - - /* type hierarchy for: - * --cfg=tracing/msg/task - */ - if (TRACE_msg_task_is_enabled()) { - //tasks grouped by host - pajeDefineContainerType("TASK", "HOST", "TASK"); - pajeDefineStateType("category", "TASK", "category"); - pajeDefineStateType("presence", "TASK", "presence"); - } - - /* type hierarchy for - * --cfg=tracing/smpi - * --cfg=tracing/smpi/group - */ - if (TRACE_smpi_is_enabled()) { - if (TRACE_smpi_is_grouped()){ - pajeDefineContainerType("MPI_PROCESS", "HOST", "MPI_PROCESS"); - }else{ - pajeDefineContainerType("MPI_PROCESS", "PLATFORM", "MPI_PROCESS"); - } - pajeDefineStateType("MPI_STATE", "MPI_PROCESS", "MPI_STATE"); - pajeDefineLinkType("MPI_LINK", "0", "MPI_PROCESS", "MPI_PROCESS", - "MPI_LINK"); - } - - /* creating the platform */ - pajeCreateContainer(MSG_get_clock(), "platform", "PLATFORM", "0", - "simgrid-platform"); - /* other trace initialization */ - defined_types = xbt_dict_new(); created_categories = xbt_dict_new(); - TRACE_msg_task_alloc(); TRACE_surf_alloc(); - TRACE_msg_process_alloc(); TRACE_smpi_alloc(); return 0; } @@ -130,9 +59,6 @@ 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(); @@ -143,6 +69,16 @@ int TRACE_end() 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"); @@ -179,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) @@ -199,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) @@ -414,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" - " 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" + " edge = ("); + xbt_dict_foreach(trivaEdgeTypes, cursor, name, value) { + fprintf (file, "%s, ", name); + } + fprintf (file, + ");\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); } } @@ -454,56 +431,92 @@ 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); } }