From: thiery Date: Mon, 24 Jan 2011 13:37:15 +0000 (+0000) Subject: Add a flag --cfg=contexts/stacksize and rename other context flags to be X-Git-Tag: v3.6_beta2~450 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/dee60c06c65803e929391a0102697323bda033e4 Add a flag --cfg=contexts/stacksize and rename other context flags to be more uniform. --cfg=simix/context is replaced by --cfg=contexts/factory and --cfg=parallel-contexts is replaced by --cfg=contexts/parallel git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@9479 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/buildtools/Cmake/AddTests.cmake b/buildtools/Cmake/AddTests.cmake index f3a06de47c..88b4bceaf6 100644 --- a/buildtools/Cmake/AddTests.cmake +++ b/buildtools/Cmake/AddTests.cmake @@ -107,9 +107,9 @@ ADD_TEST(gras-synchro-rl ${CMAKE_BINARY_DIR}/bin/tesh --cd ${CMAKE_BINARY_DIR} ADD_TEST(gras-properties-rl ${CMAKE_BINARY_DIR}/bin/tesh --cd ${CMAKE_BINARY_DIR}/examples/gras/properties ${CMAKE_HOME_DIRECTORY}/examples/gras/properties/test_rl) # MSG examples -ADD_TEST(msg-sendrecv-CLM03-raw ${CMAKE_BINARY_DIR}/bin/tesh --cfg simix/context:raw --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh) -ADD_TEST(msg-sendrecv-CLM03-thread ${CMAKE_BINARY_DIR}/bin/tesh --cfg simix/context:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh) -ADD_TEST(msg-sendrecv-CLM03-ucontext ${CMAKE_BINARY_DIR}/bin/tesh --cfg simix/context:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh) +ADD_TEST(msg-sendrecv-CLM03-raw ${CMAKE_BINARY_DIR}/bin/tesh --cfg contexts/factory:raw --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh) +ADD_TEST(msg-sendrecv-CLM03-thread ${CMAKE_BINARY_DIR}/bin/tesh --cfg contexts/factory:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh) +ADD_TEST(msg-sendrecv-CLM03-ucontext ${CMAKE_BINARY_DIR}/bin/tesh --cfg contexts/factory:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh) ADD_TEST(msg-sendrecv-Vegas ${CMAKE_BINARY_DIR}/bin/tesh --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_Vegas.tesh) ADD_TEST(msg-sendrecv-Reno ${CMAKE_BINARY_DIR}/bin/tesh --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_Reno.tesh) ADD_TEST(msg-suspend ${CMAKE_BINARY_DIR}/bin/tesh --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/suspend/suspend.tesh) @@ -124,9 +124,9 @@ ADD_TEST(msg-migration ${CMAKE_BINARY_DIR}/bin/tesh --setenv srcdir=${CMAKE_H ADD_TEST(msg-ptask ${CMAKE_BINARY_DIR}/bin/tesh --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/parallel_task/parallel_task.tesh) ADD_TEST(msg-priority ${CMAKE_BINARY_DIR}/bin/tesh --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/priority/priority.tesh) ADD_TEST(msg-properties ${CMAKE_BINARY_DIR}/bin/tesh --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/properties/msg_prop.tesh) -ADD_TEST(msg-icomms-raw ${CMAKE_BINARY_DIR}/bin/tesh --cfg simix/context:raw --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/icomms --cd ${CMAKE_BINARY_DIR}/examples/msg/icomms ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/peer.tesh) -ADD_TEST(msg-icomms-thread ${CMAKE_BINARY_DIR}/bin/tesh --cfg simix/context:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/icomms --cd ${CMAKE_BINARY_DIR}/examples/msg/icomms ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/peer.tesh) -ADD_TEST(msg-icomms-ucontext ${CMAKE_BINARY_DIR}/bin/tesh --cfg simix/context:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/icomms --cd ${CMAKE_BINARY_DIR}/examples/msg/icomms ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/peer.tesh) +ADD_TEST(msg-icomms-raw ${CMAKE_BINARY_DIR}/bin/tesh --cfg contexts/factory:raw --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/icomms --cd ${CMAKE_BINARY_DIR}/examples/msg/icomms ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/peer.tesh) +ADD_TEST(msg-icomms-thread ${CMAKE_BINARY_DIR}/bin/tesh --cfg contexts/factory:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/icomms --cd ${CMAKE_BINARY_DIR}/examples/msg/icomms ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/peer.tesh) +ADD_TEST(msg-icomms-ucontext ${CMAKE_BINARY_DIR}/bin/tesh --cfg contexts/factory:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/icomms --cd ${CMAKE_BINARY_DIR}/examples/msg/icomms ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/peer.tesh) ADD_TEST(msg-actions ${CMAKE_BINARY_DIR}/bin/tesh --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/actions --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/actions actions.tesh) ADD_TEST(msg-masterslave-cpu-ti ${CMAKE_BINARY_DIR}/bin/tesh --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/masterslave --cd ${CMAKE_HOME_DIRECTORY}/examples/msg masterslave/masterslave_cpu_ti.tesh) ADD_TEST(msg-trace ${CMAKE_BINARY_DIR}/bin/tesh --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg --cd ${CMAKE_HOME_DIRECTORY}/examples/msg trace/trace.tesh) @@ -183,9 +183,9 @@ ADD_TEST(simdag-test-prop ${CMAKE_BINARY_DIR}/bin/tesh --setenv srcdir=${CMAK ADD_TEST(simdag-minmin-test ${CMAKE_BINARY_DIR}/bin/tesh --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag/scheduling --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag/scheduling test_minmin.tesh) if(HAVE_GTNETS) -ADD_TEST(msg-gtnets-waxman-raw ${CMAKE_BINARY_DIR}/bin/tesh --cfg simix/context:raw --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-waxman.tesh) -ADD_TEST(msg-gtnets-waxman-thread ${CMAKE_BINARY_DIR}/bin/tesh --cfg simix/context:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-waxman.tesh) -ADD_TEST(msg-gtnets-waxman-ucontext ${CMAKE_BINARY_DIR}/bin/tesh --cfg simix/context:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-waxman.tesh) +ADD_TEST(msg-gtnets-waxman-raw ${CMAKE_BINARY_DIR}/bin/tesh --cfg contexts/factory:raw --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-waxman.tesh) +ADD_TEST(msg-gtnets-waxman-thread ${CMAKE_BINARY_DIR}/bin/tesh --cfg contexts/factory:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-waxman.tesh) +ADD_TEST(msg-gtnets-waxman-ucontext ${CMAKE_BINARY_DIR}/bin/tesh --cfg contexts/factory:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-waxman.tesh) ADD_TEST(msg-gtnets-dogbone ${CMAKE_BINARY_DIR}/bin/tesh --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-dogbone-gtnets.tesh) ADD_TEST(msg-gtnets-onelink ${CMAKE_BINARY_DIR}/bin/tesh --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-onelink-gtnets.tesh) ADD_TEST(msg-gtnets-dogbone-lv08 ${CMAKE_BINARY_DIR}/bin/tesh --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-dogbone-lv08.tesh) diff --git a/include/simix/context.h b/include/simix/context.h index 0ccf120727..6bf251e2a7 100644 --- a/include/simix/context.h +++ b/include/simix/context.h @@ -6,8 +6,8 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#ifndef _XBT_CONTEXT_H -#define _XBT_CONTEXT_H +#ifndef _SIMIX_CONTEXT_H +#define _SIMIX_CONTEXT_H #include "xbt/swag.h" #include "simix/datatypes.h" @@ -55,6 +55,7 @@ typedef struct s_smx_context_factory { typedef void (*smx_ctx_factory_initializer_t)(smx_context_factory_t*); extern smx_ctx_factory_initializer_t smx_factory_initializer_to_use; extern char* smx_context_factory_name; +extern int smx_context_stack_size; extern int smx_parallel_contexts; extern smx_context_t smx_current_context; diff --git a/src/simix/smx_context.c b/src/simix/smx_context.c index 1044a01ec2..06f0cbbd4e 100644 --- a/src/simix/smx_context.c +++ b/src/simix/smx_context.c @@ -15,8 +15,9 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_context, simix, "Context switching mecanism"); -char* smx_context_factory_name = NULL; /* factory name specified by --cfg=simix/context=value */ +char* smx_context_factory_name = NULL; /* factory name specified by --cfg=contexts/factory:value */ smx_ctx_factory_initializer_t smx_factory_initializer_to_use = NULL; +int smx_context_stack_size = 128 * 1024; smx_context_t smx_current_context; /** @@ -29,7 +30,7 @@ void SIMIX_context_mod_init(void) if (smx_factory_initializer_to_use) { (*smx_factory_initializer_to_use)(&(simix_global->context_factory)); } - else { /* use the factory specified by --cfg=simix/ctx:value */ + else { /* use the factory specified by --cfg=contexts/factory:value */ if (smx_context_factory_name == NULL || !strcmp(smx_context_factory_name, "ucontext")) { /* use ucontext */ SIMIX_ctx_sysv_factory_init(&simix_global->context_factory); @@ -61,5 +62,5 @@ void SIMIX_context_mod_exit(void) finalize_factory = simix_global->context_factory->finalize; (*finalize_factory) (&simix_global->context_factory); } - xbt_dict_remove((xbt_dict_t) _surf_cfg_set,"simix/context"); + xbt_dict_remove((xbt_dict_t) _surf_cfg_set,"contexts/factory"); } diff --git a/src/simix/smx_context_raw.c b/src/simix/smx_context_raw.c index afb3cc8e0f..ea8e9606e0 100644 --- a/src/simix/smx_context_raw.c +++ b/src/simix/smx_context_raw.c @@ -21,12 +21,6 @@ #include "ucontext.h" #endif -/* lower this if you want to reduce the memory consumption */ -#ifndef CONTEXT_STACK_SIZE /* allow lua to override this */ -#define CONTEXT_STACK_SIZE 128*1024 -#endif /*CONTEXT_STACK_SIZE */ - - typedef char * raw_stack_t; typedef void (*rawctx_entry_point_t)(void *); @@ -189,15 +183,15 @@ smx_ctx_raw_create_context(xbt_main_func_t code, int argc, char **argv, /* If the user provided a function for the process then use it otherwise is the context for maestro */ if (code) { - context->malloced_stack = xbt_malloc0(CONTEXT_STACK_SIZE); + context->malloced_stack = xbt_malloc0(smx_context_stack_size); context->stack_top = - raw_makecontext(context->malloced_stack,CONTEXT_STACK_SIZE, + raw_makecontext(context->malloced_stack, smx_context_stack_size, (void(*)(void*))smx_ctx_raw_wrapper,context); #ifdef HAVE_VALGRIND_VALGRIND_H context->valgrind_stack_id = VALGRIND_STACK_REGISTER(context->malloced_stack, - context->malloced_stack + CONTEXT_STACK_SIZE); + context->malloced_stack + smx_context_stack_size); #endif /* HAVE_VALGRIND_VALGRIND_H */ }else{ diff --git a/src/simix/smx_context_sysv.c b/src/simix/smx_context_sysv.c index e5b66e1c17..a168a7eb2b 100644 --- a/src/simix/smx_context_sysv.c +++ b/src/simix/smx_context_sysv.c @@ -108,10 +108,10 @@ smx_ctx_sysv_create_context_sized(size_t size, xbt_main_func_t code, context->uc.uc_link = NULL; context->uc.uc_stack.ss_sp = - pth_skaddr_makecontext(context->stack, CONTEXT_STACK_SIZE); + pth_skaddr_makecontext(context->stack, smx_context_stack_size); context->uc.uc_stack.ss_size = - pth_sksize_makecontext(context->stack, CONTEXT_STACK_SIZE); + pth_sksize_makecontext(context->stack, smx_context_stack_size); #ifdef HAVE_VALGRIND_VALGRIND_H context->valgrind_stack_id = @@ -136,7 +136,7 @@ smx_ctx_sysv_create_context(xbt_main_func_t code, int argc, char **argv, void *data) { - return smx_ctx_sysv_create_context_sized(sizeof(s_smx_ctx_sysv_t), + return smx_ctx_sysv_create_context_sized(sizeof(s_smx_ctx_sysv_t) + smx_context_stack_size, code, argc, argv, cleanup_func, data); diff --git a/src/simix/smx_context_sysv_private.h b/src/simix/smx_context_sysv_private.h index 745df05038..3dd761a6c0 100644 --- a/src/simix/smx_context_sysv_private.h +++ b/src/simix/smx_context_sysv_private.h @@ -16,9 +16,6 @@ SG_BEGIN_DECL() /* lower this if you want to reduce the memory consumption */ -#ifndef CONTEXT_STACK_SIZE /* allow lua to override this */ -#define CONTEXT_STACK_SIZE 128*1024 -#endif /*CONTEXT_STACK_SIZE */ #include "context_sysv_config.h" /* loads context system definitions */ #ifdef _XBT_WIN32 #include /* context relative declarations */ @@ -33,7 +30,7 @@ typedef struct s_smx_ctx_sysv { #ifdef HAVE_VALGRIND_VALGRIND_H unsigned int valgrind_stack_id; /* the valgrind stack id */ #endif - char stack[CONTEXT_STACK_SIZE]; /* the thread stack size */ + char stack[0]; /* the thread stack (must remain the last element of the structure) */ } s_smx_ctx_sysv_t, *smx_ctx_sysv_t; smx_ctx_sysv_t maestro_context; diff --git a/src/surf/surf_config.c b/src/surf/surf_config.c index 5cdd4c052a..4473b6f723 100644 --- a/src/surf/surf_config.c +++ b/src/surf/surf_config.c @@ -194,6 +194,11 @@ static void _surf_cfg_cb_context_factory(const char *name, int pos) smx_context_factory_name = xbt_cfg_get_string(_surf_cfg_set, name); } +static void _surf_cfg_cb_context_stack_size(const char *name, int pos) +{ + smx_context_stack_size = xbt_cfg_get_int(_surf_cfg_set, name) * 1024; +} + static void _surf_cfg_cb_parallel_contexts(const char *name, int pos) { smx_parallel_contexts = 1; @@ -342,13 +347,20 @@ void surf_config_init(int *argc, char **argv) /* context factory */ default_value = xbt_strdup("ucontext"); - xbt_cfg_register(&_surf_cfg_set, "simix/context", + 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 Ko (ucontext or raw only)", + xbt_cfgelm_int, &default_value_int, 1, 1, + _surf_cfg_cb_context_stack_size, NULL); + /* parallel contexts */ default_value_int = 0; - xbt_cfg_register(&_surf_cfg_set, "parallel-contexts", + xbt_cfg_register(&_surf_cfg_set, "contexts/parallel", "Activate the parallel execution of user contexts (EXPERIMENTAL -- pthreads only)", xbt_cfgelm_int, &default_value_int, 0, 1, _surf_cfg_cb_parallel_contexts, NULL); diff --git a/src/xbt/config.c b/src/xbt/config.c index 0585b4955a..456f47daed 100644 --- a/src/xbt/config.c +++ b/src/xbt/config.c @@ -636,8 +636,8 @@ void xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options) } *(val++) = '\0'; - if(strcmp(name,"simix/context")) - INFO2("Configuration change: Set '%s' to '%s'", name, val); + if (strcmp(name,"contexts/factory")) + INFO2("Configuration change: Set '%s' to '%s'", name, val); TRY { variable = xbt_dict_get((xbt_dict_t) cfg, name);