From fa2100f09707b904904ddb3bd7b05d07fad350e2 Mon Sep 17 00:00:00 2001 From: alegrand Date: Tue, 7 Dec 2004 22:27:20 +0000 Subject: [PATCH] Taking latencies into account to bound the effective bandwidth. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@560 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/surf/network.c | 15 +++++++++++++++ src/surf/network_private.h | 1 + testsuite/surf/platform.txt | 2 +- testsuite/surf/surf_usage.c | 2 +- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/surf/network.c b/src/surf/network.c index 3b7f36dce9..6c0e54aa8a 100644 --- a/src/surf/network.c +++ b/src/surf/network.c @@ -6,6 +6,8 @@ #include "network_private.h" #include "xbt/dict.h" +#define SG_TCP_CTE_GAMMA 20000.0 + XBT_LOG_NEW_DEFAULT_SUBCATEGORY(network, surf, "Logging specific to the SURF network module"); @@ -383,7 +385,17 @@ static void update_resource_state(void *id, lmm_update_constraint_bound(maxmin_system, nw_link->constraint, nw_link->bw_current); } else if (event_type == nw_link->lat_event) { + xbt_maxmin_float_t delta = value - nw_link->lat_current; + lmm_variable_t var = NULL; + surf_action_network_t action = NULL; + nw_link->lat_current = value; + while(lmm_get_var_from_cnst(maxmin_system, nw_link->constraint, &var)) { + action = lmm_variable_id(var); + action->lat_current+=delta; + lmm_update_variable_bound(maxmin_system, var, + 1/(action->lat_current)); + } } else if (event_type == nw_link->state_event) { if (value > 0) nw_link->state_current = SURF_NETWORK_LINK_ON; @@ -431,6 +443,9 @@ static surf_action_t communicate(void *src, void *dst, action->latency = 0.0; for(i=0; ilatency += route[i]->lat_current; + action->lat_current = action->latency; + lmm_update_variable_bound(maxmin_system, action->variable, + SG_TCP_CTE_GAMMA/action->lat_current); return (surf_action_t) action; } diff --git a/src/surf/network_private.h b/src/surf/network_private.h index 203c3cdf1c..d172dca27c 100644 --- a/src/surf/network_private.h +++ b/src/surf/network_private.h @@ -37,6 +37,7 @@ typedef struct network_card { typedef struct surf_action_network { s_surf_action_t generic_action; xbt_heap_float_t latency; + xbt_heap_float_t lat_current; lmm_variable_t variable; network_card_t src; network_card_t dst; diff --git a/testsuite/surf/platform.txt b/testsuite/surf/platform.txt index f6ceb71edd..f135883a7b 100644 --- a/testsuite/surf/platform.txt +++ b/testsuite/surf/platform.txt @@ -8,7 +8,7 @@ /* The network section */ - LinkA 10.0 "" 0.01 "" ON "" + LinkA 10.0 "" 0.2 "" ON "" /* The route section */ diff --git a/testsuite/surf/surf_usage.c b/testsuite/surf/surf_usage.c index 15c6b0f01a..e4068ae45a 100644 --- a/testsuite/surf/surf_usage.c +++ b/testsuite/surf/surf_usage.c @@ -76,7 +76,7 @@ void test(void) printf("%s : %p\n", surf_network_resource->common_public->get_resource_name(cardB), cardB); /* Let's do something on it */ - commAB = surf_network_resource->extension_public->communicate(cardA, cardB, 132.0); + commAB = surf_network_resource->extension_public->communicate(cardA, cardB, 150.0); surf_solve(); /* Takes traces into account. Returns 0.0 */ do { -- 2.20.1