Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
authorMartin Quinson <martin.quinson@loria.fr>
Thu, 28 Jul 2016 14:23:57 +0000 (16:23 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Thu, 28 Jul 2016 14:23:57 +0000 (16:23 +0200)
doc/doxygen/options.doc
examples/msg/CMakeLists.txt
src/include/surf/maxmin.h
src/msg/msg_task.cpp
src/msg/msg_vm.cpp
src/simgrid/sg_config.cpp
src/surf/maxmin.cpp
src/surf/sg_platf.cpp
teshsuite/surf/surf_usage2/surf_usage2.cpp

index 2f5f95f..ff8a7d3 100644 (file)
@@ -199,6 +199,11 @@ the \b maxmin/precision item (default value: 0.00001). Changing it
 may speedup the simulation by discarding very small actions, at the
 price of a reduced numerical precision.
 
+\subsection options_concurrency_limit Concurrency limit
+
+The maximum number of variables in a system can be tuned through
+the \b maxmin/concurrency_limit item (default value: 100). Setting a higher value can lift some limitations, such as the number of concurrent processes running on a single host.
+
 \subsection options_model_network Configuring the Network model
 
 \subsubsection options_model_network_gamma Maximal TCP window size
index de4960f..4805d49 100644 (file)
@@ -83,7 +83,7 @@ set(xml_files    ${xml_files}     ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actio
                                   ${CMAKE_CURRENT_SOURCE_DIR}/process-startkilltime/start_kill_d.xml       PARENT_SCOPE)
 
 foreach(x actions-comm actions-storage app-bittorrent app-chainsend app-masterworker app-pingpong app-token-ring
-          async-wait async-waitall async-waitany cloud-capping cloud-masterworker cloud-migration cloud-simple 
+          async-wait async-waitall async-waitany cloud-capping cloud-masterworker cloud-migration cloud-simple cloud-multicore
           cloud-two-tasks dht-chord dht-pastry dht-kademlia platform-failures io-file io-remote io-storage task-priority 
           process-create process-kill process-migration process-suspend platform-properties synchro-semaphore 
           process-startkilltime)
index b08c32f..29b4369 100644 (file)
 
 XBT_PUBLIC_DATA(double) sg_maxmin_precision;
 XBT_PUBLIC_DATA(double) sg_surf_precision;
+XBT_PUBLIC_DATA(int) sg_concurrency_limit;
  
 static inline void double_update(double *variable, double value, double precision)
 {
index a19d803..dee4345 100644 (file)
@@ -161,7 +161,7 @@ void MSG_task_set_copy_callback(void (*callback) (msg_task_t task, msg_process_t
 msg_process_t MSG_task_get_sender(msg_task_t task)
 {
   xbt_assert(task, "Invalid parameters");
-  return ((simdata_task_t) task->simdata)->sender;
+  return (static_cast<simdata_task_t> (task->simdata)->sender);
 }
 
 /** \ingroup m_task_management
@@ -172,7 +172,7 @@ msg_process_t MSG_task_get_sender(msg_task_t task)
 msg_host_t MSG_task_get_source(msg_task_t task)
 {
   xbt_assert(task, "Invalid parameters");
-  return ((simdata_task_t) task->simdata)->source;
+  return (static_cast<simdata_task_t> (task->simdata)->source);
 }
 
 /** \ingroup m_task_management
@@ -326,7 +326,7 @@ void MSG_task_set_bound(msg_task_t task, double bound)
   xbt_assert(task, "Invalid parameter");
   xbt_assert(task->simdata, "Invalid parameter");
 
-  if (bound == 0)
+  if (bound < 1e-12) /* close enough to 0 without any floating precision surprise */
     XBT_INFO("bound == 0 means no capping (i.e., unlimited).");
 
   task->simdata->bound = bound;
@@ -390,24 +390,19 @@ void MSG_task_set_affinity(msg_task_t task, msg_host_t host, unsigned long mask)
     return;
   }
 
-  {
-    simgrid::simix::Exec *compute = task->simdata->compute;
-    msg_host_t host_now = compute->host;  // simix_private.h is necessary
-    if (host_now != host) {
-      /* task is not yet executed on this host */
-      XBT_INFO("set affinity(0x%04lx@%s) for %s (not active now)", mask, MSG_host_get_name(host),
-               MSG_task_get_name(task));
-      return;
-    }
-
-    /* task is being executed on this host. so change the affinity now */
-    {
-      /* check it works. remove me if it works. */
-      xbt_assert((unsigned long)(uintptr_t) xbt_dict_get_or_null_ext(task->simdata->affinity_mask_db,
-                 (char *) host, sizeof(msg_host_t)) == mask);
-    }
-
-    XBT_INFO("set affinity(0x%04lx@%s) for %s", mask, MSG_host_get_name(host), MSG_task_get_name(task));
-    simcall_execution_set_affinity(task->simdata->compute, host, mask);
+  simgrid::simix::Exec *compute = task->simdata->compute;
+  msg_host_t host_now = compute->host;  // simix_private.h is necessary
+  if (host_now != host) {
+    /* task is not yet executed on this host */
+    XBT_INFO("set affinity(0x%04lx@%s) for %s (not active now)", mask, MSG_host_get_name(host),
+             MSG_task_get_name(task));
+    return;
   }
+
+  /* task is being executed on this host. so change the affinity now */
+  /* check it works. remove me if it works. */
+  xbt_assert(static_cast<unsigned long>((uintptr_t) xbt_dict_get_or_null_ext(task->simdata->affinity_mask_db,
+             (char*)(host), sizeof(msg_host_t))) == mask);
+  XBT_INFO("set affinity(0x%04lx@%s) for %s", mask, MSG_host_get_name(host), MSG_task_get_name(task));
+  simcall_execution_set_affinity(task->simdata->compute, host, mask);
 }
index c341322..0589041 100644 (file)
@@ -669,7 +669,7 @@ static int migration_tx_fun(int argc, char *argv[])
   if (ramsize == 0)
     XBT_WARN("migrate a VM, but ramsize is zero");
 
-  if (max_downtime == 0) {
+  if (max_downtime <= 0) {
     XBT_WARN("use the default max_downtime value 30ms");
     max_downtime = 0.03;
   }
index 466ae73..63b3579 100644 (file)
@@ -425,6 +425,10 @@ void sg_config_init(int *argc, char **argv)
     simgrid::config::bindFlag(sg_maxmin_precision, "maxmin/precision",
       "Numerical precision used when computing resource sharing (in ops/sec or bytes/sec)");
 
+    sg_concurrency_limit = 100;
+    simgrid::config::bindFlag(sg_concurrency_limit, "maxmin/concurrency_limit",
+      "Maximum number of concurrent variables in the maxmim system. Also limits the number of processes on each host, at higher level");
+
     /* The parameters of network models */
 
     // real default for "network/sender-gap" is set in network_smpi.cpp:
index 05da403..b3b9103 100644 (file)
@@ -24,6 +24,7 @@ typedef struct s_dyn_light {
 
 double sg_maxmin_precision = 0.00001;
 double sg_surf_precision   = 0.00001;
+int    sg_concurrency_limit= 100;
 
 static void *lmm_variable_mallocator_new_f(void);
 static void lmm_variable_mallocator_free_f(void *var);
@@ -195,8 +196,7 @@ lmm_constraint_t lmm_constraint_new(lmm_system_t sys, void *id, double bound_val
   cnst->bound = bound_value;
   cnst->concurrency_maximum=0;
   cnst->concurrency_current=0;
-  //TODO MARTIN Maybe a configuration item for the default cap concurrency? 
-  cnst->concurrency_limit=100;
+  cnst->concurrency_limit=sg_concurrency_limit;
   cnst->usage = 0;
   cnst->sharing_policy = 1; /* FIXME: don't hardcode the value */
   insert_constraint(sys, cnst);
index 8796ae5..1a90883 100644 (file)
@@ -175,6 +175,7 @@ void sg_platf_new_host(sg_platf_host_cbarg_t host)
 /** @brief Add a "router" to the network element list */
 void sg_platf_new_router(sg_platf_router_cbarg_t router)
 {
+  using simgrid::routing::AsCluster;
   simgrid::routing::AsImpl* current_routing = routing_get_current();
 
   if (current_routing->hierarchy_ == simgrid::routing::AsImpl::RoutingMode::unset)
@@ -205,6 +206,10 @@ void sg_platf_new_router(sg_platf_router_cbarg_t router)
     xbt_lib_set(as_router_lib, router->id, COORD_ASR_LEVEL, (void *) ctn);
   }
 
+  auto cluster = dynamic_cast<AsCluster*>(current_routing);
+  if(cluster != nullptr)
+    cluster->router_ = static_cast<simgrid::routing::NetCard*>(xbt_lib_get_or_null(as_router_lib, router->id, ROUTING_ASR_LEVEL));
+
   if (TRACE_is_enabled() && TRACE_needs_platform())
     sg_instr_new_router(router);
 }
@@ -704,7 +709,6 @@ void sg_platf_new_peer(sg_platf_peer_cbarg_t peer)
   router.id = router_id;
   router.coord = peer->coord;
   sg_platf_new_router(&router);
-  static_cast<AsCluster*>(current_routing)->router_ = static_cast<NetCard*>(xbt_lib_get_or_null(as_router_lib, router.id, ROUTING_ASR_LEVEL));
 
   XBT_DEBUG("</AS>");
   sg_platf_new_AS_seal();
index 5683d9e..da719bf 100644 (file)
@@ -60,15 +60,21 @@ int main(int argc, char **argv)
         XBT_DEBUG("\t Running that model");
         running = 1;
       }
-      while ((action = surf_model_extract_failed_action_set((surf_model_t)model))) {
+
+      action = surf_model_extract_failed_action_set(static_cast<surf_model_t>(model));
+      while (action != nullptr) {
         XBT_INFO("   * Done Action");
         XBT_DEBUG("\t * Failed Action: %p", action);
         action->unref();
+        action = surf_model_extract_failed_action_set(static_cast<surf_model_t>(model));
       }
-      while ((action = surf_model_extract_done_action_set((surf_model_t)model))) {
+
+      action = surf_model_extract_done_action_set(static_cast<surf_model_t>(model));
+      while (action != nullptr){
         XBT_INFO("   * Done Action");
         XBT_DEBUG("\t * Done Action: %p", action);
         action->unref();
+        action = surf_model_extract_done_action_set(static_cast<surf_model_t>(model));
       }
     }
   } while (running && surf_solve(-1.0) >= 0.0);