X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6b76ba4acd263f00d310287d7f891abfcda1c2f9..4801057254232c8283c0d392783eea07ecdd874f:/src/simgrid/sg_config.c diff --git a/src/simgrid/sg_config.c b/src/simgrid/sg_config.c index 3fc88bcb1b..f1fae08e3a 100644 --- a/src/simgrid/sg_config.c +++ b/src/simgrid/sg_config.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2009-2010, 2012-2014. The SimGrid Team. +/* Copyright (c) 2009-2010, 2012-2015. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -18,10 +18,13 @@ #include "instr/instr_interface.h" #include "simgrid/simix.h" #include "simgrid/sg_config.h" +#ifdef HAVE_SMPI #include "smpi/smpi_interface.h" +#endif #include "mc/mc.h" #include "mc/mc_record.h" -#include "instr/instr.h" +#include "simgrid/instr.h" +#include "mc/mc_replay.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_config, surf, "About the configuration of simgrid"); @@ -70,10 +73,8 @@ static void sg_config_cmd_line(int *argc, char **argv) "to the command line.\n" "\n" "You can also use --help-models to see the details of all models known by this simulator.\n" -#ifdef HAVE_TRACING "\n" "You can also use --help-tracing to see the details of all tracing options known by this simulator.\n" -#endif "\n" "You can also use --help-logs and --help-log-categories to see the details of logging output.\n" "\n" @@ -84,7 +85,7 @@ static void sg_config_cmd_line(int *argc, char **argv) } else if (!strcmp(argv[i], "--help-models")) { int k; - model_help("workstation", surf_workstation_model_description); + model_help("host", surf_host_model_description); printf("\n"); model_help("CPU", surf_cpu_model_description); printf("\n"); @@ -96,11 +97,9 @@ static void sg_config_cmd_line(int *argc, char **argv) surf_optimization_mode_description[k].description); printf("Both network and CPU models have 'Lazy' as default optimization level\n\n"); shall_exit = 1; -#ifdef HAVE_TRACING } else if (!strcmp(argv[i], "--help-tracing")) { TRACE_help (1); shall_exit = 1; -#endif } else { argv[j++] = argv[i]; } @@ -134,8 +133,8 @@ static void _sg_cfg_cb__plugin(const char *name, int pos) surf_plugin_description[plugin_id].model_init_preparse(); } -/* callback of the workstation/model variable */ -static void _sg_cfg_cb__workstation_model(const char *name, int pos) +/* callback of the host/model variable */ +static void _sg_cfg_cb__host_model(const char *name, int pos) { char *val; @@ -145,16 +144,16 @@ static void _sg_cfg_cb__workstation_model(const char *name, int pos) val = xbt_cfg_get_string(_sg_cfg_set, name); if (!strcmp(val, "help")) { - model_help("workstation", surf_workstation_model_description); + model_help("host", surf_host_model_description); sg_cfg_exit_early(); } /* Make sure that the model exists */ - find_model_description(surf_workstation_model_description, val); + find_model_description(surf_host_model_description, val); } -/* callback of the vm_workstation/model variable */ -static void _sg_cfg_cb__vm_workstation_model(const char *name, int pos) +/* callback of the vm/model variable */ +static void _sg_cfg_cb__vm_model(const char *name, int pos) { char *val; @@ -164,12 +163,12 @@ static void _sg_cfg_cb__vm_workstation_model(const char *name, int pos) val = xbt_cfg_get_string(_sg_cfg_set, name); if (!strcmp(val, "help")) { - model_help("vm_workstation", surf_vm_workstation_model_description); + model_help("vm", surf_vm_model_description); sg_cfg_exit_early(); } /* Make sure that the model exists */ - find_model_description(surf_vm_workstation_model_description, val); + find_model_description(surf_vm_model_description, val); } /* callback of the cpu/model variable */ @@ -229,7 +228,7 @@ static void _sg_cfg_cb__storage_mode(const char *name, int pos) find_model_description(surf_storage_model_description, val); } -/* callback of the workstation_model variable */ +/* callback of the network_model variable */ static void _sg_cfg_cb__network_model(const char *name, int pos) { char *val; @@ -303,7 +302,7 @@ static void _sg_cfg_cb__coll(const char *category, } /* New Module missing */ - find_coll_description(table, val); + find_coll_description(table, val, category); } static void _sg_cfg_cb__coll_gather(const char *name, int pos){ _sg_cfg_cb__coll("gather", mpi_coll_gather_description, name, pos); @@ -380,17 +379,6 @@ static void _sg_cfg_cb_model_check_replay(const char *name, int pos) MC_record_path = xbt_cfg_get_string(_sg_cfg_set, name); } -static void _sg_cfg_cb_model_check(const char *name, int pos) -{ -#ifdef HAVE_MC - _sg_do_model_check = xbt_cfg_get_boolean(_sg_cfg_set, name); -#else - if (xbt_cfg_get_boolean(_sg_cfg_set, name)) { - xbt_die("You tried to activate the model-checking from the command line, but it was not compiled in. Change your settings in cmake, recompile and try again"); - } -#endif -} - static void _sg_cfg_cb_model_check_record(const char *name, int pos) { #ifdef HAVE_MC @@ -464,14 +452,16 @@ static void _sg_cfg_cb_contexts_parallel_mode(const char *name, int pos) static void _sg_cfg_cb__surf_network_coordinates(const char *name, int pos) { + static int already_set = 0; int val = xbt_cfg_get_boolean(_sg_cfg_set, name); if (val) { - if (!COORD_HOST_LEVEL) { + if (!already_set) { COORD_HOST_LEVEL = xbt_lib_add_level(host_lib,xbt_dynar_free_voidp); COORD_ASR_LEVEL = xbt_lib_add_level(as_router_lib,xbt_dynar_free_voidp); } + already_set = 1; } else - if (COORD_HOST_LEVEL) + if (already_set) xbt_die("Setting of whether to use coordinate cannot be disabled once set."); } @@ -481,18 +471,6 @@ static void _sg_cfg_cb__surf_network_crosstraffic(const char *name, sg_network_crosstraffic = xbt_cfg_get_boolean(_sg_cfg_set, name); } -#ifdef HAVE_GTNETS -static void _sg_cfg_cb__gtnets_jitter(const char *name, int pos) -{ - sg_gtnets_jitter = xbt_cfg_get_double(_sg_cfg_set, name); -} - -static void _sg_cfg_cb__gtnets_jitter_seed(const char *name, int pos) -{ - sg_gtnets_jitter_seed = xbt_cfg_get_int(_sg_cfg_set, name); -} -#endif - /* build description line with possible values */ static void describe_model(char *result, const s_surf_model_description_t model_description[], @@ -556,17 +534,17 @@ void sg_config_init(int *argc, char **argv) xbt_cfgelm_string, 1, 1, &_sg_cfg_cb__optimization_mode, NULL); xbt_cfg_setdefault_string(_sg_cfg_set, "network/optim", "Lazy"); - describe_model(description, surf_workstation_model_description, - "model", "The model to use for the workstation"); - xbt_cfg_register(&_sg_cfg_set, "workstation/model", description, - xbt_cfgelm_string, 1, 1, &_sg_cfg_cb__workstation_model, NULL); - xbt_cfg_setdefault_string(_sg_cfg_set, "workstation/model", "default"); + describe_model(description, surf_host_model_description, + "model", "The model to use for the host"); + xbt_cfg_register(&_sg_cfg_set, "host/model", description, + xbt_cfgelm_string, 1, 1, &_sg_cfg_cb__host_model, NULL); + xbt_cfg_setdefault_string(_sg_cfg_set, "host/model", "default"); - describe_model(description, surf_vm_workstation_model_description, - "model", "The model to use for the vm workstation"); - xbt_cfg_register(&_sg_cfg_set, "vm_workstation/model", description, - xbt_cfgelm_string, 1, 1, &_sg_cfg_cb__vm_workstation_model, NULL); - xbt_cfg_setdefault_string(_sg_cfg_set, "vm_workstation/model", "default"); + describe_model(description, surf_vm_model_description, + "model", "The model to use for the vm"); + xbt_cfg_register(&_sg_cfg_set, "vm/model", description, + xbt_cfgelm_string, 1, 1, &_sg_cfg_cb__vm_model, NULL); + xbt_cfg_setdefault_string(_sg_cfg_set, "vm/model", "default"); xbt_cfg_register(&_sg_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)", @@ -628,12 +606,6 @@ void sg_config_init(int *argc, char **argv) xbt_cfgelm_string, 0, 1, _sg_cfg_cb_model_check_replay, NULL); #ifdef HAVE_MC - /* do model-checking */ - xbt_cfg_register(&_sg_cfg_set, "model-check", - "Verify the system through model-checking instead of simulating it (EXPERIMENTAL)", - xbt_cfgelm_boolean, 1, 1, _sg_cfg_cb_model_check, NULL); - xbt_cfg_setdefault_boolean(_sg_cfg_set, "model-check", "no"); - /* do model-checking-record */ xbt_cfg_register(&_sg_cfg_set, "model-check/record", "Record the model-checking paths", @@ -653,11 +625,10 @@ void sg_config_init(int *argc, char **argv) xbt_cfgelm_boolean, 1, 1, _mc_cfg_cb_sparse_checkpoint, NULL); xbt_cfg_setdefault_boolean(_sg_cfg_set, "model-check/sparse-checkpoint", "no"); - /* do stateful model-checking */ - xbt_cfg_register(&_sg_cfg_set, "model-check/soft-dirty", - "Use sparse per-page snapshots.", - xbt_cfgelm_boolean, 1, 1, _mc_cfg_cb_soft_dirty, NULL); - xbt_cfg_setdefault_boolean(_sg_cfg_set, "model-check/soft-dirty", "no"); + xbt_cfg_register(&_sg_cfg_set, "model-check/ksm", + "Kernel same-page merging", + xbt_cfgelm_boolean, 1, 1, _mc_cfg_cb_ksm, NULL); + xbt_cfg_setdefault_boolean(_sg_cfg_set, "model-check/ksm", "no"); /* do liveness model-checking */ xbt_cfg_register(&_sg_cfg_set, "model-check/property", @@ -695,6 +666,13 @@ void sg_config_init(int *argc, char **argv) xbt_cfgelm_boolean, 1, 1, _mc_cfg_cb_hash, NULL); xbt_cfg_setdefault_boolean(_sg_cfg_set, "model-check/hash", "no"); + /* Set max depth exploration */ + /* Currently, this option cannot be used. */ + xbt_cfg_register(&_sg_cfg_set, "model-check/snapshot_fds", + "Whether file descriptors must be snapshoted", + xbt_cfgelm_boolean, 1, 1, _mc_cfg_cb_snapshot_fds, NULL); + xbt_cfg_setdefault_boolean(_sg_cfg_set, "model-check/snapshot_fds", "no"); + /* Set max depth exploration */ xbt_cfg_register(&_sg_cfg_set, "model-check/max_depth", "Specify the max depth of exploration (default : 1000)", @@ -712,6 +690,12 @@ void sg_config_init(int *argc, char **argv) "Specify the name of dot file corresponding to graph state", xbt_cfgelm_string, 1, 1, _mc_cfg_cb_dot_output, NULL); xbt_cfg_setdefault_string(_sg_cfg_set, "model-check/dot_output", ""); + + /* Enable/disable non progressive cycles detection with model-checking */ + xbt_cfg_register(&_sg_cfg_set, "model-check/termination", + "Enable/Disable non progressive cycle detection", + xbt_cfgelm_boolean, 1, 1, _mc_cfg_cb_termination, NULL); + xbt_cfg_setdefault_boolean(_sg_cfg_set, "model-check/termination", "no"); #endif /* do verbose-exit */ @@ -793,17 +777,6 @@ void sg_config_init(int *argc, char **argv) xbt_cfgelm_boolean, 1, 1, _sg_cfg_cb__surf_network_crosstraffic, NULL); xbt_cfg_setdefault_boolean(_sg_cfg_set, "network/crosstraffic", "no"); -#ifdef HAVE_GTNETS - xbt_cfg_register(&_sg_cfg_set, "gtnets/jitter", - "Double value to oscillate the link latency, uniformly in random interval [-latency*gtnets_jitter,latency*gtnets_jitter)", - xbt_cfgelm_double, 1, 1, _sg_cfg_cb__gtnets_jitter, NULL); - xbt_cfg_setdefault_double(_sg_cfg_set, "gtnets/jitter", 0.0); - - xbt_cfg_register(&_sg_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, 0, 1, _sg_cfg_cb__gtnets_jitter_seed, NULL); - xbt_cfg_setdefault_int(_sg_cfg_set, "gtnets/jitter_seed", 10); -#endif #ifdef HAVE_NS3 xbt_cfg_register(&_sg_cfg_set, "ns3/TcpModel", "The ns3 tcp model can be : NewReno or Reno or Tahoe", @@ -953,6 +926,11 @@ void sg_config_init(int *argc, char **argv) xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__coll_reduce, NULL); #endif // HAVE_SMPI + xbt_cfg_register(&_sg_cfg_set, "exception/cutpath", + "\"yes\" or \"no\". \"yes\" will cut all path information from call traces, used e.g. in exceptions.", + xbt_cfgelm_boolean, 1, 1, NULL, NULL); + xbt_cfg_setdefault_boolean(_sg_cfg_set, "exception/cutpath", "no"); + xbt_cfg_register(&_sg_cfg_set, "clean_atexit", "\"yes\" or \"no\". \"yes\" enables all the cleanups of SimGrid (XBT,SIMIX,MSG) to be registered with atexit. \"no\" may be useful if your code segfaults when calling the exit function.", xbt_cfgelm_boolean, 1, 1, _sg_cfg_cb_clean_atexit, NULL); @@ -962,7 +940,7 @@ void sg_config_init(int *argc, char **argv) /* retrieves the current directory of the current process */ const char *initial_path = __surf_get_initial_path(); xbt_assert((initial_path), - "__surf_get_initial_path() failed! Can't resolves current Windows directory"); + "__surf_get_initial_path() failed! Can't resolve current Windows directory"); surf_path = xbt_dynar_new(sizeof(char *), NULL); xbt_cfg_setdefault_string(_sg_cfg_set, "path", initial_path); @@ -989,52 +967,47 @@ void sg_config_finalize(void) _sg_cfg_init_status = 0; } -/* Pick the right models for CPU, net and workstation, and call their model_init_preparse */ +/* Pick the right models for CPU, net and host, and call their model_init_preparse */ void surf_config_models_setup() { - const char *workstation_model_name; - const char *vm_workstation_model_name; - int workstation_id = -1; - int vm_workstation_id = -1; + const char *host_model_name; + const char *vm_model_name; + int host_id = -1; + int vm_id = -1; char *network_model_name = NULL; char *cpu_model_name = NULL; int storage_id = -1; char *storage_model_name = NULL; - workstation_model_name = - xbt_cfg_get_string(_sg_cfg_set, "workstation/model"); - vm_workstation_model_name = - xbt_cfg_get_string(_sg_cfg_set, "vm_workstation/model"); + host_model_name = xbt_cfg_get_string(_sg_cfg_set, "host/model"); + vm_model_name = xbt_cfg_get_string(_sg_cfg_set, "vm/model"); network_model_name = xbt_cfg_get_string(_sg_cfg_set, "network/model"); cpu_model_name = xbt_cfg_get_string(_sg_cfg_set, "cpu/model"); storage_model_name = xbt_cfg_get_string(_sg_cfg_set, "storage/model"); /* Check whether we use a net/cpu model differing from the default ones, in which case - * we should switch to the "compound" workstation model to correctly dispatch stuff to + * we should switch to the "compound" host model to correctly dispatch stuff to * the right net/cpu models. */ if ((!xbt_cfg_is_default_value(_sg_cfg_set, "network/model") || !xbt_cfg_is_default_value(_sg_cfg_set, "cpu/model")) && - xbt_cfg_is_default_value(_sg_cfg_set, "workstation/model")) { - XBT_INFO("Switching workstation model to compound since you changed the network and/or cpu model(s)"); - workstation_model_name = "compound"; - xbt_cfg_set_string(_sg_cfg_set, "workstation/model", workstation_model_name); + xbt_cfg_is_default_value(_sg_cfg_set, "host/model")) { + host_model_name = "compound"; + xbt_cfg_set_string(_sg_cfg_set, "host/model", host_model_name); } - XBT_DEBUG("Workstation model: %s", workstation_model_name); - workstation_id = - find_model_description(surf_workstation_model_description, - workstation_model_name); - if (!strcmp(workstation_model_name, "compound")) { + XBT_DEBUG("host model: %s", host_model_name); + host_id = find_model_description(surf_host_model_description, host_model_name); + if (!strcmp(host_model_name, "compound")) { int network_id = -1; int cpu_id = -1; xbt_assert(cpu_model_name, - "Set a cpu model to use with the 'compound' workstation model"); + "Set a cpu model to use with the 'compound' host model"); xbt_assert(network_model_name, - "Set a network model to use with the 'compound' workstation model"); + "Set a network model to use with the 'compound' host model"); if(surf_cpu_model_init_preparse){ surf_cpu_model_init_preparse(); @@ -1050,13 +1023,12 @@ void surf_config_models_setup() surf_network_model_description[network_id].model_init_preparse(); } - XBT_DEBUG("Call workstation_model_init"); - surf_workstation_model_description[workstation_id].model_init_preparse(); + XBT_DEBUG("Call host_model_init"); + surf_host_model_description[host_id].model_init_preparse(); - XBT_DEBUG("Call vm_workstation_model_init"); - vm_workstation_id = find_model_description(surf_vm_workstation_model_description, - vm_workstation_model_name); - surf_vm_workstation_model_description[vm_workstation_id].model_init_preparse(); + XBT_DEBUG("Call vm_model_init"); + vm_id = find_model_description(surf_vm_model_description, vm_model_name); + surf_vm_model_description[vm_id].model_init_preparse(); XBT_DEBUG("Call storage_model_init"); storage_id = find_model_description(surf_storage_model_description, storage_model_name);