From: alegrand Date: Tue, 7 Dec 2004 19:26:25 +0000 (+0000) Subject: Taking latencies into account (but not for the bandwidth limitation yet). X-Git-Tag: v3.3~4793 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/652a551093d0eaf9b82bce16d654f680c82e71ab Taking latencies into account (but not for the bandwidth limitation yet). git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@557 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/src/surf/network.c b/src/surf/network.c index dec74d3d49..3b7f36dce9 100644 --- a/src/surf/network.c +++ b/src/surf/network.c @@ -305,8 +305,8 @@ static xbt_heap_float_t share_resources(xbt_heap_float_t now) min = action->generic_action.remains / value; xbt_swag_foreach(action, running_actions) { - value = action->generic_action.remains / - lmm_variable_getvalue(action->variable); + value = action->latency + (action->generic_action.remains / + lmm_variable_getvalue(action->variable)); if (value < min) min = value; } @@ -318,6 +318,7 @@ static xbt_heap_float_t share_resources(xbt_heap_float_t now) static void update_actions_state(xbt_heap_float_t now, xbt_heap_float_t delta) { + xbt_heap_float_t deltap = 0.0; surf_action_network_t action = NULL; surf_action_network_t next_action = NULL; xbt_swag_t running_actions = @@ -326,8 +327,19 @@ static void update_actions_state(xbt_heap_float_t now, surf_network_resource->common_public->states.failed_action_set; xbt_swag_foreach_safe(action, next_action, running_actions) { + deltap = delta; + if(action->latency>0) { + if(action->latency>deltap) { + action->latency-=deltap; + deltap = 0.0; + } else { + deltap -= action->latency; + action->latency = 0.0; + } + } action->generic_action.remains -= - lmm_variable_getvalue(action->variable) * delta; + lmm_variable_getvalue(action->variable) * deltap; + /* if(action->generic_action.remains<.00001) action->generic_action.remains=0; */ if (action->generic_action.remains <= 0) { @@ -416,6 +428,10 @@ static surf_action_t communicate(void *src, void *dst, lmm_expand(maxmin_system, route[i]->constraint, action->variable, 1.0); + action->latency = 0.0; + for(i=0; ilatency += route[i]->lat_current; + return (surf_action_t) action; } diff --git a/src/surf/network_private.h b/src/surf/network_private.h index 52e943c18e..203c3cdf1c 100644 --- a/src/surf/network_private.h +++ b/src/surf/network_private.h @@ -36,6 +36,7 @@ typedef struct network_card { typedef struct surf_action_network { s_surf_action_t generic_action; + xbt_heap_float_t latency; lmm_variable_t variable; network_card_t src; network_card_t dst;