Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use peak and scale values for the network also. But the CPU events update the scale...
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 13 Jul 2009 15:27:27 +0000 (15:27 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 13 Jul 2009 15:27:27 +0000 (15:27 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6478 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/include/surf/surf.h
src/include/surf/surf_resource_lmm.h
src/surf/network.c

index 2a93d17..5f6edf5 100644 (file)
@@ -259,8 +259,8 @@ XBT_PUBLIC(int) find_model_description(s_surf_model_description_t * table,
  * Resource which have a metric handled by a maxmin system
  */
 typedef struct {
-  double current;
-  double max;
+  double scale;
+  double peak;
   tmgr_trace_event_t event;
 } s_surf_metric_t;
 
index d4740ee..48feddc 100644 (file)
@@ -15,7 +15,7 @@ surf_resource_lmm_t surf_resource_lmm_new(size_t childsize,
     lmm_system_t system, double constraint_value,
     tmgr_history_t history,
     int state_init, tmgr_trace_t state_trace,
-    double metric_init, tmgr_trace_t metric_trace) {
+    double metric_peak, tmgr_trace_t metric_trace) {
 
   surf_resource_lmm_t res = (surf_resource_lmm_t)surf_resource_new(childsize,model,name,props);
 
@@ -24,7 +24,8 @@ surf_resource_lmm_t surf_resource_lmm_new(size_t childsize,
   if (state_trace)
     res->state_event = tmgr_history_add_trace(history, state_trace, 0.0, 0, res);
 
-  res->power.current = metric_init;
+  res->power.scale = 1.0;
+  res->power.peak = metric_peak;
   if (metric_trace)
     res->power.event = tmgr_history_add_trace(history, metric_trace, 0.0, 0, res);
   return res;
index fa21cae..e7292f1 100644 (file)
@@ -263,14 +263,15 @@ static void update_resource_state(void *id,
 
   if (event_type == nw_link->lmm_resource.power.event) {
     double delta =
-      weight_S_parameter / value - weight_S_parameter / nw_link->lmm_resource.power.current;
+      weight_S_parameter / value - weight_S_parameter /
+          (nw_link->lmm_resource.power.peak * nw_link->lmm_resource.power.scale);
     lmm_variable_t var = NULL;
     lmm_element_t elem = NULL;
     surf_action_network_CM02_t action = NULL;
 
-    nw_link->lmm_resource.power.current = value;
+    nw_link->lmm_resource.power.peak = value;
     lmm_update_constraint_bound(network_maxmin_system, nw_link->lmm_resource.constraint,
-                                bandwidth_factor * nw_link->lmm_resource.power.current);
+                                bandwidth_factor * (nw_link->lmm_resource.power.peak * nw_link->lmm_resource.power.scale));
     if (weight_S_parameter > 0) {
       while ((var = lmm_get_var_from_cnst
               (network_maxmin_system, nw_link->lmm_resource.constraint, &elem))) {
@@ -371,7 +372,9 @@ static surf_action_t communicate(const char *src_name, const char *dst_name,int
   xbt_dynar_foreach(route,i,link) {
     action->latency += link->lat_current;
     action->weight +=
-      link->lat_current + weight_S_parameter / link->lmm_resource.power.current;
+      link->lat_current +
+      weight_S_parameter /
+        (link->lmm_resource.power.peak * link->lmm_resource.power.scale);
   }
   /* LARGE PLATFORMS HACK:
      Add src->link and dst->link latencies */
@@ -419,7 +422,8 @@ static surf_action_t communicate(const char *src_name, const char *dst_name,int
 
 static double get_link_bandwidth(const void *link)
 {
-  return ((link_CM02_t) link)->lmm_resource.power.current;
+  surf_resource_lmm_t lmm = (surf_resource_lmm_t)link;
+  return lmm->power.peak * lmm->power.scale;
 }
 
 static double get_link_latency(const void *link)