X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2e85d97e44173bdba2d3718c1d542e40a28b833c..a470bbfee8e031e6e21e4605d1d19a1a5eb1039b:/src/surf/network_gtnets.c diff --git a/src/surf/network_gtnets.c b/src/surf/network_gtnets.c index 62e3c0eaa1..11e6089998 100644 --- a/src/surf/network_gtnets.c +++ b/src/surf/network_gtnets.c @@ -1,4 +1,5 @@ -/* Copyright (c) 2005 Henri Casanova. All rights reserved. */ +/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team. + * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -13,6 +14,8 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_gtnets, surf, "Logging specific to the SURF network GTNetS module"); extern routing_t used_routing; +double sg_gtnets_jitter=0.0; +int sg_gtnets_jitter_seed=10; static void link_new(char *name, double bw, double lat, xbt_dict_t props) { @@ -36,7 +39,9 @@ static void link_new(char *name, double bw, double lat, xbt_dict_t props) gtnets_link->bw_current = bw; gtnets_link->lat_current = lat; gtnets_link->id = link_count; - +#ifdef HAVE_TRACING + TRACE_surf_link_declaration (name, bw, lat); +#endif xbt_dict_set(surf_network_model->resource_set, name, gtnets_link, surf_resource_free); } @@ -229,6 +234,23 @@ static void update_actions_state(double now, double delta) DEBUG2("Action (%p) remains old value: %f", action, action->generic_action.remains); double remain = gtnets_get_flow_rx(action); + +#ifdef HAVE_TRACING + // tracing resource utilization + int src = TRACE_surf_gtnets_get_src (action); + int dst = TRACE_surf_gtnets_get_dst (action); + if (src != -1 && dst != -1){ + xbt_dynar_t route = used_routing->get_route(src, dst); + network_link_GTNETS_t link; + unsigned int i; + xbt_dynar_foreach(route, i, link) { + + TRACE_surf_link_set_utilization (link->generic_resource.name, + action->generic_action.data, (action->generic_action.remains-remain)/delta, now-delta, delta); + } + } +#endif + DEBUG1("Remain value returned by GTNetS : %f", remain); //need to trust this remain value if (remain == 0) { @@ -244,6 +266,9 @@ static void update_actions_state(double now, double delta) action = (surf_action_network_GTNETS_t) (metadata[i]); action->generic_action.finish = now + time_to_next_flow_completion; +#ifdef HAVE_TRACING + TRACE_surf_gtnets_destroy (action); +#endif action_state_set((surf_action_t) action, SURF_ACTION_DONE); DEBUG1("----> Action (%p) just terminated", action); } @@ -285,6 +310,9 @@ static surf_action_t communicate(const char *src_name, const char *dst_name, xbt_assert2(0, "Not route between host %s and host %s", src_name, dst_name); } +#ifdef HAVE_TRACING + TRACE_surf_gtnets_communicate (action, src, dst); +#endif return (surf_action_t) action; } @@ -312,8 +340,6 @@ static void finalize(void) xbt_dict_free(&surf_network_model->resource_set); surf_model_exit(surf_network_model); - - free(surf_network_model); surf_network_model = NULL; gtnets_finalize(); @@ -361,6 +387,11 @@ void surf_network_model_init_GTNETS(const char *filename) define_callbacks(filename); xbt_dynar_push(model_list, &surf_network_model); + if(sg_gtnets_jitter > 0.0){ + gtnets_set_jitter(sg_gtnets_jitter); + gtnets_set_jitter_seed(sg_gtnets_jitter_seed); + } + update_model_description(surf_network_model_description, "GTNets", surf_network_model); }