From: schnorr Date: Mon, 6 Dec 2010 00:55:54 +0000 (+0000) Subject: [trace] new tracing options to generate graph configurations for triva X-Git-Tag: v3.6_beta2~932 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/8a49ad1ba999dd2379dfa2959c12dd5949510f6d?hp=218f2c9d4f1970d84e1d3dd05f8168e7b5c57e43 [trace] new tracing options to generate graph configurations for triva details: - triva/uncategorized:uncat.plist uncat.plist holds a configuration for a uncategorized graph resource utilization analysis in triva - triva/categorized:cat.plist cat.plist holds a configuration for a categorized graph resource utilization analysis in triva - Get a MSG/SimDAG/SMPI simulator, compile it against a toolkit compiled with tracing enabled, then run the simulation with these parameters: --cfg=tracing:1 --cfg=tracing/uncategorized:1 --cfg=triva/uncategorized:uncat.plist then run Triva (from the svn) with the following parameters Triva simgrid.trace --graph --gc_conf uncat.plist --gc_apply git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@8990 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/src/instr/instr_config.c b/src/instr/instr_config.c index e83bf2d1cb..49ff108b2d 100644 --- a/src/instr/instr_config.c +++ b/src/instr/instr_config.c @@ -19,10 +19,14 @@ #define OPT_TRACING_MSG_VOLUME "tracing/msg/volume" #define OPT_TRACING_FILENAME "tracing/filename" #define OPT_TRACING_PLATFORM_METHOD "tracing/platform/method" +#define OPT_TRIVA_UNCAT_CONF "triva/uncategorized" +#define OPT_TRIVA_CAT_CONF "triva/categorized" static int trace_configured = 0; static int trace_active = 0; +extern xbt_dict_t created_categories; //declared in instr_interface.c + void TRACE_activate (void) { if (trace_active){ @@ -97,6 +101,16 @@ char *TRACE_get_platform_method(void) return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_PLATFORM_METHOD); } +char *TRACE_get_triva_uncat_conf (void) +{ + return xbt_cfg_get_string(_surf_cfg_set, OPT_TRIVA_UNCAT_CONF); +} + +char *TRACE_get_triva_cat_conf (void) +{ + return xbt_cfg_get_string(_surf_cfg_set, OPT_TRIVA_CAT_CONF); +} + void TRACE_global_init(int *argc, char **argv) { /* name of the tracefile */ @@ -170,6 +184,20 @@ void TRACE_global_init(int *argc, char **argv) xbt_cfgelm_int, &default_tracing_msg_volume, 0, 1, NULL, NULL); + /* Triva graph configuration for uncategorized tracing */ + char *default_triva_uncat_conf_file = xbt_strdup (""); + xbt_cfg_register(&_surf_cfg_set, OPT_TRIVA_UNCAT_CONF, + "Triva Graph configuration file for uncategorized resource utilization traces.", + xbt_cfgelm_string, &default_triva_uncat_conf_file, 1, 1, + NULL, NULL); + + /* Triva graph configuration for uncategorized tracing */ + char *default_triva_cat_conf_file = xbt_strdup (""); + xbt_cfg_register(&_surf_cfg_set, OPT_TRIVA_CAT_CONF, + "Triva Graph configuration file for categorized resource utilization traces.", + xbt_cfgelm_string, &default_triva_cat_conf_file, 1, 1, + NULL, NULL); + /* instrumentation can be considered configured now */ trace_configured = 1; } @@ -247,6 +275,105 @@ void TRACE_help (int detailed) detailed); } +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); + } + 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" + ); + fclose (file); + } +} + +void TRACE_generate_triva_cat_conf (void) +{ + char *output = TRACE_get_triva_cat_conf(); + 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"); + 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); + } + 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); + } + 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); + } + fprintf (file, + ");\n" + " };\n" + " };\n" + " graphviz-algorithm = neato;\n" + "}\n" + ); + fclose(file); + } +} + #undef OPT_TRACING #undef OPT_TRACING_SMPI #undef OPT_TRACING_SMPI_GROUP @@ -257,5 +384,7 @@ void TRACE_help (int detailed) #undef OPT_TRACING_MSG_VOLUME #undef OPT_TRACING_FILENAME #undef OPT_TRACING_PLATFORM_METHOD +#undef OPT_TRIVA_UNCAT_CONF +#undef OPT_TRIVA_CAT_CONF #endif /* HAVE_TRACING */ diff --git a/src/instr/instr_interface.c b/src/instr/instr_interface.c index 635fbf8afa..550e2b96e5 100644 --- a/src/instr/instr_interface.c +++ b/src/instr/instr_interface.c @@ -13,7 +13,7 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(tracing, "Tracing Interface"); static xbt_dict_t defined_types; -static xbt_dict_t created_categories; +xbt_dict_t created_categories; int TRACE_start() { @@ -116,6 +116,16 @@ int TRACE_end() /* 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 (); return 0; diff --git a/src/instr/instr_private.h b/src/instr/instr_private.h index f54a788fab..42ef64a98c 100644 --- a/src/instr/instr_private.h +++ b/src/instr/instr_private.h @@ -161,8 +161,12 @@ int TRACE_msg_process_is_enabled(void); int TRACE_msg_volume_is_enabled(void); char *TRACE_get_filename(void); char *TRACE_get_platform_method(void); +char *TRACE_get_triva_uncat_conf (void); +char *TRACE_get_triva_cat_conf (void); void TRACE_global_init(int *argc, char **argv); void TRACE_help(int detailed); +void TRACE_generate_triva_uncat_conf (void); +void TRACE_generate_triva_cat_conf (void); /* from resource_utilization.c */ void TRACE_surf_host_set_utilization(const char *name,