Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Taking latencies into account to bound the effective bandwidth.
authoralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 7 Dec 2004 22:27:20 +0000 (22:27 +0000)
committeralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 7 Dec 2004 22:27:20 +0000 (22:27 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@560 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/surf/network.c
src/surf/network_private.h
testsuite/surf/platform.txt
testsuite/surf/surf_usage.c

index 3b7f36d..6c0e54a 100644 (file)
@@ -6,6 +6,8 @@
 #include "network_private.h"
 #include "xbt/dict.h"
 
 #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");
 
 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) {
     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;
     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;
   } 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; i<route_size; i++)
     action->latency += route[i]->lat_current;
   action->latency = 0.0;
   for(i=0; i<route_size; i++)
     action->latency += 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;
 }
 
   return (surf_action_t) action;
 }
index 203c3cd..d172dca 100644 (file)
@@ -37,6 +37,7 @@ typedef struct network_card {
 typedef struct surf_action_network {
   s_surf_action_t generic_action;
   xbt_heap_float_t latency;
 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;
   lmm_variable_t variable;
   network_card_t src;
   network_card_t dst;
index f6ceb71..f135883 100644 (file)
@@ -8,7 +8,7 @@
 
 
 <NETWORK>  /* The network section */
 
 
 <NETWORK>  /* The network section */
-  LinkA 10.0 "" 0.01 "" ON ""
+  LinkA 10.0 "" 0.2 "" ON ""
 </NETWORK>
 
 <ROUTE>  /* The route section */
 </NETWORK>
 
 <ROUTE>  /* The route section */
index 15c6b0f..e4068ae 100644 (file)
@@ -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 */
   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 {
 
   surf_solve(); /* Takes traces into account. Returns 0.0 */
   do {