Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add debuging informations.
[simgrid.git] / src / surf / workstation_KCCFLN05.c
index 2669c58..d0c817a 100644 (file)
@@ -152,32 +152,36 @@ static void action_recycle(surf_action_t action)
 static void action_suspend(surf_action_t action)
 {
   XBT_IN1("(%p))",action);
-  ((surf_action_workstation_KCCFLN05_t) action)->suspended = 1;
-  lmm_update_variable_weight(maxmin_system,
-                            ((surf_action_workstation_KCCFLN05_t)
-                             action)->variable, 0.0);
+  if(((surf_action_workstation_KCCFLN05_t) action)->suspended != 2) {
+    ((surf_action_workstation_KCCFLN05_t) action)->suspended = 1;
+    lmm_update_variable_weight(maxmin_system,
+                              ((surf_action_workstation_KCCFLN05_t)
+                               action)->variable, 0.0);
+  }
   XBT_OUT;
 }
 
 static void action_resume(surf_action_t action)
 {
   XBT_IN1("(%p)",action);
-  if(((surf_action_workstation_KCCFLN05_t)action)->lat_current==0.0)
-    lmm_update_variable_weight(maxmin_system,
-                              ((surf_action_workstation_KCCFLN05_t)
-                               action)->variable, 1.0);
-  else
-    lmm_update_variable_weight(maxmin_system,
-                              ((surf_action_workstation_KCCFLN05_t) action)->variable, 
-                              ((surf_action_workstation_KCCFLN05_t) action)->lat_current);
-
-  ((surf_action_workstation_KCCFLN05_t) action)->suspended = 0;
+  if(((surf_action_workstation_KCCFLN05_t) action)->suspended !=2) {
+    if(((surf_action_workstation_KCCFLN05_t)action)->lat_current==0.0)
+      lmm_update_variable_weight(maxmin_system,
+                                ((surf_action_workstation_KCCFLN05_t)
+                                 action)->variable, 1.0);
+    else
+      lmm_update_variable_weight(maxmin_system,
+                                ((surf_action_workstation_KCCFLN05_t) action)->variable, 
+                                ((surf_action_workstation_KCCFLN05_t) action)->lat_current);
+    
+    ((surf_action_workstation_KCCFLN05_t) action)->suspended = 0;
+  }
   XBT_OUT;
 }
 
 static int action_is_suspended(surf_action_t action)
 {
-  return (((surf_action_workstation_KCCFLN05_t) action)->suspended);
+  return (((surf_action_workstation_KCCFLN05_t) action)->suspended==1);
 }
 
 static void action_set_max_duration(surf_action_t action, double duration)
@@ -229,15 +233,20 @@ static double share_resources(double now)
 
   xbt_swag_foreach(action, running_actions) {
     if(action->latency>0) {
-      if(min<0) min = action->latency;
-      else if (action->latency<min) min = action->latency;
+      if(min<0) {
+       min = action->latency;
+       DEBUG2("Updating min (value) with %p: %f",action, min);
+      }
+      else if (action->latency<min) {
+       min = action->latency;
+       DEBUG2("Updating min (latency) with %p: %f",action, min);
+      }
     }
   }
 
+  DEBUG1("min value : %f",min);
+
   return min;
-/*   return generic_maxmin_share_resources(surf_workstation_resource->common_public-> */
-/*                                     states.running_action_set, */
-/*                                     xbt_swag_offset(action, variable)); */
 }
 
 static void update_actions_state(double now, double delta)
@@ -258,7 +267,7 @@ static void update_actions_state(double now, double delta)
        double_update(&(deltap), action->latency);
        action->latency = 0.0;
       }
-      if ((action->latency == 0.0) && !(action->suspended)) {
+      if ((action->latency == 0.0) && (action->suspended==0)) {
        if((action)->lat_current==0.0)
          lmm_update_variable_weight(maxmin_system,action->variable, 1.0);
        else
@@ -266,8 +275,12 @@ static void update_actions_state(double now, double delta)
                                     action->lat_current);
       }
     }
+    DEBUG3("Action (%p) : remains (%g) updated by %g.",
+          action, action->generic_action.remains,
+          lmm_variable_getvalue(action->variable) * deltap);
     double_update(&(action->generic_action.remains),
                       lmm_variable_getvalue(action->variable) * deltap);
+
     if (action->generic_action.max_duration != NO_MAX_DURATION)
       double_update(&(action->generic_action.max_duration), delta);
 
@@ -335,7 +348,7 @@ static void update_resource_state(void *id,
        else 
          lmm_update_variable_bound(maxmin_system, action->variable,
                                    min(action->rate,SG_TCP_CTE_GAMMA / (2.0 * action->lat_current)));
-       if(!(action->suspended))
+       if(action->suspended==0)
          lmm_update_variable_weight(maxmin_system, action->variable, 
                                     action->lat_current);
       }
@@ -454,6 +467,7 @@ static surf_action_t action_sleep(void *cpu, double duration)
 
   action = (surf_action_workstation_KCCFLN05_t) execute(cpu, 1.0);
   action->generic_action.max_duration = duration;
+  action->suspended = 2;
   lmm_update_variable_weight(maxmin_system, action->variable, 0.0);
 
   XBT_OUT;
@@ -567,7 +581,7 @@ static surf_action_t execute_parallel_task(int workstation_nb,
   if (parallel_task_network_link_set == NULL) {
     parallel_task_network_link_set = xbt_dict_new_ext(workstation_nb * workstation_nb * 10);
   }
-
+  
   /* Compute the number of affected resources... */
   for(i=0; i< workstation_nb; i++) {
     for(j=0; j< workstation_nb; j++) {
@@ -582,17 +596,20 @@ static surf_action_t execute_parallel_task(int workstation_nb,
        }
     }
   }
-
   nb_link = xbt_dict_length(parallel_task_network_link_set);
   xbt_dict_reset(parallel_task_network_link_set);
 
+
   for (i = 0; i<workstation_nb; i++)
     if(computation_amount[i]>0) nb_host++;
  
-  if(nb_link + workstation_nb == 0)
+
+  if(nb_link + nb_host == 0) /* was workstation_nb... */
     return NULL;
 
   action = xbt_new0(s_surf_action_workstation_KCCFLN05_t, 1);
+  DEBUG3("Creating a parallel task (%p) with %d cpus and %d links.",
+        action, nb_host,  nb_link);
   action->generic_action.using = 1;
   action->generic_action.cost = amount;
   action->generic_action.remains = amount;