X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f94f413f3722a8cea9ab78dfa72e3af7b2f4f67d..bb36f6cb5ff4e6987b909ff8bd865e5a488dfbef:/src/surf/network.c diff --git a/src/surf/network.c b/src/surf/network.c index 6df63ed3d3..d325f8a639 100644 --- a/src/surf/network.c +++ b/src/surf/network.c @@ -67,7 +67,8 @@ static xbt_heap_t net_action_heap = NULL; /* added to manage the communication action's heap */ static void net_action_update_index_heap(void *action, int i) { - ((surf_action_network_CM02_t) action)->index_heap = i; + surf_action_network_CM02_t a = action; + GENERIC_LMM_ACTION(a).index_heap = i; } /* insert action on heap using a given key and a hat (heap_action_type) @@ -80,15 +81,15 @@ static void net_action_update_index_heap(void *action, int i) static void heap_insert(surf_action_network_CM02_t action, double key, enum heap_action_type hat) { - action->hat = hat; + GENERIC_LMM_ACTION(action).hat = hat; xbt_heap_push(net_action_heap, action, key); } static void heap_remove(surf_action_network_CM02_t action) { - action->hat = NOTSET; - if (((surf_action_network_CM02_t) action)->index_heap >= 0) { - xbt_heap_remove(net_action_heap, action->index_heap); + GENERIC_LMM_ACTION(action).hat = NOTSET; + if (GENERIC_LMM_ACTION(action).index_heap >= 0) { + xbt_heap_remove(net_action_heap, GENERIC_LMM_ACTION(action).index_heap); } } @@ -343,11 +344,6 @@ static int net_action_unref(surf_action_t action) heap_remove((surf_action_network_CM02_t) action); xbt_swag_remove(action, net_modified_set); } -#ifdef HAVE_TRACING - xbt_free(((surf_action_network_CM02_t) action)->src_name); - xbt_free(((surf_action_network_CM02_t) action)->dst_name); - xbt_free(action->category); -#endif surf_action_free(&action); return 1; } @@ -396,7 +392,7 @@ static void update_action_remaining_lazy(double now) continue; } - delta = now - action->last_update; + delta = now - GENERIC_LMM_ACTION(action).last_update; double_update(&(((surf_action_t)action)->remains), lmm_variable_getvalue(((surf_action_lmm_t) action)->variable) * delta); @@ -418,7 +414,7 @@ static void update_action_remaining_lazy(double now) heap_remove(action); } - action->last_update = now; + GENERIC_LMM_ACTION(action).last_update = now; } } @@ -477,14 +473,12 @@ static double net_share_resources_lazy(double now) int max_dur_flag = 0; if (GENERIC_ACTION(action).state_set != - surf_network_model->states.running_action_set) { + surf_network_model->states.running_action_set) continue; - } /* bogus priority, skip it */ - if (GENERIC_ACTION(action).priority <= 0) { + if (GENERIC_ACTION(action).priority <= 0) continue; - } min = -1; value = lmm_variable_getvalue(GENERIC_LMM_ACTION(action).variable); @@ -511,24 +505,19 @@ static double net_share_resources_lazy(double now) GENERIC_ACTION(action).start, now + value, GENERIC_ACTION(action).max_duration); - if (action->index_heap >= 0) { - heap_remove((surf_action_network_CM02_t) action); - } - if (min != -1) { - heap_insert((surf_action_network_CM02_t) action, min, - max_dur_flag ? MAX_DURATION : NORMAL); + heap_remove(action); + heap_insert(action, min, max_dur_flag ? MAX_DURATION : NORMAL); XBT_DEBUG("Insert at heap action(%p) min %lf now %lf", action, min, now); - } + } else DIE_IMPOSSIBLE; } //hereafter must have already the min value for this resource model - if (xbt_heap_size(net_action_heap) > 0) { + if (xbt_heap_size(net_action_heap) > 0) min = xbt_heap_maxkey(net_action_heap) - now; - } else { + else min = -1; - } XBT_DEBUG("The minimum with the HEAP %lf", min); @@ -563,19 +552,18 @@ static void net_update_actions_state_full(double now, double delta) } #ifdef HAVE_TRACING if (TRACE_is_enabled()) { - xbt_dynar_t route = NULL; - routing_get_route_and_latency(action->src_name, action->dst_name, - &route, NULL); - link_CM02_t link; + int n = lmm_get_number_of_cnst_from_var(network_maxmin_system, GENERIC_LMM_ACTION(action).variable); unsigned int i; - xbt_dynar_foreach(route, i, link) { - TRACE_surf_link_set_utilization(link->lmm_resource. - generic_resource.name, - (((surf_action_t)action)->data, - (surf_action_t) action, - lmm_variable_getvalue(action-> - variable), - now - delta, delta); + for (i = 0; i < n; i++){ + lmm_constraint_t constraint = lmm_get_cnst_from_var(network_maxmin_system, + GENERIC_LMM_ACTION(action).variable, + i); + link_CM02_t link = lmm_constraint_id(constraint); + TRACE_surf_link_set_utilization(link->lmm_resource.generic_resource.name, + ((surf_action_t)action)->category, + lmm_variable_getvalue(GENERIC_LMM_ACTION(action).variable), + now - delta, + delta); } } #endif @@ -625,14 +613,15 @@ static void net_update_actions_state_lazy(double now, double delta) GENERIC_ACTION(action).finish = surf_get_clock(); // if I am wearing a latency hat - if (action->hat == LATENCY) { + if (GENERIC_LMM_ACTION(action).hat == LATENCY) { lmm_update_variable_weight(network_maxmin_system, GENERIC_LMM_ACTION(action).variable, action->weight); heap_remove(action); - action->last_update = surf_get_clock(); + GENERIC_LMM_ACTION(action).last_update = surf_get_clock(); // if I am wearing a max_duration or normal hat - } else if (action->hat == MAX_DURATION || action->hat == NORMAL) { + } else if (GENERIC_LMM_ACTION(action).hat == MAX_DURATION || + GENERIC_LMM_ACTION(action).hat == NORMAL) { // no need to communicate anymore // assume that flows that reached max_duration have remaining of 0 GENERIC_ACTION(action).remains = 0; @@ -812,8 +801,8 @@ static surf_action_t net_communicate(const char *src_name, xbt_swag_insert(action, ((surf_action_t)action)->state_set); action->rate = rate; if (network_update_mechanism == UM_LAZY) { - action->index_heap = -1; - action->last_update = surf_get_clock(); + GENERIC_LMM_ACTION(action).index_heap = -1; + GENERIC_LMM_ACTION(action).last_update = surf_get_clock(); } bandwidth_bound = -1.0; @@ -857,8 +846,8 @@ static surf_action_t net_communicate(const char *src_name, if (network_update_mechanism == UM_LAZY) { // add to the heap the event when the latency is payed XBT_DEBUG("Added action (%p) one latency event at date %f", action, - action->latency + action->last_update); - heap_insert(action, action->latency + action->last_update, + action->latency + GENERIC_LMM_ACTION(action).last_update); + heap_insert(action, action->latency + GENERIC_LMM_ACTION(action).last_update, xbt_dynar_is_empty(route) ? NORMAL : LATENCY); } } else @@ -892,14 +881,6 @@ static surf_action_t net_communicate(const char *src_name, GENERIC_LMM_ACTION(action).variable, .05); } } -#ifdef HAVE_TRACING - if (TRACE_is_enabled()) { - action->src_name = xbt_strdup(src_name); - action->dst_name = xbt_strdup(dst_name); - } else { - action->src_name = action->dst_name = NULL; - } -#endif xbt_dynar_free(&route); XBT_OUT(); @@ -1121,7 +1102,7 @@ static void surf_network_model_init_internal(void) xbt_heap_set_update_callback(net_action_heap, net_action_update_index_heap); net_modified_set = - xbt_swag_new(xbt_swag_offset(comm, action_list_hookup)); + xbt_swag_new(xbt_swag_offset(comm, generic_lmm_action.action_list_hookup)); network_maxmin_system->keep_track = net_modified_set; } }