X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b6a7838d1e4d157188e8d4dc381a11d0035361fe..2dba2db9e7afc3db8eb181ae8f85e09a6399d1d5:/src/surf/network_im.c diff --git a/src/surf/network_im.c b/src/surf/network_im.c index a982bbb872..1e29a61b10 100644 --- a/src/surf/network_im.c +++ b/src/surf/network_im.c @@ -17,6 +17,8 @@ #include "surf_private.h" #include "xbt/dict.h" #include "maxmin_private.h" +#include "surf/surf_resource_lmm.h" + #undef GENERIC_ACTION #define GENERIC_ACTION(action) action->generic_action @@ -150,7 +152,7 @@ static double (*im_bandwidth_constraint_callback) (double, double, double) = &im_constant_bandwidth_constraint; -static void* im_net_create_resource(char *name, +static void* im_net_create_resource(const char *name, double bw_initial, tmgr_trace_t bw_trace, double lat_initial, @@ -188,59 +190,23 @@ static void* im_net_create_resource(char *name, return nw_link; } -static void im_net_parse_link_init(void) +static void im_net_parse_link_init(sg_platf_link_cbarg_t link) { - char *name_link; - double bw_initial; - tmgr_trace_t bw_trace; - double lat_initial; - tmgr_trace_t lat_trace; - e_surf_resource_state_t state_initial_link = SURF_RESOURCE_ON; - e_surf_link_sharing_policy_t policy_initial_link = SURF_LINK_SHARED; - tmgr_trace_t state_trace; - XBT_DEBUG("link_CM02_im"); - name_link = xbt_strdup(A_surfxml_link_id); - surf_parse_get_double(&bw_initial, A_surfxml_link_bandwidth); - bw_trace = tmgr_trace_new(A_surfxml_link_bandwidth_file); - surf_parse_get_double(&lat_initial, A_surfxml_link_latency); - lat_trace = tmgr_trace_new(A_surfxml_link_latency_file); - - xbt_assert((A_surfxml_link_state == A_surfxml_link_state_ON) - || (A_surfxml_link_state == - A_surfxml_link_state_OFF), "Invalid state"); - if (A_surfxml_link_state == A_surfxml_link_state_ON) - state_initial_link = SURF_RESOURCE_ON; - else if (A_surfxml_link_state == A_surfxml_link_state_OFF) - state_initial_link = SURF_RESOURCE_OFF; - - if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_SHARED) - policy_initial_link = SURF_LINK_SHARED; - else - { - if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FATPIPE) - policy_initial_link = SURF_LINK_FATPIPE; - else if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX) - policy_initial_link = SURF_LINK_FULLDUPLEX; - } - - state_trace = tmgr_trace_new(A_surfxml_link_state_file); - - if(policy_initial_link == SURF_LINK_FULLDUPLEX) + if(link->policy == SURF_LINK_FULLDUPLEX) { - im_net_create_resource(bprintf("%s_UP",name_link), bw_initial, bw_trace, - lat_initial, lat_trace, state_initial_link, state_trace, - policy_initial_link, xbt_dict_new()); - im_net_create_resource(bprintf("%s_DOWN",name_link), bw_initial, bw_trace, - lat_initial, lat_trace, state_initial_link, state_trace, - policy_initial_link, xbt_dict_new()); + im_net_create_resource(bprintf("%s_UP",link->id), link->bandwidth, link->bandwidth_trace, + link->latency, link->latency_trace, link->state, link->state_trace, + link->policy, link->properties); + im_net_create_resource(bprintf("%s_DOWN",link->id), link->bandwidth, link->bandwidth_trace, + link->latency, link->latency_trace, link->state, link->state_trace, + link->policy, NULL); // FIXME: We need to deep copy the properties or we won't be able to free it } else { - im_net_create_resource(name_link, bw_initial, bw_trace, - lat_initial, lat_trace, state_initial_link, state_trace, - policy_initial_link, xbt_dict_new()); + im_net_create_resource(xbt_strdup(link->id), link->bandwidth, link->bandwidth_trace, + link->latency, link->latency_trace, link->state, link->state_trace, + link->policy, link->properties); } - } static void im_net_add_traces(void) @@ -299,11 +265,11 @@ static void im_net_add_traces(void) } } -static void im_net_define_callbacks(const char *file) +static void im_net_define_callbacks(void) { /* Figuring out the network links */ - surfxml_add_callback(STag_surfxml_link_cb_list, &im_net_parse_link_init); - surfxml_add_callback(ETag_surfxml_platform_cb_list, &im_net_add_traces); + sg_platf_link_add_cb(im_net_parse_link_init); + sg_platf_postparse_add_cb(im_net_add_traces); } static int im_net_resource_used(void *resource_id) @@ -329,8 +295,7 @@ static int im_net_action_unref(surf_action_t action) #ifdef HAVE_TRACING xbt_free(((surf_action_network_CM02_im_t) action)->src_name); xbt_free(((surf_action_network_CM02_im_t) action)->dst_name); - if (action->category) - xbt_free(action->category); + xbt_free(action->category); #endif surf_action_free(&action); return 1; @@ -413,7 +378,9 @@ static double im_net_share_resources(double now) XBT_DEBUG("Before share resources, the size of modified actions set is %d", xbt_swag_size(im_net_modified_set)); update_action_remaining(now); + keep_track = im_net_modified_set; lmm_solve(network_im_maxmin_system); + keep_track = NULL; XBT_DEBUG("After share resources, The size of modified actions set is %d", xbt_swag_size(im_net_modified_set)); @@ -906,11 +873,9 @@ static void im_surf_network_model_init_internal(void) im_net_create_resource(xbt_strdup("__loopback__"), 498000000, NULL, 0.000015, NULL, SURF_RESOURCE_ON, NULL, - SURF_LINK_FATPIPE, NULL), - im_net_get_link_latency); + SURF_LINK_FATPIPE, NULL)); im_net_modified_set = xbt_swag_new(xbt_swag_offset(comm, action_list_hookup)); - keep_track = im_net_modified_set; } @@ -918,13 +883,13 @@ static void im_surf_network_model_init_internal(void) /************************************************************************/ /* New model based on optimizations discussed during this thesis */ /************************************************************************/ -void im_surf_network_model_init_LegrandVelho(const char *filename) +void im_surf_network_model_init_LegrandVelho(void) { if (surf_network_model) return; im_surf_network_model_init_internal(); - im_net_define_callbacks(filename); + im_net_define_callbacks(); xbt_dynar_push(model_list, &surf_network_model); network_im_solve = lmm_solve; @@ -932,9 +897,6 @@ void im_surf_network_model_init_LegrandVelho(const char *filename) xbt_cfg_setdefault_double(_surf_cfg_set, "network/bandwidth_factor", 0.92); xbt_cfg_setdefault_double(_surf_cfg_set, "network/weight_S", 8775); - - update_model_description(surf_network_model_description, - "LV08", surf_network_model); }