X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/16617733636d3dd60be16310b6bc33de7b38b9f8..94f980dcb3d25cdf2f85dd9d811de906d2f49eb8:/src/surf/network.c diff --git a/src/surf/network.c b/src/surf/network.c index 2eee39ca3d..c959b37d8b 100644 --- a/src/surf/network.c +++ b/src/surf/network.c @@ -6,7 +6,7 @@ * highly dependent on the maxmin lmm module. */ -/* Copyright (c) 2009, 2010, 2011. The SimGrid Team. +/* Copyright (c) 2004-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -81,7 +81,8 @@ static double constant_bandwidth_constraint(double rate, double bound, static int factor_cmp(const void *pa, const void *pb) { - return (((s_smpi_factor_t*)pa)->factor > ((s_smpi_factor_t*)pb)->factor); + return (((s_smpi_factor_t*)pa)->factor > ((s_smpi_factor_t*)pb)->factor) ? 1 : + (((s_smpi_factor_t*)pa)->factor < ((s_smpi_factor_t*)pb)->factor) ? -1 : 0; } @@ -126,12 +127,12 @@ static double smpi_bandwidth_factor(double size) double current=1.0; xbt_dynar_foreach(smpi_bw_factor, iter, fact) { if (size <= fact.factor) { - XBT_DEBUG("%lf <= %ld return %f", size, fact.factor, current); + XBT_DEBUG("%f <= %ld return %f", size, fact.factor, current); return current; }else current=fact.value; } - XBT_DEBUG("%lf > %ld return %f", size, fact.factor, current); + XBT_DEBUG("%f > %ld return %f", size, fact.factor, current); return current; } @@ -147,12 +148,12 @@ static double smpi_latency_factor(double size) double current=1.0; xbt_dynar_foreach(smpi_lat_factor, iter, fact) { if (size <= fact.factor) { - XBT_DEBUG("%lf <= %ld return %f", size, fact.factor, current); + XBT_DEBUG("%f <= %ld return %f", size, fact.factor, current); return current; }else current=fact.value; } - XBT_DEBUG("%lf > %ld return %f", size, fact.factor, current); + XBT_DEBUG("%f > %ld return %f", size, fact.factor, current); return current; } @@ -325,18 +326,18 @@ int net_get_link_latency_limited(surf_action_t action) } #endif -static double net_share_resources_full(double now) +static double net_share_resources_full(surf_model_t network_model, double now) { s_surf_action_lmm_t s_action; surf_action_network_CM02_t action = NULL; xbt_swag_t running_actions = - surf_network_model->states.running_action_set; + network_model->states.running_action_set; double min; min = generic_maxmin_share_resources(running_actions, xbt_swag_offset(s_action, variable), - surf_network_model->model_private->maxmin_system, + network_model->model_private->maxmin_system, network_solve); #define VARIABLE(action) (*((lmm_variable_t*)(((char *) (action)) + xbt_swag_offset(s_action, variable) ))) @@ -359,19 +360,19 @@ static double net_share_resources_full(double now) return min; } -static double net_share_resources_lazy(double now) +static double net_share_resources_lazy(surf_model_t network_model, double now) { - return generic_share_resources_lazy(now, surf_network_model); + return generic_share_resources_lazy(now, network_model); } -static void net_update_actions_state_full(double now, double delta) +static void net_update_actions_state_full(surf_model_t network_model, double now, double delta) { - generic_update_actions_state_full(now, delta, surf_network_model); + generic_update_actions_state_full(now, delta, network_model); } -static void net_update_actions_state_lazy(double now, double delta) +static void net_update_actions_state_lazy(surf_model_t network_model, double now, double delta) { - generic_update_actions_state_lazy(now, delta, surf_network_model); + generic_update_actions_state_lazy(now, delta, network_model); } static void net_update_resource_state(void *id, @@ -379,8 +380,8 @@ static void net_update_resource_state(void *id, double value, double date) { link_CM02_t nw_link = id; - /* printf("[" "%lg" "] Asking to update network card \"%s\" with value " */ - /* "%lg" " for event %p\n", surf_get_clock(), nw_link->name, */ + /* printf("[" "%g" "] Asking to update network card \"%s\" with value " */ + /* "%g" " for event %p\n", surf_get_clock(), nw_link->name, */ /* value, event_type); */ if (event_type == nw_link->lmm_resource.power.event) { @@ -652,18 +653,18 @@ static int net_link_shared(const void *link) lmm_constraint_is_shared(((surf_resource_lmm_t) link)->constraint); } -static void net_finalize(void) +static void net_finalize(surf_model_t network_model) { - lmm_system_free(surf_network_model->model_private->maxmin_system); - surf_network_model->model_private->maxmin_system = NULL; + lmm_system_free(network_model->model_private->maxmin_system); + network_model->model_private->maxmin_system = NULL; - if (surf_network_model->model_private->update_mechanism == UM_LAZY) { - xbt_heap_free(surf_network_model->model_private->action_heap); - xbt_swag_free(surf_network_model->model_private->modified_set); + if (network_model->model_private->update_mechanism == UM_LAZY) { + xbt_heap_free(network_model->model_private->action_heap); + xbt_swag_free(network_model->model_private->modified_set); } - surf_model_exit(surf_network_model); - surf_network_model = NULL; + surf_model_exit(network_model); + network_model = NULL; xbt_dict_free(&gap_lookup); xbt_dynar_free(&smpi_bw_factor); @@ -680,7 +681,7 @@ static void smpi_gap_append(double size, const link_CM02_t link, if (sg_sender_gap > 0.0) { if (!gap_lookup) { - gap_lookup = xbt_dict_new(); + gap_lookup = xbt_dict_new_homogeneous(NULL); } fifo = (xbt_fifo_t) xbt_dict_get_or_null(gap_lookup, src); action->sender.gap = 0.0; @@ -736,7 +737,7 @@ static void set_update_mechanism(void) { char *optim = xbt_cfg_get_string(_sg_cfg_set, "network/optim"); int select = - xbt_cfg_get_int(_sg_cfg_set, "network/maxmin_selective_update"); + xbt_cfg_get_boolean(_sg_cfg_set, "network/maxmin_selective_update"); if (!strcmp(optim, "Full")) { surf_network_model->model_private->update_mechanism = UM_FULL; @@ -762,6 +763,7 @@ static void surf_network_model_init_internal(void) set_update_mechanism(); surf_network_model->name = "network"; + surf_network_model->type = SURF_MODEL_TYPE_NETWORK; surf_network_model->action_unref = surf_action_unref; surf_network_model->action_cancel = surf_action_cancel; surf_network_model->action_recycle = net_action_recycle; @@ -795,7 +797,11 @@ static void surf_network_model_init_internal(void) surf_network_model->suspend = surf_action_suspend; surf_network_model->resume = surf_action_resume; surf_network_model->is_suspended = surf_action_is_suspended; - surf_cpu_model->set_max_duration = surf_action_set_max_duration; + + xbt_assert(surf_cpu_model_pm); + xbt_assert(surf_cpu_model_vm); + surf_cpu_model_pm->set_max_duration = surf_action_set_max_duration; + surf_cpu_model_vm->set_max_duration = surf_action_set_max_duration; surf_network_model->extension.network.communicate = net_communicate; surf_network_model->extension.network.get_route = net_get_route;