Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add a flag --cfg=contexts/stacksize and rename other context flags to be
authorthiery <thiery@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 24 Jan 2011 13:37:15 +0000 (13:37 +0000)
committerthiery <thiery@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 24 Jan 2011 13:37:15 +0000 (13:37 +0000)
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

buildtools/Cmake/AddTests.cmake
include/simix/context.h
src/simix/smx_context.c
src/simix/smx_context_raw.c
src/simix/smx_context_sysv.c
src/simix/smx_context_sysv_private.h
src/surf/surf_config.c
src/xbt/config.c

index f3a06de..88b4bce 100644 (file)
@@ -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)
index 0ccf120..6bf251e 100644 (file)
@@ -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;
 
index 1044a01..06f0cbb 100644 (file)
@@ -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");
 }
index afb3cc8..ea8e960 100644 (file)
 #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{
index e5b66e1..a168a7e 100644 (file)
@@ -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);
 
index 745df05..3dd761a 100644 (file)
@@ -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 <win32_ucontext.h>     /* 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;
index 5cdd4c0..4473b6f 100644 (file)
@@ -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);
index 0585b49..456f47d 100644 (file)
@@ -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);