From: Pedro Velho Date: Tue, 17 May 2011 08:16:29 +0000 (+0200) Subject: Fixed the reamining value, now distinguish between flows that have completed and... X-Git-Tag: v3_6_rc3~45 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/3e8c5cb20de20aaaa99013053a6c556a59d4d2bb Fixed the reamining value, now distinguish between flows that have completed and are still to be started. --- diff --git a/src/surf/network_gtnets.c b/src/surf/network_gtnets.c index c867d2e212..f36429d07e 100644 --- a/src/surf/network_gtnets.c +++ b/src/surf/network_gtnets.c @@ -240,7 +240,7 @@ static void update_actions_state(double now, double delta) xbt_swag_t running_actions = surf_network_model->states.running_action_set; - /* If there are no renning flows, just return */ + /* If there are no running flows, just return */ if (time_to_next_flow_completion < 0.0) { return; } @@ -264,12 +264,43 @@ static void update_actions_state(double now, double delta) action->generic_action.remains); double sent = gtnets_get_flow_rx(action); + XBT_DEBUG("Sent value returned by GTNetS : %f", sent); + #ifdef HAVE_TRACING - double trace_sent = sent; - if (trace_sent == 0) { - //if sent is equals to 0, means that gtnets sent all the bytes - trace_sent = action->generic_action.cost; + action->last_remains = action->generic_action.remains; +#endif + + //need to trust this remain value + if (sent == 0) { + action->generic_action.remains = 0; + } else { + action->generic_action.remains = + action->generic_action.cost - sent; } + + // verify that this action is a finishing action. + int found=0; + for (i = 0; i < num_flows; i++) { + if(action == (surf_action_network_GTNETS_t) (metadata[i])){ + found = 1; + break; + } + } + + // indeed this action have not yet started + // because of that we need to fix the remaining to the + // original total cost + if(found != 1 && action->generic_action.remains == 0 ){ + action->generic_action.remains = action->generic_action.cost; + } + + XBT_DEBUG("Action (%p) remains new value: %f", action, + action->generic_action.remains); + +#ifdef HAVE_TRACING + double last_amount_sent = (action->generic_action.cost - action->last_remains); + double amount_sent = (action->generic_action.cost - action->generic_action.remains); + // tracing resource utilization if (TRACE_is_active()) { xbt_dynar_t route = global_routing->get_route(action->src_name, @@ -280,34 +311,28 @@ static void update_actions_state(double now, double delta) TRACE_surf_link_set_utilization (link->generic_resource.name, action->generic_action.data, (surf_action_t) action, - trace_sent/delta, + (amount_sent - last_amount_sent)/(delta), now-delta, delta); } } #endif - XBT_DEBUG("Sent value returned by GTNetS : %f", sent); - //need to trust this remain value - if (sent == 0) { - action->generic_action.remains = 0; - } else { - action->generic_action.remains = - action->generic_action.cost - sent; - } - XBT_DEBUG("Action (%p) remains new value: %f", action, - action->generic_action.remains); + } for (i = 0; i < num_flows; i++) { action = (surf_action_network_GTNETS_t) (metadata[i]); + + action->generic_action.finish = now + time_to_next_flow_completion; + action_state_set((surf_action_t) action, SURF_ACTION_DONE); + XBT_DEBUG("----> Action (%p) just terminated", action); + #ifdef HAVE_TRACING TRACE_surf_gtnets_destroy(action); #endif - action_state_set((surf_action_t) action, SURF_ACTION_DONE); - XBT_DEBUG("----> Action (%p) just terminated", action); } @@ -353,6 +378,8 @@ static surf_action_t communicate(const char *src_name, surf_action_new(sizeof(s_surf_action_network_GTNETS_t), size, surf_network_model, 0); + action->last_remains = 0; + /* Add a flow to the GTNets Simulation, associated to this action */ if (gtnets_create_flow(src, dst, size, (void *) action) < 0) { xbt_die("Not route between host %s and host %s", src_name, dst_name); diff --git a/src/surf/network_gtnets_private.h b/src/surf/network_gtnets_private.h index 0b42195c24..9cd3ab8795 100644 --- a/src/surf/network_gtnets_private.h +++ b/src/surf/network_gtnets_private.h @@ -23,6 +23,9 @@ typedef struct surf_action_network_GTNETS { s_surf_action_t generic_action; double latency; double lat_current; +#ifdef HAVE_TRACING + int last_remains; +#endif lmm_variable_t variable; double rate; int suspended;