Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
cosmetics from patch review
[simgrid.git] / src / simgrid / sg_config.cpp
index f90dfa9..b6fcd8e 100644 (file)
@@ -8,6 +8,7 @@
 
 #include "xbt/misc.h"
 #include "xbt/config.h"
+#include "xbt/config.hpp"
 #include "xbt/log.h"
 #include "xbt/mallocator.h"
 #include "xbt/str.h"
@@ -216,42 +217,6 @@ static void _sg_cfg_cb__network_model(const char *name)
   find_model_description(surf_network_model_description, val);
 }
 
-/* callbacks of the network models values */
-static void _sg_cfg_cb__tcp_gamma(const char *name)
-{
-  sg_tcp_gamma = xbt_cfg_get_double(name);
-}
-
-static void _sg_cfg_cb__maxmin_precision(const char* name)
-{
-  sg_maxmin_precision = xbt_cfg_get_double(name);
-}
-
-static void _sg_cfg_cb__surf_precision(const char* name)
-{
-  sg_surf_precision = xbt_cfg_get_double(name);
-}
-
-static void _sg_cfg_cb__sender_gap(const char* name)
-{
-  sg_sender_gap = xbt_cfg_get_double(name);
-}
-
-static void _sg_cfg_cb__latency_factor(const char *name)
-{
-  sg_latency_factor = xbt_cfg_get_double(name);
-}
-
-static void _sg_cfg_cb__bandwidth_factor(const char *name)
-{
-  sg_bandwidth_factor = xbt_cfg_get_double(name);
-}
-
-static void _sg_cfg_cb__weight_S(const char *name)
-{
-  sg_weight_S_parameter = xbt_cfg_get_double(name);
-}
-
 #if HAVE_SMPI
 /* callback of the mpi collectives: simply check that this is a valid name. It will be picked up in smpi_global.cpp */
 static void _check_coll(const char *category,
@@ -307,29 +272,8 @@ static void _check_coll_barrier(const char *name){
   _check_coll("barrier", mpi_coll_barrier_description, name);
 }
 
-static void _sg_cfg_cb__wtime_sleep(const char *name){
-  smpi_wtime_sleep = xbt_cfg_get_double(name);
-}
-
-static void _sg_cfg_cb__iprobe_sleep(const char *name){
-  smpi_iprobe_sleep = xbt_cfg_get_double(name);
-}
-
-static void _sg_cfg_cb__test_sleep(const char *name){
-  smpi_test_sleep = xbt_cfg_get_double(name);
-}
 #endif
 
-/* callback of the inclusion path */
-static void _sg_cfg_cb__surf_path(const char *name)
-{
-  char *path = xbt_cfg_get_string(name);
-  if (path[0]) {// ignore ""
-    path = xbt_strdup(path);
-    xbt_dynar_push(surf_path, &path);
-  }
-}
-
 /* callback to decide if we want to use the model-checking */
 #include "src/xbt_modinter.h"
 
@@ -419,76 +363,93 @@ static void _sg_cfg_cb__surf_network_crosstraffic(const char *name)
 }
 
 /* build description line with possible values */
