X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7631e98c4699e3d1f9fa92a21594294f119f95ac..e156fbf68d408efa3ab50b976e3de04006b5da15:/src/surf/surf_config.c diff --git a/src/surf/surf_config.c b/src/surf/surf_config.c index 7a39bc71f8..59336e3147 100644 --- a/src/surf/surf_config.c +++ b/src/surf/surf_config.c @@ -17,6 +17,53 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_config, surf, xbt_cfg_t _surf_cfg_set = NULL; +static void LOG_help(void) +{ + printf( +"Description of the logging output:\n" +"\n" +" Threshold configuration: --log=CATEGORY_NAME.thres:PRIORITY_LEVEL\n" +" CATEGORY_NAME: defined in code with function 'XBT_LOG_NEW_CATEGORY'\n" +" PRIORITY_LEVEL: the level to print (trace,debug,verbose,info,warning,error,critical)\n" +" -> trace: enter and return of some functions\n" +" -> debug: crufty output\n" +" -> verbose: verbose output for the user wanting more\n" +" -> info: output about the regular functionning\n" +" -> warning: minor issue encountered\n" +" -> error: issue encountered\n" +" -> critical: major issue encountered\n" +"\n" +" Format configuration: --log=CATEGORY_NAME.fmt:OPTIONS\n" +" OPTIONS may be:\n" +" -> %%%%: the %% char\n" +" -> %%n: platform-dependent line separator (LOG4J compatible)\n" +" -> %%e: plain old space (SimGrid extension)\n" +"\n" +" -> %%m: user-provided message\n" +"\n" +" -> %%c: Category name (LOG4J compatible)\n" +" -> %%p: Priority name (LOG4J compatible)\n" +"\n" +" -> %%h: Hostname (SimGrid extension)\n" +" -> %%P: Process name (SimGrid extension)\n" +" -> %%t: Thread \"name\" (LOG4J compatible -- actually the address of the thread in memory)\n" +" -> %%i: Process PID (SimGrid extension -- this is a 'i' as in 'i'dea)\n" +"\n" +" -> %%F: file name where the log event was raised (LOG4J compatible)\n" +" -> %%l: location where the log event was raised (LOG4J compatible, like '%%F:%%L' -- this is a l as in 'l'etter)\n" +" -> %%L: line number where the log event was raised (LOG4J compatible)\n" +" -> %%M: function name (LOG4J compatible -- called method name here of course).\n" +" Defined only when using gcc because there is no __FUNCTION__ elsewhere.\n" +"\n" +" -> %%b: full backtrace (Called %%throwable in LOG4J). Defined only under windows or when using the GNU libc because\n" +" backtrace() is not defined elsewhere, and we only have a fallback for windows boxes, not mac ones for example.\n" +" -> %%B: short backtrace (only the first line of the %%b). Called %%throwable{short} in LOG4J; defined where %%b is.\n" +"\n" +" -> %%d: date (UNIX-like epoch)\n" +" -> %%r: application age (time elapsed since the beginning of the application)\n" + ); +} + /* Parse the command line, looking for options */ static void surf_config_cmd_line(int *argc, char **argv) { @@ -32,17 +79,23 @@ static void surf_config_cmd_line(int *argc, char **argv) xbt_cfg_set_parse(_surf_cfg_set, opt); XBT_DEBUG("Did apply '%s' as config setting", opt); remove_it = 1; - } else if (!strncmp(argv[i], "--cfg-help", strlen("--cfg-help") + 1) || - !strncmp(argv[i], "--help", strlen("--help") + 1)) { + } else if (!strcmp(argv[i], "--cfg-help") || !strcmp(argv[i], "--help")) { printf ("Description of the configuration accepted by this simulator:\n"); xbt_cfg_help(_surf_cfg_set); - printf("\nYou can also use --help-models to see the details of all models known by this simulator.\n"); + printf( +"\n" +"You can also use --help-models to see the details of all models known by this simulator.\n" #ifdef HAVE_TRACING - printf("\nYou can also use --help-tracing to see the details of all tracing options known by this simulator.\n"); +"\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 to see the details of logging output.\n" +"\n" + ); exit(0); - } else if (!strncmp(argv[i], "--help-models", strlen("--help-models") + 1)) { + } else if (!strcmp(argv[i], "--help-models")) { model_help("workstation", surf_workstation_model_description); printf("\n"); model_help("CPU", surf_cpu_model_description); @@ -53,8 +106,11 @@ static void surf_config_cmd_line(int *argc, char **argv) printf(" %s: %s\n", surf_optimization_mode_description[i].name, surf_optimization_mode_description[i].description); printf("Both network and CPU models have 'Lazy' as default optimization level\n"); exit(0); + } else if (!strcmp(argv[i], "--help-logs")) { + LOG_help (); + exit(0); #ifdef HAVE_TRACING - } else if (!strncmp(argv[i], "--help-tracing", strlen("--help-tracing") + 1)) { + } else if (!strcmp(argv[i], "--help-tracing")) { TRACE_help (1); exit(0); #endif @@ -133,6 +189,25 @@ static void _surf_cfg_cb__optimization_mode(const char *name, int pos) find_model_description(surf_optimization_mode_description, val); } +/* callback of the cpu/model variable */ +static void _surf_cfg_cb__storage_mode(const char *name, int pos) +{ + char *val; + + xbt_assert(_surf_init_status < 2, + "Cannot change the model after the initialization"); + + val = xbt_cfg_get_string(_surf_cfg_set, name); + + if (!strcmp(val, "help")) { + model_help("storage", surf_storage_model_description); + exit(0); + } + + /* New Module missing */ + find_model_description(surf_storage_model_description, val); +} + /* callback of the workstation_model variable */ static void _surf_cfg_cb__network_model(const char *name, int pos) { @@ -226,17 +301,7 @@ static void _surf_cfg_cb_context_stack_size(const char *name, int pos) static void _surf_cfg_cb_contexts_nthreads(const char *name, int pos) { - unsigned int nthreads; - const char* value = xbt_cfg_get_string(_surf_cfg_set, name); - if (!strcmp(value, "auto")) { - XBT_DEBUG("Auto setting contexts/nthreads to %d", PROCESSOR_COUNT); - nthreads = PROCESSOR_COUNT; - } - else { - nthreads = atoi(value); - xbt_assert(nthreads > 0, "context/threads should be a positive number or 'auto'"); - } - SIMIX_context_set_nthreads(nthreads); + SIMIX_context_set_nthreads(xbt_cfg_get_int(_surf_cfg_set, name)); } static void _surf_cfg_cb_contexts_parallel_threshold(const char *name, int pos) @@ -341,6 +406,20 @@ void surf_config_init(int *argc, char **argv) xbt_cfg_register(&_surf_cfg_set, "cpu/optim", description, xbt_cfgelm_string, &default_value, 1, 1, &_surf_cfg_cb__optimization_mode, NULL); + sprintf(description, + "The model to use for the storage. Possible values: "); + p = description; + while (*(++p) != '\0'); + for (i = 0; surf_storage_model_description[i].name; i++) + p += sprintf(p, "%s%s", (i == 0 ? "" : ", "), + surf_storage_model_description[i].name); + sprintf(p, + ".\n (use 'help' as a value to see the long description of each model)"); + default_value = xbt_strdup("default"); + xbt_cfg_register(&_surf_cfg_set, "storage/model", description, xbt_cfgelm_string, + &default_value, 1, 1, &_surf_cfg_cb__storage_mode, + NULL); + sprintf(description, "The model to use for the network. Possible values: "); p = description; @@ -471,10 +550,10 @@ void surf_config_init(int *argc, char **argv) _surf_cfg_cb_context_stack_size, NULL); /* number of parallel threads for user processes */ - default_value = xbt_strdup("1"); + default_value_int = 1; xbt_cfg_register(&_surf_cfg_set, "contexts/nthreads", "Number of parallel threads used to execute user contexts", - xbt_cfgelm_string, &default_value, 1, 1, + xbt_cfgelm_int, &default_value_int, 1, 1, _surf_cfg_cb_contexts_nthreads, NULL); /* minimal number of user contexts to be run in parallel */ @@ -521,7 +600,7 @@ void surf_config_init(int *argc, char **argv) "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); + xbt_cfg_setdefault_double(_surf_cfg_set, "gtnets/jitter", 0.0); default_value_int = 10; xbt_cfg_register(&_surf_cfg_set, "gtnets/jitter_seed", @@ -608,11 +687,14 @@ void surf_config_models_setup() int workstation_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(_surf_cfg_set, "workstation/model"); network_model_name = xbt_cfg_get_string(_surf_cfg_set, "network/model"); cpu_model_name = xbt_cfg_get_string(_surf_cfg_set, "cpu/model"); + storage_model_name = xbt_cfg_get_string(_surf_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 @@ -656,4 +738,8 @@ void surf_config_models_setup() XBT_DEBUG("Call workstation_model_init"); surf_workstation_model_description[workstation_id].model_init_preparse(); + + XBT_DEBUG("Call storage_model_init"); + storage_id = find_model_description(surf_storage_model_description, storage_model_name); + surf_storage_model_description[storage_id].model_init_preparse(); }