Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add the bandwidth factor for the standard model as well as for the new LegrandVelho...
[simgrid.git] / src / surf / network.c
index 32d0482..7f207d0 100644 (file)
@@ -18,6 +18,10 @@ static void (*network_solve) (lmm_system_t) = NULL;
 xbt_dict_t link_set = NULL;
 xbt_dict_t network_card_set = NULL;
 
+double latency_factor = 1.0; /* default value */
+double bandwidth_factor = 1.0; /* default value */
+
+
 int card_number = 0;
 int host_number = 0;
 link_CM02_t **routing_table = NULL;
@@ -70,7 +74,7 @@ static link_CM02_t link_new(char *name,
 
   nw_link->constraint =
       lmm_constraint_new(network_maxmin_system, nw_link,
-                        nw_link->bw_current);
+                        bandwidth_factor*nw_link->bw_current);
 
   if (policy == SURF_LINK_FATPIPE)
     lmm_constraint_shared(nw_link->constraint);
@@ -308,8 +312,8 @@ static int resource_used(void *resource_id)
 
 static int action_free(surf_action_t action)
 {
-  action->using--;
-  if (!action->using) {
+  action->refcount --;
+  if (!action->refcount ) {
     xbt_swag_remove(action, action->state_set);
     if (((surf_action_network_CM02_t) action)->variable)
       lmm_variable_free(network_maxmin_system,
@@ -322,7 +326,7 @@ static int action_free(surf_action_t action)
 
 static void action_use(surf_action_t action)
 {
-  action->using++;
+  action->refcount ++;
 }
 
 static void action_cancel(surf_action_t action)
@@ -433,7 +437,7 @@ static void update_resource_state(void *id,
   if (event_type == nw_link->bw_event) {
     nw_link->bw_current = value;
     lmm_update_constraint_bound(network_maxmin_system, nw_link->constraint,
-                               nw_link->bw_current);
+                               bandwidth_factor*nw_link->bw_current);
   } else if (event_type == nw_link->lat_event) {
     double delta = value - nw_link->lat_current;
     lmm_variable_t var = NULL;
@@ -459,8 +463,7 @@ static void update_resource_state(void *id,
       if (!(action->suspended))
        lmm_update_variable_weight(network_maxmin_system, action->variable,
                                   action->lat_current);
-      lmm_update_variable_latency(network_maxmin_system, action->variable,
-                                 delta);
+
     }
   } else if (event_type == nw_link->state_event) {
     if (value > 0)
@@ -514,7 +517,7 @@ static surf_action_t communicate(void *src, void *dst, double size,
 
   action = xbt_new0(s_surf_action_network_CM02_t, 1);
 
-  action->generic_action.using = 1;
+  action->generic_action.refcount  = 1;
   action->generic_action.cost = size;
   action->generic_action.remains = size;
   action->generic_action.max_duration = NO_MAX_DURATION;
@@ -542,6 +545,8 @@ static surf_action_t communicate(void *src, void *dst, double size,
   /* LARGE PLATFORMS HACK:
      Add src->link and dst->link latencies */
   action->lat_current = action->latency;
+  action->latency *= latency_factor;
+
 
   /* LARGE PLATFORMS HACK:
      lmm_variable_new(..., total_route_size)*/
@@ -573,8 +578,6 @@ static surf_action_t communicate(void *src, void *dst, double size,
       lmm_update_variable_bound(network_maxmin_system, action->variable,
                                action->rate);
   }
-  lmm_update_variable_latency(network_maxmin_system, action->variable,
-                             action->latency);
 
   for (i = 0; i < route_size; i++)
     lmm_expand(network_maxmin_system, route[i]->constraint,
@@ -617,6 +620,11 @@ static double get_link_latency(const void *link)
   return ((link_CM02_t) link)->lat_current;
 }
 
+static int link_shared(const void *link)
+{
+  return lmm_constraint_is_shared(((link_CM02_t) link)->constraint);
+}
+
 static xbt_dict_t get_properties(void *link)
 {
  return ((link_CM02_t) link)->properties;
@@ -749,6 +757,8 @@ static void surf_network_model_init_internal(void)
       get_link_bandwidth;
   surf_network_model->extension_public->get_link_latency =
       get_link_latency;
+  surf_network_model->extension_public->link_shared =
+      link_shared;
 
   surf_network_model->common_public->get_properties =  get_properties;
 
@@ -759,6 +769,27 @@ static void surf_network_model_init_internal(void)
     network_maxmin_system = lmm_system_new();
 }
 
+/************************************************************************/
+/* New model based on optimizations discussed during this thesis        */
+/************************************************************************/
+void surf_network_model_init_LegrandVelho(const char *filename)
+{
+
+  if (surf_network_model)
+    return;
+  surf_network_model_init_internal();
+  define_callbacks(filename);
+  xbt_dynar_push(model_list, &surf_network_model);
+  network_solve = lmm_solve;
+
+  latency_factor = 10.4;
+  bandwidth_factor = 0.92;
+
+  update_model_description(surf_network_model_description,
+                          "LegrandVelho",
+                          (surf_model_t) surf_network_model);
+}
+
 /***************************************************************************/
 /* The nice TCP sharing model designed by Loris Marchal and Henri Casanova */
 /***************************************************************************/
@@ -838,7 +869,7 @@ void surf_network_model_init_Vegas(const char *filename)
 }
 
 #ifdef HAVE_SDP
-void surf_network_model_init_SDP(const char *filename)
+ void surf_network_model_init_SDP(const char *filename)
 {
   if (surf_network_model)
     return;
@@ -853,18 +884,3 @@ void surf_network_model_init_SDP(const char *filename)
                           (surf_model_t) surf_network_model);
 }
 #endif
-
-#ifdef HAVE_GTNETS
-void surf_network_model_init_GTNETS(const char *filename)
-{
-  if (surf_network_model)
-    return;
-  surf_network_model_init_internal();
-  define_callbacks(filename);
-  xbt_dynar_push(model_list, &surf_network_model);
-
-  update_model_description(surf_network_model_description,
-                          "GTNets",
-                          (surf_model_t) surf_network_model);
-}
-#endif