X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7b7db8a4db1107ce77e923847ad4e33e02e4e27e..65e338fbfd769d49b29242bfe56cde18c03b6074:/src/instr/resource_utilization.c diff --git a/src/instr/resource_utilization.c b/src/instr/resource_utilization.c index 7898bea1ea..afb26ee1ef 100644 --- a/src/instr/resource_utilization.c +++ b/src/instr/resource_utilization.c @@ -10,16 +10,11 @@ #define VARIABLE_SEPARATOR '#' -#define METHOD_B +//B +static xbt_dict_t method_b_dict; -#ifdef METHOD_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 +41,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,12 +71,11 @@ 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(); + method_b_dict = xbt_dict_new(); } static void __TRACE_surf_resource_utilization_B (double now, double delta, const char *variable, const char *resource, double value) @@ -94,19 +105,19 @@ static void __TRACE_surf_resource_utilization_B (double now, double delta, const snprintf (valuekey, 100, "%s%cValue", resource, VARIABLE_SEPARATOR); snprintf (variablekey, 100, "%s%cVariable", resource, VARIABLE_SEPARATOR); - lastvariable = xbt_dict_get_or_null (last_platform_variables, variablekey); + lastvariable = xbt_dict_get_or_null (method_b_dict, variablekey); if (lastvariable == NULL){ __TRACE_surf_check_variable_set_to_zero (now, variable, resource); pajeAddVariable (now, variable, resource, valuestr); nowdeltastr_cpy = xbt_strdup (nowdeltastr); valuestr_cpy = xbt_strdup (valuestr); variable_cpy = xbt_strdup (variable); - xbt_dict_set (last_platform_variables, timekey, nowdeltastr_cpy, xbt_free); - xbt_dict_set (last_platform_variables, valuekey, valuestr_cpy, xbt_free); - xbt_dict_set (last_platform_variables, variablekey, variable_cpy, xbt_free); + xbt_dict_set (method_b_dict, timekey, nowdeltastr_cpy, xbt_free); + xbt_dict_set (method_b_dict, valuekey, valuestr_cpy, xbt_free); + xbt_dict_set (method_b_dict, variablekey, variable_cpy, xbt_free); }else{ - lasttime = xbt_dict_get_or_null (last_platform_variables, timekey); - lastvalue = xbt_dict_get_or_null (last_platform_variables, valuekey); + lasttime = xbt_dict_get_or_null (method_b_dict, timekey); + lastvalue = xbt_dict_get_or_null (method_b_dict, valuekey); /* check if it is the same variable */ if (strcmp(lastvariable, variable) == 0){ /* same variable */ @@ -115,15 +126,15 @@ static void __TRACE_surf_resource_utilization_B (double now, double delta, const /* check if lastvalue equals valuestr */ if (atof(lastvalue) == value){ /* lastvalue == value (good, just advance time) */ char *nowdeltastr_cpy = xbt_strdup (nowdeltastr); - xbt_dict_set (last_platform_variables, timekey, nowdeltastr_cpy, xbt_free); + xbt_dict_set (method_b_dict, timekey, nowdeltastr_cpy, xbt_free); }else{ /* value has changed */ /* value has changed, subtract previous value, add new one */ pajeSubVariable (atof(lasttime), variable, resource, lastvalue); pajeAddVariable (atof(nowstr), variable, resource, valuestr); nowdeltastr_cpy = xbt_strdup (nowdeltastr); valuestr_cpy = xbt_strdup (valuestr); - xbt_dict_set (last_platform_variables, timekey, nowdeltastr_cpy, xbt_free); - xbt_dict_set (last_platform_variables, valuekey, valuestr_cpy, xbt_free); + xbt_dict_set (method_b_dict, timekey, nowdeltastr_cpy, xbt_free); + xbt_dict_set (method_b_dict, valuekey, valuestr_cpy, xbt_free); } }else{ /* lasttime != now */ /* the last time is different from new starting time, subtract to lasttime and add from nowstr */ @@ -131,8 +142,8 @@ static void __TRACE_surf_resource_utilization_B (double now, double delta, const pajeAddVariable (atof(nowstr), variable, resource, valuestr); nowdeltastr_cpy = xbt_strdup (nowdeltastr); valuestr_cpy = xbt_strdup (valuestr); - xbt_dict_set (last_platform_variables, timekey, nowdeltastr_cpy, xbt_free); - xbt_dict_set (last_platform_variables, valuekey, valuestr_cpy, xbt_free); + xbt_dict_set (method_b_dict, timekey, nowdeltastr_cpy, xbt_free); + xbt_dict_set (method_b_dict, valuekey, valuestr_cpy, xbt_free); } }else{ /* variable has changed */ pajeSubVariable (atof(lasttime), lastvariable, resource, lastvalue); @@ -141,9 +152,9 @@ static void __TRACE_surf_resource_utilization_B (double now, double delta, const nowdeltastr_cpy = xbt_strdup (nowdeltastr); valuestr_cpy = xbt_strdup (valuestr); variable_cpy = xbt_strdup (variable); - xbt_dict_set (last_platform_variables, timekey, nowdeltastr_cpy, xbt_free); - xbt_dict_set (last_platform_variables, valuekey, valuestr_cpy, xbt_free); - xbt_dict_set (last_platform_variables, variablekey, variable_cpy, xbt_free); + xbt_dict_set (method_b_dict, timekey, nowdeltastr_cpy, xbt_free); + xbt_dict_set (method_b_dict, valuekey, valuestr_cpy, xbt_free); + xbt_dict_set (method_b_dict, variablekey, variable_cpy, xbt_free); } } return; @@ -159,12 +170,12 @@ static void __TRACE_surf_resource_utilization_finalize_B () char *var_cpy = NULL; xbt_dynar_t resources = NULL; if (!IS_TRACING_PLATFORM) return; - if (!xbt_dict_length(last_platform_variables)){ + if (!xbt_dict_length(method_b_dict)){ return; }else{ - /* get all resources from last_platform_variables */ + /* get all resources from method_b_dict */ resources = xbt_dynar_new(sizeof(char*), xbt_free); - xbt_dict_foreach(last_platform_variables, cursor, key, value) { + xbt_dict_foreach(method_b_dict, cursor, key, value) { res = strsplit (key, 0, VARIABLE_SEPARATOR); aux = strsplit (key, 1, VARIABLE_SEPARATOR); if (strcmp (aux, "Time") == 0){ //only need to add one of three @@ -185,22 +196,21 @@ static void __TRACE_surf_resource_utilization_finalize_B () snprintf (valuekey, 100, "%s%cValue", resource, VARIABLE_SEPARATOR); snprintf (variablekey, 100, "%s%cVariable", resource, VARIABLE_SEPARATOR); - time = xbt_dict_get_or_null (last_platform_variables, timekey); + time = xbt_dict_get_or_null (method_b_dict, timekey); if (!time) continue; - value = xbt_dict_get (last_platform_variables, valuekey); - variable = xbt_dict_get (last_platform_variables, variablekey); + value = xbt_dict_get (method_b_dict, valuekey); + variable = xbt_dict_get (method_b_dict, variablekey); pajeSubVariable (atof(time), variable, resource, value); - xbt_dict_remove (last_platform_variables, timekey); - xbt_dict_remove (last_platform_variables, valuekey); - xbt_dict_remove (last_platform_variables, variablekey); + xbt_dict_remove (method_b_dict, timekey); + xbt_dict_remove (method_b_dict, valuekey); + xbt_dict_remove (method_b_dict, variablekey); } } + xbt_dict_free (&method_b_dict); } -#endif //METHOD_B - -#ifdef METHOD_C +//C static void __TRACE_surf_resource_utilization_start_C (smx_action_t action) { char key[100]; @@ -211,14 +221,6 @@ static void __TRACE_surf_resource_utilization_start_C (smx_action_t action) xbt_dict_remove (method_c_dict, key); //should never execute here, but it does } xbt_dict_set (method_c_dict, key, xbt_dict_new(), xbt_free); - - //fprintf (stderr, "start %p\n", action); - /* - - if (xbt_dict_get_or_null (start_time, key)){ - xbt_dict_remove (start_time, key); - } - */ } static void __TRACE_surf_resource_utilization_end_C (smx_action_t action) @@ -227,9 +229,6 @@ static void __TRACE_surf_resource_utilization_end_C (smx_action_t action) snprintf (key, 100, "%p", action); xbt_dict_t action_dict = xbt_dict_get (method_c_dict, key); -// fprintf (stderr, "end %p (%f - %f)\n", action, atof(xbt_dict_get_or_null(action_dict, "start")), -// atof(xbt_dict_get_or_null(action_dict, "end"))); - double start_time = atof(xbt_dict_get (action_dict, "start")); double end_time = atof(xbt_dict_get (action_dict, "end")); @@ -245,23 +244,8 @@ static void __TRACE_surf_resource_utilization_end_C (smx_action_t action) pajeAddVariable (start_time, variable, resource, value_str); pajeSubVariable (end_time, variable, resource, value_str); } - - //fprintf(stderr, "\t%p (key=%s) %s %s = %s\n",action, action_dict_key, resource, variable, action_dict_value); - //fprintf(stderr, "\t%f %f\n", start_time, end_time); } - //fprintf (stderr, "\n"); - xbt_dict_remove (method_c_dict, key); - /* - - if (xbt_dict_get_or_null (start_time_dict, key)){ - xbt_dict_remove (start_time_dict, key); - } - if (xbt_dict_get_or_null (end_time_dict, key)){ - xbt_dict_remove (end_time_dict, key); - } - */ - } static void __TRACE_surf_resource_utilization_C (smx_action_t action, double now, double delta, const char *variable, const char *resource, double value) @@ -295,14 +279,10 @@ static void __TRACE_surf_resource_utilization_C (smx_action_t action, double now char new_current_value[100]; snprintf (new_current_value, 100, "%f", current_value_f); xbt_dict_set (action_dict, res_var, xbt_strdup (new_current_value), xbt_free); - - //fprintf (stderr, "event act=%p, now=%f, delta=%f, %s - %s %f\n", action, now, delta, resource, variable, value); } static void __TRACE_surf_resource_utilization_initialize_C () { - //start_time_dict = xbt_dict_new(); - //end_time_dict = xbt_dict_new(); method_c_dict = xbt_dict_new(); } @@ -310,9 +290,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 @@ -326,18 +303,10 @@ void TRACE_surf_link_set_utilization (const char *name, smx_action_t smx_action, strcmp (name, "loopback")==0){ //ignore loopback updates return; } - - if (value == 0) return; - - //if (!xbt_dict_get_or_null (created_links, name)){ -// TRACE_surf_link_missing (); - //return; - //} + if (!value) return; snprintf (type, 100, "b%s", smx_action->category); __TRACE_surf_resource_utilization_event (smx_action, now, delta, type, name, value); -//fprintf (stderr, "%p - (%f - %f = %f) %s %f metric = %f\n", smx_action, now, now+delta, delta, name, value, value*delta); -// __TRACE_surf_update_action_state_resource (now, delta, type, name, value); return; } @@ -349,13 +318,10 @@ void TRACE_surf_host_set_utilization (const char *name, smx_action_t smx_action, char type[100]; if (!IS_TRACING || !IS_TRACED(smx_action)) return; - if (value==0){ - return; - } + if (!value) return; + snprintf (type, 100, "p%s", smx_action->category); __TRACE_surf_resource_utilization_event (smx_action, now, delta, type, name, value); -//fprintf (stderr, "%p - (%f - %f = %f) %s %f metric = %f\n", smx_action, now, now+delta, delta, name, value, value*delta); -// __TRACE_surf_update_action_state_resource (now, delta, type, name, value); return; } @@ -364,60 +330,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