Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove XBT_INFO call
[simgrid.git] / src / surf / surf_interface.cpp
index 726e0fd..6be998b 100644 (file)
@@ -90,6 +90,8 @@ xbt_dynar_t surf_path = NULL;
 xbt_dynar_t host_that_restart = NULL;
 xbt_dict_t watched_hosts_lib;
 
+surf_callback(void, void) surfExitCallbacks;
+
 s_surf_model_description_t surf_plugin_description[] = {
                  {"Energy",
                   "Cpu energy consumption.",
@@ -154,7 +156,7 @@ s_surf_model_description_t surf_workstation_model_description[] = {
 
 s_surf_model_description_t surf_vm_workstation_model_description[] = {
   {"default",
-   "Default vm workstation model.)",
+   "Default vm workstation model.",
    surf_vm_workstation_model_init_current_default},
   {NULL, NULL, NULL}      /* this array must be NULL terminated */
 };
@@ -332,7 +334,9 @@ int find_model_description(s_surf_model_description_t * table,
     if (!strcmp(name, table[i].name)) {
       return i;
     }
-  name_list = strdup(table[0].name);
+  if (!table[0].name)
+    xbt_die("No model is valid! This is a bug.");
+  name_list = xbt_strdup(table[0].name);
   for (i = 1; table[i].name; i++) {
     name_list = (char *) xbt_realloc(name_list, strlen(name_list) + strlen(table[i].name) + 3);
     strcat(name_list, ", ");
@@ -368,6 +372,11 @@ static XBT_INLINE void surf_workstation_free(void *r)
   delete static_cast<WorkstationPtr>(r);
 }
 
+static XBT_INLINE void surf_storage_free(void *r)
+{
+  delete static_cast<StoragePtr>(r);
+}
+
 
 void sg_version(int *ver_major,int *ver_minor,int *ver_patch) {
   *ver_major = SIMGRID_VERSION_MAJOR;
@@ -383,6 +392,7 @@ void surf_init(int *argc, char **argv)
   as_router_lib = xbt_lib_new();
   storage_lib = xbt_lib_new();
   storage_type_lib = xbt_lib_new();
+  file_lib = xbt_lib_new();
   watched_hosts_lib = xbt_dict_new_homogeneous(NULL);
 
   XBT_DEBUG("Add routing levels");
@@ -394,6 +404,7 @@ void surf_init(int *argc, char **argv)
   SURF_CPU_LEVEL = xbt_lib_add_level(host_lib,surf_cpu_free);
   SURF_WKS_LEVEL = xbt_lib_add_level(host_lib,surf_workstation_free);
   SURF_LINK_LEVEL = xbt_lib_add_level(link_lib,surf_link_free);
+  SURF_STORAGE_LEVEL = xbt_lib_add_level(storage_lib,surf_storage_free);
 
   xbt_init(argc, argv);
   if (!model_list)
@@ -426,12 +437,25 @@ void surf_exit(void)
 
   sg_config_finalize();
 
+  xbt_dynar_free(&host_that_restart);
+  xbt_dynar_free(&surf_path);
+
+  xbt_lib_free(&host_lib);
+  xbt_lib_free(&link_lib);
+  xbt_lib_free(&as_router_lib);
+  xbt_lib_free(&storage_lib);
+  xbt_lib_free(&storage_type_lib);
+  xbt_lib_free(&file_lib);
+  xbt_dict_free(&watched_hosts_lib);
+
   xbt_dynar_foreach(model_list, iter, model)
     delete model;
   xbt_dynar_free(&model_list);
   xbt_dynar_free(&model_list_invoke);
   routing_exit();
 
+  surf_callback_emit(surfExitCallbacks);
+
   if (maxmin_system) {
     lmm_system_free(maxmin_system);
     maxmin_system = NULL;
@@ -448,17 +472,6 @@ void surf_exit(void)
   xbt_free(surf_mins);
   surf_mins = NULL;
 
-  xbt_dynar_free(&host_that_restart);
-  xbt_dynar_free(&surf_path);
-
-  xbt_lib_free(&host_lib);
-  xbt_lib_free(&link_lib);
-  xbt_lib_free(&as_router_lib);
-  xbt_lib_free(&storage_lib);
-  xbt_lib_free(&storage_type_lib);
-
-  xbt_dict_free(&watched_hosts_lib);
-
   tmgr_finalize();
   surf_parse_lex_destroy();
   surf_parse_free_callbacks();
@@ -537,7 +550,7 @@ double Model::shareResourcesLazy(double now)
     value = lmm_variable_getvalue(action->getVariable());
     if (value > 0) {
       if (action->getRemains() > 0) {
-        value = action->getRemains() / value;
+        value = action->getRemainsNoUpdate() / value;
         min = now + value;
       } else {
         value = 0.0;
@@ -554,14 +567,14 @@ double Model::shareResourcesLazy(double now)
       max_dur_flag = 1;
     }
 
-    XBT_DEBUG("Action(%p) Start %lf Finish %lf Max_duration %lf", action,
+    XBT_DEBUG("Action(%p) Start %f Finish %f Max_duration %f", action,
         action->getStartTime(), now + value,
         action->getMaxDuration());
 
     if (min != -1) {
       action->heapRemove(p_actionHeap);
       action->heapInsert(p_actionHeap, min, max_dur_flag ? MAX_DURATION : NORMAL);
-      XBT_DEBUG("Insert at heap action(%p) min %lf now %lf", action, min,
+      XBT_DEBUG("Insert at heap action(%p) min %f now %f", action, min,
                 now);
     } else DIE_IMPOSSIBLE;
   }
@@ -572,7 +585,7 @@ double Model::shareResourcesLazy(double now)
   else
     min = -1;
 
-  XBT_DEBUG("The minimum with the HEAP %lf", min);
+  XBT_DEBUG("The minimum with the HEAP %f", min);
 
   return min;
 }
@@ -604,7 +617,7 @@ double Model::shareResourcesMaxMin(ActionListPtr running_actions,
 
   if (value > 0) {
     if (action->getRemains() > 0)
-      min = action->getRemains() / value;
+      min = action->getRemainsNoUpdate() / value;
     else
       min = 0.0;
     if ((action->getMaxDuration() >= 0) && (action->getMaxDuration() < min))
@@ -618,7 +631,7 @@ double Model::shareResourcesMaxMin(ActionListPtr running_actions,
     value = lmm_variable_getvalue(action->getVariable());
     if (value > 0) {
       if (action->getRemains() > 0)
-        value = action->getRemains() / value;
+        value = action->getRemainsNoUpdate() / value;
       else
         value = 0.0;
       if (value < min) {
@@ -662,17 +675,17 @@ Resource::Resource()
 : p_name(NULL), p_properties(NULL), p_model(NULL)
 {}
 
-Resource::Resource(surf_model_t model, const char *name, xbt_dict_t props)
+Resource::Resource(ModelPtr model, const char *name, xbt_dict_t props)
   : p_name(xbt_strdup(name)), p_properties(props), p_model(model)
   , m_running(true), m_stateCurrent(SURF_RESOURCE_ON)
 {}
 
-Resource::Resource(surf_model_t model, const char *name, xbt_dict_t props, lmm_constraint_t constraint)
+Resource::Resource(ModelPtr model, const char *name, xbt_dict_t props, lmm_constraint_t constraint)
   : p_name(xbt_strdup(name)), p_properties(props), p_model(model)
   , m_running(true), m_stateCurrent(SURF_RESOURCE_ON), p_constraint(constraint)
 {}
 
-Resource::Resource(surf_model_t model, const char *name, xbt_dict_t props, e_surf_resource_state_t stateInit)
+Resource::Resource(ModelPtr model, const char *name, xbt_dict_t props, e_surf_resource_state_t stateInit)
   : p_name(xbt_strdup(name)), p_properties(props), p_model(model)
   , m_running(true), m_stateCurrent(stateInit)
 {}
@@ -720,6 +733,8 @@ const char *Resource::getName() {
 }
 
 xbt_dict_t Resource::getProperties() {
+  if (p_properties==NULL)
+       p_properties = xbt_dict_new();
   return p_properties;
 }
 
@@ -846,6 +861,22 @@ void Action::setState(e_surf_action_state_t state)
   XBT_OUT();
 }
 
+double Action::getBound()
+{
+  return (p_variable) ? lmm_variable_getbound(p_variable) : 0;
+}
+
+void Action::setBound(double bound)
+{
+  XBT_IN("(%p,%g)", this, bound);
+  if (p_variable)
+    lmm_update_variable_bound(getModel()->getMaxminSystem(), getVariable(), bound);
+
+  if (getModel()->getUpdateMechanism() == UM_LAZY)
+       heapRemove(getModel()->getActionHeap());
+  XBT_OUT();
+}
+
 double Action::getStartTime()
 {
   return m_start;