+ xbt_cfg_register(&_surf_cfg_set, "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)",
+ xbt_cfgelm_double, NULL, 1, 1,
+ _surf_cfg_cb__tcp_gamma, NULL);
+ xbt_cfg_setdefault_double(_surf_cfg_set, "network/TCP_gamma", 20000.0);
+
+ xbt_cfg_register(&_surf_cfg_set, "maxmin/precision",
+ "Numerical precision used when updating simulation models (epsilon in double comparisons)",
+ xbt_cfgelm_double, NULL, 1, 1, _surf_cfg_cb__maxmin_precision, NULL);
+ xbt_cfg_setdefault_double(_surf_cfg_set, "maxmin/precision", 0.00001); // FIXME use setdefault everywhere here!
+
+ /* The parameters of network models */
+
+ double_default_value = 0.0;
+ xbt_cfg_register(&_surf_cfg_set, "network/sender_gap",
+ "Minimum gap between two overlapping sends",
+ xbt_cfgelm_double, &double_default_value, 1, 1,
+ _surf_cfg_cb__sender_gap, NULL);
+
+ double_default_value = 1.0;
+ xbt_cfg_register(&_surf_cfg_set, "network/latency_factor",
+ "Correction factor to apply to the provided latency (default value set by network model)",
+ xbt_cfgelm_double, &double_default_value, 1, 1,
+ _surf_cfg_cb__latency_factor, NULL);
+ double_default_value = 1.0;
+ xbt_cfg_register(&_surf_cfg_set, "network/bandwidth_factor",
+ "Correction factor to apply to the provided bandwidth (default value set by network model)",
+ xbt_cfgelm_double, &double_default_value, 1, 1,
+ _surf_cfg_cb__bandwidth_factor, NULL);
+ double_default_value = 0.0;
+ xbt_cfg_register(&_surf_cfg_set, "network/weight_S",
+ "Correction factor to apply to the weight of competing streams(default value set by network model)",
+ xbt_cfgelm_double, &double_default_value, 1, 1,
+ _surf_cfg_cb__weight_S, NULL);
+
+ /* Inclusion path */
+ xbt_cfg_register(&_surf_cfg_set, "path",
+ "Lookup path for inclusions in platform and deployment XML files",
+ xbt_cfgelm_string, NULL, 0, 0,
+ _surf_cfg_cb__surf_path, NULL);
+
+ default_value_int = 0;
+ xbt_cfg_register(&_surf_cfg_set, "cpu/maxmin_selective_update",
+ "Update the constraint set propagating recursively to others constraints (1 by default when optim is set to lazy)",
+ xbt_cfgelm_int, &default_value_int, 0, 1,
+ NULL, NULL);
+ default_value_int = 0;
+ xbt_cfg_register(&_surf_cfg_set, "network/maxmin_selective_update",
+ "Update the constraint set propagating recursively to others constraints (1 by default when optim is set to lazy)",
+ xbt_cfgelm_int, &default_value_int, 0, 1,
+ NULL, NULL);
+
+ /* do model-check */
+ default_value_int = 0;
+ xbt_cfg_register(&_surf_cfg_set, "model-check",
+ "Activate the model-checking of the \"simulated\" system (EXPERIMENTAL -- msg only for now)",
+ xbt_cfgelm_int, &default_value_int, 0, 1,
+ _surf_cfg_cb_model_check, NULL);
+
+ /*
+ FIXME: this function is not setting model-check to it's default value because
+ internally it calls to variable->cb_set that in this case is the function
+ _surf_cfg_cb_model_check which sets it's value to 1 (instead of the default value 0)
+ xbt_cfg_set_int(_surf_cfg_set, "model-check", default_value_int); */
+
+ /* do verbose-exit */
+ default_value_int = 1;
+ xbt_cfg_register(&_surf_cfg_set, "verbose-exit",
+ "Activate the \"do nothing\" mode in Ctrl-C",
+ xbt_cfgelm_int, &default_value_int, 0, 1,
+ _surf_cfg_cb_verbose_exit, NULL);
+
+
+ /* context factory */
+ default_value = xbt_strdup("ucontext");
+ xbt_cfg_register(&_surf_cfg_set, "contexts/factory",
+ "Context factory to use in SIMIX (ucontext, thread or raw)",
+ xbt_cfgelm_string, &default_value, 1, 1, _surf_cfg_cb_context_factory, NULL);
+
+ /* stack size of contexts in Ko */
+ default_value_int = 128;
+ xbt_cfg_register(&_surf_cfg_set, "contexts/stack_size",
+ "Stack size of contexts in Kib (ucontext or raw only)",
+ xbt_cfgelm_int, &default_value_int, 1, 1,
+ _surf_cfg_cb_context_stack_size, NULL);
+
+ /* number of parallel threads for user processes */
+ default_value_int = 1;
+ xbt_cfg_register(&_surf_cfg_set, "contexts/nthreads",
+ "Number of parallel threads used to execute user contexts",
+ xbt_cfgelm_int, &default_value_int, 1, 1,
+ _surf_cfg_cb_contexts_nthreads, NULL);
+
+ /* minimal number of user contexts to be run in parallel */
+ default_value_int = 2;
+ xbt_cfg_register(&_surf_cfg_set, "contexts/parallel_threshold",
+ "Minimal number of user contexts to be run in parallel (raw contexts only)",
+ xbt_cfgelm_int, &default_value_int, 1, 1,
+ _surf_cfg_cb_contexts_parallel_threshold, NULL);
+
+ /* synchronization mode for parallel user contexts */
+#ifdef HAVE_FUTEX_H
+ default_value = xbt_strdup("futex");
+#else //No futex on mac and posix is unimplememted yet
+ default_value = xbt_strdup("busy_wait");
+#endif
+ xbt_cfg_register(&_surf_cfg_set, "contexts/synchro",
+ "Synchronization mode to use when running contexts in parallel (either futex, posix or busy_wait)",
+ xbt_cfgelm_string, &default_value, 1, 1,
+ _surf_cfg_cb_contexts_parallel_mode, NULL);
+
+ /* number of parallel threads for Surf */
+ default_value_int = surf_get_nthreads();
+ xbt_cfg_register(&_surf_cfg_set, "surf/nthreads",
+ "Number of parallel threads used to update Surf models",
+ xbt_cfgelm_int, &default_value_int, 1, 1,
+ _surf_cfg_cb_surf_nthreads, NULL);
+
+ default_value = xbt_strdup("no");
+ xbt_cfg_register(&_surf_cfg_set, "network/coordinates",
+ "\"yes\" or \"no\", specifying whether we use a coordinate-based routing (as Vivaldi)",
+ xbt_cfgelm_string, &default_value, 1, 1,
+ _surf_cfg_cb__surf_network_coordinates, NULL);
+ xbt_cfg_setdefault_string(_surf_cfg_set, "network/coordinates", default_value);
+
+ default_value_int = 0;
+ xbt_cfg_register(&_surf_cfg_set, "network/crosstraffic",
+ "Activate the interferences between uploads and downloads for fluid max-min models (LV08, CM02)",
+ xbt_cfgelm_int, &default_value_int, 0, 1,
+ _surf_cfg_cb__surf_network_crosstraffic, NULL);
+ xbt_cfg_setdefault_int(_surf_cfg_set, "network/crosstraffic", default_value_int);
+
+#ifdef HAVE_GTNETS
+ xbt_cfg_register(&_surf_cfg_set, "gtnets/jitter",
+ "Double value to oscillate the link latency, uniformly in random interval [-latency*gtnets_jitter,latency*gtnets_jitter)",
+ xbt_cfgelm_double, NULL, 1, 1,
+ _surf_cfg_cb__gtnets_jitter, NULL);
+ xbt_cfg_setdefault_double(_surf_cfg_set, "gtnets/jitter", 0.0);
+
+ default_value_int = 10;
+ xbt_cfg_register(&_surf_cfg_set, "gtnets/jitter_seed",
+ "Use a positive seed to reproduce jitted results, value must be in [1,1e8], default is 10",
+ xbt_cfgelm_int, &default_value_int, 0, 1,
+ _surf_cfg_cb__gtnets_jitter_seed, NULL);
+#endif
+#ifdef HAVE_NS3
+ xbt_cfg_register(&_surf_cfg_set, "ns3/TcpModel",
+ "The ns3 tcp model can be : NewReno or Reno or Tahoe",
+ xbt_cfgelm_string, NULL, 1, 1,
+ NULL, NULL);
+ xbt_cfg_setdefault_string(_surf_cfg_set, "ns3/TcpModel", "default");
+#endif
+
+//SMPI
+ double default_reference_speed = 20000.0;
+ xbt_cfg_register(&_surf_cfg_set, "smpi/running_power",
+ "Power of the host running the simulation (in flop/s). Used to bench the operations.",
+ xbt_cfgelm_double, &default_reference_speed, 1, 1, NULL,