Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Do not require doxygen in maintainer mode
[simgrid.git] / src / surf / network.c
index e5f8a1f..aa60e98 100644 (file)
@@ -20,6 +20,7 @@ xbt_dict_t network_card_set = NULL;
 
 double latency_factor = 1.0; /* default value */
 double bandwidth_factor = 1.0; /* default value */
+double weight_S_parameter = 0.0; /* default value */
 
 int card_number = 0;
 int host_number = 0;
@@ -252,8 +253,8 @@ static void add_traces(void) {
       tmgr_trace_t trace = xbt_dict_get_or_null(traces_set_list, trace_name);
       link_CM02_t link = xbt_dict_get_or_null(link_set, elm);
       
-      xbt_assert1(link, "Link %s undefined", elm);
-      xbt_assert1(trace, "Trace %s undefined", trace_name);
+      xbt_assert2(link, "Cannot connect trace %s to link %s: link undefined", trace_name,elm);
+      xbt_assert2(trace, "Cannot connect trace %s to link %s: trace undefined", trace_name,elm);
       
       link->state_event = tmgr_history_add_trace(history, trace, 0.0, 0, link);
    }
@@ -262,8 +263,8 @@ static void add_traces(void) {
       tmgr_trace_t trace = xbt_dict_get_or_null(traces_set_list, trace_name);
       link_CM02_t link = xbt_dict_get_or_null(link_set, elm);
       
-      xbt_assert1(link, "Link %s undefined", elm);
-      xbt_assert1(trace, "Trace %s undefined", trace_name);
+      xbt_assert2(link, "Cannot connect trace %s to link %s: link undefined", trace_name,elm);
+      xbt_assert2(trace, "Cannot connect trace %s to link %s: trace undefined", trace_name,elm);
       
       link->bw_event = tmgr_history_add_trace(history, trace, 0.0, 0, link);
    }
@@ -272,8 +273,8 @@ static void add_traces(void) {
       tmgr_trace_t trace = xbt_dict_get_or_null(traces_set_list, trace_name);
       link_CM02_t link = xbt_dict_get_or_null(link_set, elm);
       
-      xbt_assert1(link, "Link %s undefined", elm);
-      xbt_assert1(trace, "Trace %s undefined", trace_name);
+      xbt_assert2(link, "Cannot connect trace %s to link %s: link undefined", trace_name,elm);
+      xbt_assert2(trace, "Cannot connect trace %s to link %s: trace undefined", trace_name,elm);
       
       link->lat_event = tmgr_history_add_trace(history, trace, 0.0, 0, link);
    }
@@ -434,9 +435,24 @@ static void update_resource_state(void *id,
   /*     value, event_type); */
 
   if (event_type == nw_link->bw_event) {
+    double delta = weight_S_parameter/value - weight_S_parameter/nw_link->bw_current;
+    lmm_variable_t var = NULL;
+    lmm_element_t elem = NULL;
+    surf_action_network_CM02_t action = NULL;
+
     nw_link->bw_current = value;
     lmm_update_constraint_bound(network_maxmin_system, nw_link->constraint,
                                bandwidth_factor*nw_link->bw_current);
+    if(weight_S_parameter>0) {
+      while ((var= lmm_get_var_from_cnst
+             (network_maxmin_system, nw_link->constraint, &elem))) {
+       action = lmm_variable_id(var);
+       action->weight += delta;
+       if (!(action->suspended))
+         lmm_update_variable_weight(network_maxmin_system, action->variable,
+                                    action->weight);
+      }
+    }
   } else if (event_type == nw_link->lat_event) {
     double delta = value - nw_link->lat_current;
     lmm_variable_t var = NULL;
@@ -540,15 +556,16 @@ static surf_action_t communicate(void *src, void *dst, double size,
   action->rate = rate;
 
   action->latency = 0.0;
-  for (i = 0; i < route_size; i++)
+  action->weight = 0.0;
+  for (i = 0; i < route_size; i++) {
     action->latency += route[i]->lat_current;
+    action->weight += route[i]->lat_current + weight_S_parameter/route[i]->bw_current;
+  }
   /* LARGE PLATFORMS HACK:
      Add src->link and dst->link latencies */
   action->lat_current = action->latency;
-  action->weight = action->latency;
   action->latency *= latency_factor;
 
-
   /* LARGE PLATFORMS HACK:
      lmm_variable_new(..., total_route_size)*/
   if (action->latency > 0)
@@ -785,6 +802,7 @@ void surf_network_model_init_LegrandVelho(const char *filename)
 
   latency_factor = 10.4;
   bandwidth_factor = 0.92;
+  weight_S_parameter = 8775;
 
   update_model_description(surf_network_model_description,
                           "LegrandVelho",
@@ -829,6 +847,10 @@ void surf_network_model_init_Reno(const char *filename)
                                    func_reno_fpi);
   network_solve = lagrange_solve;
 
+  latency_factor = 10.4;
+  bandwidth_factor = 0.92;
+  weight_S_parameter = 8775;
+
   update_model_description(surf_network_model_description,
                           "Reno",
                           (surf_model_t) surf_network_model);
@@ -847,6 +869,10 @@ void surf_network_model_init_Reno2(const char *filename)
                                    func_reno2_fpi);
   network_solve = lagrange_solve;
 
+  latency_factor = 10.4;
+  bandwidth_factor = 0.92;
+  weight_S_parameter = 8775;
+
   update_model_description(surf_network_model_description,
                           "Reno2",
                           (surf_model_t) surf_network_model);
@@ -864,6 +890,10 @@ void surf_network_model_init_Vegas(const char *filename)
                                    func_vegas_fpi);
   network_solve = lagrange_solve;
 
+  latency_factor = 10.4;
+  bandwidth_factor = 0.92;
+  weight_S_parameter = 8775;
+
   update_model_description(surf_network_model_description,
                           "Vegas",
                           (surf_model_t) surf_network_model);