X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/20427e1463985c071ac551547d0906e282b43520..97aa0e698984b850ad794879f10e2978e4ec94fe:/src/surf/cpu_ti.c diff --git a/src/surf/cpu_ti.c b/src/surf/cpu_ti.c index 7c1a1a6e30..34a301c851 100644 --- a/src/surf/cpu_ti.c +++ b/src/surf/cpu_ti.c @@ -14,6 +14,7 @@ #include "trace_mgr_private.h" #include "cpu_ti_private.h" #include "xbt/heap.h" +#include "surf/surf_resource.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu_ti, surf, "Logging specific to the SURF CPU TRACE INTEGRATION module"); @@ -49,10 +50,8 @@ static int surf_cpu_ti_binary_search(double *array, double a, int low, static void surf_cpu_ti_free_trace(surf_cpu_ti_trace_t trace) { - if (trace->time_points) - xbt_free(trace->time_points); - if (trace->integral) - xbt_free(trace->integral); + xbt_free(trace->time_points); + xbt_free(trace->integral); xbt_free(trace); } @@ -74,12 +73,12 @@ static surf_cpu_ti_trace_t surf_cpu_ti_trace_new(tmgr_trace_t power_trace) trace = xbt_new0(s_surf_cpu_ti_trace_t, 1); trace->time_points = xbt_malloc0(sizeof(double) * - (xbt_dynar_length(power_trace->event_list) + 1)); + (xbt_dynar_length(power_trace->s_list.event_list) + 1)); trace->integral = xbt_malloc0(sizeof(double) * - (xbt_dynar_length(power_trace->event_list) + 1)); - trace->nb_points = xbt_dynar_length(power_trace->event_list); - xbt_dynar_foreach(power_trace->event_list, cpt, val) { + (xbt_dynar_length(power_trace->s_list.event_list) + 1)); + trace->nb_points = xbt_dynar_length(power_trace->s_list.event_list); + xbt_dynar_foreach(power_trace->s_list.event_list, cpt, val) { trace->time_points[i] = time; trace->integral[i] = integral; integral += val.delta * val.value; @@ -117,8 +116,8 @@ static surf_cpu_ti_tgmr_t cpu_ti_parse_trace(tmgr_trace_t power_trace, } /* only one point available, fixed trace */ - if (xbt_dynar_length(power_trace->event_list) == 1) { - xbt_dynar_get_cpy(power_trace->event_list, 0, &val); + if (xbt_dynar_length(power_trace->s_list.event_list) == 1) { + xbt_dynar_get_cpy(power_trace->s_list.event_list, 0, &val); trace->type = TRACE_FIXED; trace->value = val.value; return trace; @@ -128,7 +127,7 @@ static surf_cpu_ti_tgmr_t cpu_ti_parse_trace(tmgr_trace_t power_trace, trace->power_trace = power_trace; /* count the total time of trace file */ - xbt_dynar_foreach(power_trace->event_list, cpt, val) { + xbt_dynar_foreach(power_trace->s_list.event_list, cpt, val) { total_time += val.delta; } trace->trace = surf_cpu_ti_trace_new(power_trace); @@ -173,10 +172,10 @@ static void* cpu_ti_create_resource(const char *name, double power_peak, if (state_trace) cpu->state_event = tmgr_history_add_trace(history, state_trace, 0.0, 0, cpu); - if (power_trace && xbt_dynar_length(power_trace->event_list) > 1) { + if (power_trace && xbt_dynar_length(power_trace->s_list.event_list) > 1) { /* add a fake trace event if periodicity == 0 */ - xbt_dynar_get_cpy(power_trace->event_list, - xbt_dynar_length(power_trace->event_list) - 1, &val); + xbt_dynar_get_cpy(power_trace->s_list.event_list, + xbt_dynar_length(power_trace->s_list.event_list) - 1, &val); if (val.delta == 0) { empty_trace = tmgr_empty_trace_new(); cpu->power_event = @@ -192,13 +191,13 @@ static void* cpu_ti_create_resource(const char *name, double power_peak, static void parse_cpu_ti_init(sg_platf_host_cbarg_t host) { - cpu_ti_create_resource(host->V_host_id, - host->V_host_power_peak, - host->V_host_power_scale, - host->V_host_power_trace, - host->V_host_core, - host->V_host_state_initial, - host->V_host_state_trace, + cpu_ti_create_resource(host->id, + host->power_peak, + host->power_scale, + host->power_trace, + host->core_amount, + host->initial_state, + host->state_trace, host->properties); } @@ -245,10 +244,10 @@ static void add_traces_cpu_ti(void) cpu->avail_trace = cpu_ti_parse_trace(trace, cpu->power_scale); /* add a fake trace event if periodicity == 0 */ - if (trace && xbt_dynar_length(trace->event_list) > 1) { + if (trace && xbt_dynar_length(trace->s_list.event_list) > 1) { s_tmgr_event_t val; - xbt_dynar_get_cpy(trace->event_list, - xbt_dynar_length(trace->event_list) - 1, &val); + xbt_dynar_get_cpy(trace->s_list.event_list, + xbt_dynar_length(trace->s_list.event_list) - 1, &val); if (val.delta == 0) { tmgr_trace_t empty_trace; empty_trace = tmgr_empty_trace_new(); @@ -263,7 +262,7 @@ static void add_traces_cpu_ti(void) static void cpu_ti_define_callbacks() { sg_platf_host_add_cb(parse_cpu_ti_init); - surfxml_add_callback(ETag_surfxml_platform_cb_list, &add_traces_cpu_ti); + sg_platf_postparse_add_cb(add_traces_cpu_ti); } static int cpu_ti_resource_used(void *resource_id) @@ -314,7 +313,6 @@ static void cpu_ti_action_state_set(surf_action_t action, */ static void cpu_ti_update_remaining_amount(cpu_ti_t cpu, double now) { -#define GENERIC_ACTION(action) action->generic_action double area_total; surf_action_cpu_ti_t action; @@ -330,13 +328,14 @@ static void cpu_ti_update_remaining_amount(cpu_ti_t cpu, double now) cpu->last_update); xbt_swag_foreach(action, cpu->action_set) { + surf_action_t generic = (surf_action_t)action; /* action not running, skip it */ - if (GENERIC_ACTION(action).state_set != + if (generic->state_set != surf_cpu_model->states.running_action_set) continue; /* bogus priority, skip it */ - if (GENERIC_ACTION(action).priority <= 0) + if (generic->priority <= 0) continue; /* action suspended, skip it */ @@ -344,20 +343,20 @@ static void cpu_ti_update_remaining_amount(cpu_ti_t cpu, double now) continue; /* action don't need update */ - if (GENERIC_ACTION(action).start >= now) + if (generic->start >= now) continue; /* skip action that are finishing now */ - if (GENERIC_ACTION(action).finish >= 0 - && GENERIC_ACTION(action).finish <= now) + if (generic->finish >= 0 + && generic->finish <= now) continue; /* update remaining */ - double_update(&(GENERIC_ACTION(action).remains), + double_update(&(generic->remains), area_total / (cpu->sum_priority * - GENERIC_ACTION(action).priority)); + generic->priority)); XBT_DEBUG("Update remaining action(%p) remaining %lf", action, - GENERIC_ACTION(action).remains); + generic->remains); } cpu->last_update = now; #undef GENERIC_ACTION @@ -507,8 +506,8 @@ static void cpu_ti_update_resource_state(void *id, xbt_swag_insert(cpu, cpu_ti_modified_cpu); power_trace = cpu->avail_trace->power_trace; - xbt_dynar_get_cpy(power_trace->event_list, - xbt_dynar_length(power_trace->event_list) - 1, &val); + xbt_dynar_get_cpy(power_trace->s_list.event_list, + xbt_dynar_length(power_trace->s_list.event_list) - 1, &val); /* free old trace */ surf_cpu_ti_free_tmgr(cpu->avail_trace); cpu->power_scale = val.value; @@ -682,8 +681,8 @@ static double cpu_ti_action_get_remains(surf_action_t action) cpu_ti_update_remaining_amount((cpu_ti_t) ((surf_action_cpu_ti_t) action)->cpu, surf_get_clock()); - return action->remains; XBT_OUT(); + return action->remains; } static e_surf_resource_state_t cpu_ti_get_state(void *cpu) @@ -715,7 +714,7 @@ static double surf_cpu_ti_get_power_scale(surf_cpu_ti_tgmr_t trace, point = surf_cpu_ti_binary_search(trace->trace->time_points, reduced_a, 0, trace->trace->nb_points - 1); - xbt_dynar_get_cpy(trace->power_trace->event_list, point, &val); + xbt_dynar_get_cpy(trace->power_trace->s_list.event_list, point, &val); return val.value; } @@ -766,7 +765,7 @@ static void surf_cpu_ti_model_init_internal(void) cpu_ti_modified_cpu = xbt_swag_new(xbt_swag_offset(cpu, modified_cpu_hookup)); - surf_cpu_model->name = "CPU_TI"; + surf_cpu_model->name = "cpu_ti"; surf_cpu_model->action_unref = cpu_ti_action_unref; surf_cpu_model->action_cancel = cpu_ti_action_cancel; @@ -805,8 +804,7 @@ static void surf_cpu_ti_model_init_internal(void) void surf_cpu_model_init_ti() { - if (surf_cpu_model) - return; + xbt_assert(!surf_cpu_model,"CPU model already initialized. This should not happen."); surf_cpu_ti_model_init_internal(); cpu_ti_define_callbacks(); xbt_dynar_push(model_list, &surf_cpu_model);