X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/440a99231dd4550285c4706d12cb95ba61221ba4..d5b39515958bde9d7724def570d766d62ad55d86:/src/instr/surf_instr.c diff --git a/src/instr/surf_instr.c b/src/instr/surf_instr.c index a7b424b7d9..b6ae112b07 100644 --- a/src/instr/surf_instr.c +++ b/src/instr/surf_instr.c @@ -5,6 +5,7 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "instr/private.h" +#include "surf/surf_private.h" #ifdef HAVE_TRACING @@ -63,19 +64,16 @@ static void __TRACE_surf_set_resource_variable (double date, const char *variabl * main: create LINK container, set initial bandwidth and latency * return: void */ -void TRACE_surf_link_declaration (char *name, double bw, double lat) +void TRACE_surf_link_declaration (void *link, char *name, double bw, double lat) { if (!IS_TRACING) return; - if (strcmp (name, "__loopback__")==0 || - strcmp (name, "loopback")==0){ //ignore loopback updates - return; - } - - pajeCreateContainer (SIMIX_get_clock(), name, "LINK", "platform", name); - xbt_dict_set (created_links, name, xbt_strdup ("1"), xbt_free); - TRACE_surf_link_set_bandwidth (SIMIX_get_clock(), name, bw); - TRACE_surf_link_set_latency (SIMIX_get_clock(), name, lat); + char alias[100]; + snprintf (alias, 100, "%p", link); + pajeCreateContainer (SIMIX_get_clock(), alias, "LINK", "platform", name); + xbt_dict_set (created_links, alias, xbt_strdup ("1"), xbt_free); + TRACE_surf_link_set_bandwidth (SIMIX_get_clock(), link, bw); + TRACE_surf_link_set_latency (SIMIX_get_clock(), link, lat); } /* @@ -100,13 +98,21 @@ void TRACE_surf_host_set_power (double date, char *resource, double power) __TRACE_surf_set_resource_variable (date, "power", resource, power); } -void TRACE_surf_link_set_bandwidth (double date, char *resource, double bandwidth) +void TRACE_surf_link_set_bandwidth (double date, void *link, double bandwidth) { + if (!TRACE_surf_link_is_traced (link)) return; + + char resource[100]; + snprintf (resource, 100, "%p", link); __TRACE_surf_set_resource_variable (date, "bandwidth", resource, bandwidth); } -void TRACE_surf_link_set_latency (double date, char *resource, double latency) +void TRACE_surf_link_set_latency (double date, void *link, double latency) { + if (!TRACE_surf_link_is_traced (link)) return; + + char resource[100]; + snprintf (resource, 100, "%p", link); __TRACE_surf_set_resource_variable (date, "latency", resource, latency); } @@ -180,6 +186,9 @@ void TRACE_msg_clean (void) xbt_dict_foreach(host_containers, cursor, key, value) { pajeDestroyContainer (MSG_get_clock(), "HOST", key); } + xbt_dict_foreach(created_links, cursor, key, value) { + pajeDestroyContainer (MSG_get_clock(), "LINK", key); + } } void TRACE_surf_host_vivaldi_parse (char *host, double x, double y, double h) @@ -195,4 +204,42 @@ void TRACE_surf_host_vivaldi_parse (char *host, double x, double y, double h) pajeSetVariable (0, "vivaldi_h", host, valuestr); } +extern routing_global_t global_routing; +void TRACE_surf_save_onelink (void) +{ + if (!IS_TRACING) return; + + //get the onelinks from the parsed platform + xbt_dynar_t onelink_routes = global_routing->get_onelink_routes(); + if (!onelink_routes) return; + + //save them in trace file + onelink_t onelink; + unsigned int iter; + xbt_dynar_foreach(onelink_routes, iter, onelink) { + char *src = onelink->src; + char *dst = onelink->dst; + void *link = onelink->link_ptr; + + if (TRACE_surf_link_is_traced (link)){ + char resource[100]; + snprintf (resource, 100, "%p", link); + + pajeNewEvent (0.1, "source", resource, src); + pajeNewEvent (0.1, "destination", resource, dst); + } + } +} + +int TRACE_surf_link_is_traced (void *link) +{ + char alias[100]; + snprintf (alias, 100, "%p", link); + if (xbt_dict_get_or_null (created_links, alias)){ + return 1; + }else{ + return 0; + } +} + #endif