From b16f3d6a14798bcac4e8203cc40975c16cf85f5a Mon Sep 17 00:00:00 2001 From: schnorr Date: Thu, 23 Sep 2010 10:48:37 +0000 Subject: [PATCH] new configuration option tracing/platform/method details: - may be "a", "b", "c" - tracing behavior for each method as explained in previous commit git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@8209 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/instr/instr_config.c | 13 +++++ src/instr/private.h | 1 + src/instr/resource_utilization.c | 97 +++++++++++++++----------------- 3 files changed, 60 insertions(+), 51 deletions(-) diff --git a/src/instr/instr_config.c b/src/instr/instr_config.c index a7101621ed..dc6576023e 100644 --- a/src/instr/instr_config.c +++ b/src/instr/instr_config.c @@ -15,6 +15,7 @@ #define OPT_TRACING_MSG_PROCESS "tracing/msg/process" #define OPT_TRACING_MSG_VOLUME "tracing/msg/volume" #define OPT_TRACING_FILENAME "tracing/filename" +#define OPT_TRACING_PLATFORM_METHOD "tracing/platform/method" static int trace_configured = 0; @@ -53,6 +54,11 @@ char *_TRACE_filename (void) return xbt_cfg_get_string (_surf_cfg_set, OPT_TRACING_FILENAME); } +char *_TRACE_platform_method (void) +{ + return xbt_cfg_get_string (_surf_cfg_set, OPT_TRACING_PLATFORM_METHOD); +} + void TRACE_global_init(int *argc, char **argv) { /* name of the tracefile */ @@ -76,6 +82,13 @@ void TRACE_global_init(int *argc, char **argv) xbt_cfgelm_int, &default_tracing_platform, 0, 1, NULL, NULL); + /* platform method */ + char *default_tracing_platform_method = xbt_strdup ("b"); + xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_PLATFORM_METHOD, + "Tracing method used to register categorized resource behavior.", + xbt_cfgelm_string, &default_tracing_platform_method, 1, 1, + NULL, NULL); + /* msg task */ int default_tracing_msg_task = 0; xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_MSG_TASK, diff --git a/src/instr/private.h b/src/instr/private.h index 1cfdfe4c4d..eea811fefc 100644 --- a/src/instr/private.h +++ b/src/instr/private.h @@ -151,6 +151,7 @@ int _TRACE_msg_task_enabled (void); int _TRACE_msg_process_enabled (void); int _TRACE_msg_volume_enabled (void); char *_TRACE_filename (void); +char *_TRACE_platform_method (void); void TRACE_global_init(int *argc, char **argv); /* from resource_utilization.c */ diff --git a/src/instr/resource_utilization.c b/src/instr/resource_utilization.c index 7898bea1ea..eef66142c4 100644 --- a/src/instr/resource_utilization.c +++ b/src/instr/resource_utilization.c @@ -10,16 +10,12 @@ #define VARIABLE_SEPARATOR '#' -#define METHOD_B - -#ifdef METHOD_B +//B static xbt_dict_t last_platform_variables; /* to control the amount of add/sub variables events: dict with key {RESOURCE_NAME}#Time or {RESOURCE_NAME}#Value of dict with variables types == string */ -#endif //METHOD_B -#ifdef METHOD_C +//C static xbt_dict_t method_c_dict; -#endif // METHOD_C /* auxiliary function for resource utilization tracing */ static char *strsplit (char *input, int field, char del) //caller should free the returned string @@ -46,7 +42,24 @@ static char *strsplit (char *input, int field, char del) //caller should free th return ret; } -#ifdef METHOD_A +//resource utilization tracing method +typedef enum {methodA,methodB,methodC} TracingMethod; +static TracingMethod currentMethod; + +static void __TRACE_define_method (char *method) +{ + if (!strcmp(method, "a")){ + currentMethod = methodA; + }else if (!strcmp(method, "b")){ + currentMethod = methodB; + }else if (!strcmp(method, "c")){ + currentMethod = methodC; + }else{ + currentMethod = methodB; //default + } +} + +//A static void __TRACE_surf_resource_utilization_A (double now, double delta, const char *variable, const char *resource, double value) { if (!IS_TRACING_PLATFORM) return; @@ -59,9 +72,8 @@ static void __TRACE_surf_resource_utilization_A (double now, double delta, const pajeSubVariable (now+delta, variable, resource, valuestr); return; } -#endif //METHOD_A -#ifdef METHOD_B +//B static void __TRACE_surf_resource_utilization_initialize_B () { last_platform_variables = xbt_dict_new(); @@ -197,10 +209,8 @@ static void __TRACE_surf_resource_utilization_finalize_B () } } } -#endif //METHOD_B - -#ifdef METHOD_C +//C static void __TRACE_surf_resource_utilization_start_C (smx_action_t action) { char key[100]; @@ -310,9 +320,6 @@ static void __TRACE_surf_resource_utilization_finalize_C () { xbt_dict_free (&method_c_dict); } -#endif //METHOD_C - - /* * TRACE_surf_link_set_utilization: entry point from SimGrid @@ -364,60 +371,48 @@ void TRACE_surf_host_set_utilization (const char *name, smx_action_t smx_action, */ void __TRACE_surf_resource_utilization_start (smx_action_t action) { -#ifdef METHOD_C - __TRACE_surf_resource_utilization_start_C (action); -#endif + if (currentMethod == methodC){ + __TRACE_surf_resource_utilization_start_C (action); + } } void __TRACE_surf_resource_utilization_end (smx_action_t action) { -#ifdef METHOD_C - __TRACE_surf_resource_utilization_end_C (action); -#endif + if (currentMethod == methodC){ + __TRACE_surf_resource_utilization_end_C (action); + } } void __TRACE_surf_resource_utilization_event (smx_action_t action, double now, double delta, const char *variable, const char *resource, double value) { -#ifdef METHOD_A - __TRACE_surf_resource_utilization_A (now, delta, variable, resource, value); -#else - #ifdef METHOD_B - __TRACE_surf_resource_utilization_B (now, delta, variable, resource, value); - #else - #ifdef METHOD_C + if (currentMethod == methodA){ + __TRACE_surf_resource_utilization_A (now, delta, variable, resource, value); + }else if (currentMethod == methodB){ + __TRACE_surf_resource_utilization_B (now, delta, variable, resource, value); + }else if (currentMethod == methodC){ __TRACE_surf_resource_utilization_C (action, now, delta, variable, resource, value); - #endif - #endif -#endif + } } void __TRACE_surf_resource_utilization_initialize () { -#ifdef METHOD_A -#else - #ifdef METHOD_B - __TRACE_surf_resource_utilization_initialize_B(); - #else - #ifdef METHOD_C + __TRACE_define_method (_TRACE_platform_method()); + + if (currentMethod == methodA){ + }else if (currentMethod == methodB){ + __TRACE_surf_resource_utilization_initialize_B(); + }else if (currentMethod == methodC){ __TRACE_surf_resource_utilization_initialize_C(); - #endif - #endif -#endif + } } void __TRACE_surf_resource_utilization_finalize () { -#ifdef METHOD_A -#else - #ifdef METHOD_B - __TRACE_surf_resource_utilization_finalize_B(); - #else - #ifdef METHOD_C + if (currentMethod == methodA){ + }else if (currentMethod == methodB){ + __TRACE_surf_resource_utilization_finalize_B(); + }else if (currentMethod == methodC){ __TRACE_surf_resource_utilization_finalize_C(); - #endif - #endif -#endif + } } - - #endif -- 2.20.1