-static void describe_model(char *result,
+static void describe_model(char *result,int resultsize,
                            const s_surf_model_description_t model_description[],
                            const char *name,
                            const char *description)
 {
-  char *p = result +
-    sprintf(result, "%s. Possible values: %s", description,
+  result[0] = '\0';
+  char *p = result;
+  p += snprintf(result,resultsize-1, "%s. Possible values: %s", description,
             model_description[0].name ? model_description[0].name : "n/a");
   for (int i = 1; model_description[i].name; i++)
-    p += sprintf(p, ", %s", model_description[i].name);
-  sprintf(p, ".\n       (use 'help' as a value to see the long description of each %s)", name);
+    p += snprintf(p,resultsize-(p-result)-1, ", %s", model_description[i].name);
+  p += snprintf(p,resultsize-(p-result)-1, ".\n       (use 'help' as a value to see the long description of each %s)", name);
+
+  xbt_assert(p<result+resultsize-1,"Buffer too small to display the model description of %s",name);
 }
 
 /* create the config set, register what should be and parse the command line*/
 void sg_config_init(int *argc, char **argv)
 {
+  int descsize = 1024;
   char description[1024];
 
   /* Create the configuration support */
   if (_sg_cfg_init_status == 0) { /* Only create stuff if not already inited */
 
     /* Plugins configuration */
-    describe_model(description, surf_plugin_description, "plugin", "The plugins");
+    describe_model(description,descsize, surf_plugin_description, "plugin", "The plugins");
     xbt_cfg_register_string("plugin", nullptr, &_sg_cfg_cb__plugin, description);
 
-    describe_model(description, surf_cpu_model_description, "model", "The model to use for the CPU");
+    describe_model(description,descsize, surf_cpu_model_description, "model", "The model to use for the CPU");
     xbt_cfg_register_string("cpu/model", "Cas01", &_sg_cfg_cb__cpu_model, description);
 
-    describe_model(description, surf_optimization_mode_description, "optimization mode", "The optimization modes to use for the CPU");
+    describe_model(description,descsize, surf_optimization_mode_description, "optimization mode", "The optimization modes to use for the CPU");
     xbt_cfg_register_string("cpu/optim", "Lazy", &_sg_cfg_cb__optimization_mode, description);
 
-    describe_model(description, surf_storage_model_description, "model", "The model to use for the storage");
+    describe_model(description,descsize, surf_storage_model_description, "model", "The model to use for the storage");
     xbt_cfg_register_string("storage/model", "default", &_sg_cfg_cb__storage_mode, description);
 
-    describe_model(description, surf_network_model_description, "model", "The model to use for the network");
+    describe_model(description,descsize, surf_network_model_description, "model", "The model to use for the network");
     xbt_cfg_register_string("network/model", "LV08", &_sg_cfg_cb__network_model, description);
 
-    describe_model(description, surf_optimization_mode_description, "optimization mode", "The optimization modes to use for the network");
+    describe_model(description,descsize, surf_optimization_mode_description, "optimization mode", "The optimization modes to use for the network");
     xbt_cfg_register_string("network/optim", "Lazy", &_sg_cfg_cb__optimization_mode, description);
 
-    describe_model(description, surf_host_model_description, "model", "The model to use for the host");
+    describe_model(description,descsize, surf_host_model_description, "model", "The model to use for the host");
     xbt_cfg_register_string("host/model", "default", &_sg_cfg_cb__host_model, description);
 
-    describe_model(description, surf_vm_model_description, "model", "The model to use for the vm");
+    describe_model(description,descsize, surf_vm_model_description, "model", "The model to use for the vm");
     xbt_cfg_register_string("vm/model", "default", &_sg_cfg_cb__vm_model, description);
 
-    xbt_cfg_register_double("network/TCP-gamma",  4194304.0, _sg_cfg_cb__tcp_gamma,
-        "Size of the biggest TCP window (cat /proc/sys/net/ipv4/tcp_[rw]mem for recv/send window; Use the last given value, which is the max window size)");
-    xbt_cfg_register_alias("network/TCP-gamma","network/TCP_gamma");
-    xbt_cfg_register_double("surf/precision", 0.00001, _sg_cfg_cb__surf_precision,
-        "Numerical precision used when updating simulation times (in seconds)");
-    xbt_cfg_register_double("maxmin/precision", 0.00001, _sg_cfg_cb__maxmin_precision,
-        "Numerical precision used when computing resource sharing (in ops/sec or bytes/sec)");
+    simgrid::config::bindFlag(sg_tcp_gamma = 4194304.0,
+      { "network/TCP-gamma", "network/TCP_gamma" },
+      "Size of the biggest TCP window (cat /proc/sys/net/ipv4/tcp_[rw]mem for recv/send window; Use the last given value, which is the max window size)");
+    simgrid::config::bindFlag(sg_surf_precision = 0.00001,
+      "surf/precision",
+      "Numerical precision used when updating simulation times (in seconds)");
+    simgrid::config::bindFlag(sg_maxmin_precision = 0.00001,
+      "maxmin/precision",
+      "Numerical precision used when computing resource sharing (in ops/sec or bytes/sec)");
 
     /* The parameters of network models */
 
-    xbt_cfg_register_double("network/sender-gap", NAN, _sg_cfg_cb__sender_gap,
-        "Minimum gap between two overlapping sends"); /* real default for "network/sender-gap" is set in network_smpi.cpp */
-    xbt_cfg_register_alias("network/sender-gap","network/sender_gap");
-    xbt_cfg_register_double("network/latency-factor", 1.0, _sg_cfg_cb__latency_factor,
-        "Correction factor to apply to the provided latency (default value set by network model)");
-    xbt_cfg_register_alias("network/latency-factor","network/latency_factor");
-    xbt_cfg_register_double("network/bandwidth-factor", 1.0, _sg_cfg_cb__bandwidth_factor, "Correction factor to apply to the provided bandwidth (default value set by network model)");
-    xbt_cfg_register_alias("network/bandwidth-factor","network/bandwidth_factor");
-    xbt_cfg_register_double("network/weight-S", NAN, _sg_cfg_cb__weight_S, /* real default for "network/weight-S" is set in network_*.cpp */
-        "Correction factor to apply to the weight of competing streams (default value set by network model)");
-    xbt_cfg_register_alias("network/weight-S","network/weight_S");
+    // real default for "network/sender-gap" is set in network_smpi.cpp:
+    simgrid::config::bindFlag(sg_sender_gap = NAN,
+      { "network/sender-gap", "network/sender_gap" },
+      "Minimum gap between two overlapping sends");
+    simgrid::config::bindFlag(sg_latency_factor = 1.0,
+      { "network/latency-factor", "network/latency_factor" },
+      "Correction factor to apply to the provided latency (default value set by network model)");
+    simgrid::config::bindFlag(sg_bandwidth_factor = 1.0,
+      { "network/bandwidth-factor", "network/bandwidth_factor" },
+      "Correction factor to apply to the provided bandwidth (default value set by network model)");
+    // real default for "network/weight-S" is set in network_*.cpp:
+    simgrid::config::bindFlag(sg_weight_S_parameter = NAN,
+      { "network/weight-S", "network/weight_S" },
+      "Correction factor to apply to the weight of competing streams (default value set by network model)");
 
     /* Inclusion path */
-    xbt_cfg_register_string("path", "", _sg_cfg_cb__surf_path, "Lookup path for inclusions in platform and deployment XML files");
+    simgrid::config::declareFlag<std::string>("path",
+      "Lookup path for inclusions in platform and deployment XML files",
+      "",
+      [](std::string const& path) {
+        if (path[0] != '\0') {
+          char* copy = xbt_strdup(path.c_str());
+          xbt_dynar_push(surf_path, &copy);
+        }
+      });
 
     xbt_cfg_register_boolean("cpu/maxmin-selective-update", "no", NULL,
         "Update the constraint set propagating recursively to others constraints (off by default when optim is set to lazy)");
@@ -580,10 +541,6 @@ void sg_config_init(int *argc, char **argv)
     xbt_cfg_register_boolean("network/crosstraffic", "yes", _sg_cfg_cb__surf_network_crosstraffic,
         "Activate the interferences between uploads and downloads for fluid max-min models (LV08, CM02)");
 
-#if HAVE_NS3
-    xbt_cfg_register_string("ns3/TcpModel", "default", NULL, "The ns3 tcp model can be : NewReno or Reno or Tahoe");
-#endif
-
     //For smpi/bw_factor and smpi/lat_factor
     // SMPI model can be used without enable_smpi, so keep this out of the ifdef.
     xbt_cfg_register_string("smpi/bw-factor",
@@ -620,6 +577,8 @@ void sg_config_init(int *argc, char **argv)
     xbt_cfg_register_alias("smpi/async-small-thresh","smpi/async_small_thresh");
     xbt_cfg_register_alias("smpi/async-small-thresh","smpi/async_small_thres");
 
+    xbt_cfg_register_boolean("smpi/trace-call-location", "no", NULL, "Should filename and linenumber of MPI calls be traced?");
+
     xbt_cfg_register_int("smpi/send-is-detached-thresh", 65536, NULL,
         "Threshold of message size where MPI_Send stops behaving like MPI_Isend and becomes MPI_Ssend");
     xbt_cfg_register_alias("smpi/send-is-detached-thresh","smpi/send_is_detached_thresh");
@@ -628,12 +587,13 @@ void sg_config_init(int *argc, char **argv)
     xbt_cfg_register_boolean("smpi/privatize-global-variables", "no", NULL, "Whether we should privatize global variable at runtime.");
     xbt_cfg_register_alias("smpi/privatize-global-variables", "smpi/privatize_global_variables");
 
+#if HAVE_PAPI
+    xbt_cfg_register_string("smpi/papi-events", nullptr, NULL, "This switch enables tracking the specified counters with PAPI");
+#endif
+    xbt_cfg_register_string("smpi/comp-adjustment-file", nullptr, NULL, "A file containing speedups or slowdowns for some parts of the code.");
     xbt_cfg_register_string("smpi/os", "1:0:0:0:0", NULL,  "Small messages timings (MPI_Send minimum time for small messages)");
     xbt_cfg_register_string("smpi/ois", "1:0:0:0:0", NULL, "Small messages timings (MPI_Isend minimum time for small messages)");
     xbt_cfg_register_string("smpi/or", "1:0:0:0:0", NULL,  "Small messages timings (MPI_Recv minimum time for small messages)");
-    xbt_cfg_register_double("smpi/iprobe", 1e-4, _sg_cfg_cb__iprobe_sleep, "Minimum time to inject inside a call to MPI_Iprobe");
-    xbt_cfg_register_double("smpi/test", 1e-4, _sg_cfg_cb__test_sleep, "Minimum time to inject inside a call to MPI_Test");
-    xbt_cfg_register_double("smpi/wtime", 0.0, _sg_cfg_cb__wtime_sleep, "Minimum time to inject inside a call to MPI_Wtime");
 
     xbt_cfg_register_string("smpi/coll-selector", "default", NULL, "Which collective selector to use");
     xbt_cfg_register_alias("smpi/coll-selector","smpi/coll_selector");