-/* Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009, 2010. The SimGrid Team.
+/* Copyright (c) 2004-2011. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
#include "xbt/str.h"
#include "surf/surfxml_parse_values.h"
+#include "surf/surf_resource.h"
+#include "surf/surf_resource_lmm.h"
+
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network, surf,
"Logging specific to the SURF network module");
if(size == 0) {
xbt_fifo_free(fifo);
xbt_dict_remove(gap_lookup, action->sender.link_name);
- size = xbt_dict_size(gap_lookup);
+ size = xbt_dict_length(gap_lookup);
if(size == 0) {
xbt_dict_free(&gap_lookup);
}
{
XBT_DEBUG("link_CM02");
- if(link->policy == SURF_LINK_FULLDUPLEX)
- {
- 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);
- 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
- {
- 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);
+ if (link->policy == SURF_LINK_FULLDUPLEX) {
+ char *link_id;
+ link_id = bprintf("%s_UP", link->id);
+ net_create_resource(link_id,
+ link->bandwidth,
+ link->bandwidth_trace,
+ link->latency,
+ link->latency_trace,
+ link->state,
+ link->state_trace,
+ link->policy,
+ link->properties);
+ xbt_free(link_id);
+ link_id = bprintf("%s_DOWN", link->id);
+ net_create_resource(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 */
+ xbt_free(link_id);
+ } else {
+ net_create_resource(link->id,
+ link->bandwidth,
+ link->bandwidth_trace,
+ link->latency,
+ link->latency_trace,
+ link->state,
+ link->state_trace,
+ link->policy,
+ link->properties);
}
-
}
static void net_add_traces(void)
#ifdef HAVE_TRACING
xbt_free(((surf_action_network_CM02_t) action)->src_name);
xbt_free(((surf_action_network_CM02_t) action)->dst_name);
- if (action->category)
- xbt_free(action->category);
+ xbt_free(action->category);
#endif
surf_action_free(&action);
return 1;
}
#ifdef HAVE_TRACING
if (TRACE_is_enabled()) {
- xbt_dynar_t route = global_routing->get_route(action->src_name,
- action->dst_name);
+ xbt_dynar_t route=NULL;
+ routing_get_route_and_latency(action->src_name, action->dst_name,&route,NULL);
link_CM02_t link;
unsigned int i;
xbt_dynar_foreach(route, i, link) {
xbt_dynar_t back_route = NULL;
int constraints_per_variable = 0;
- xbt_dynar_t route;
- // I will need this route for some time so require for no cleanup
- global_routing->get_route_latency(src_name, dst_name, &route, &latency, 0);
+ xbt_dynar_t route = xbt_dynar_new(sizeof(void*),NULL);
+ // I need to have the forward and backward routes at the same time, so allocate "route". That way, the routing wont clean it up
+ routing_get_route_and_latency(src_name, dst_name, &route, &latency);
if (sg_network_fullduplex == 1) {
- back_route = global_routing->get_route(dst_name, src_name);
+ // FIXME: fill route directly
+ routing_get_route_and_latency(dst_name, src_name, &back_route,NULL);
}
/* LARGE PLATFORMS HACK:
XBT_IN("(%s,%s,%g,%g)", src_name, dst_name, size, rate);
/* LARGE PLATFORMS HACK:
assert on total_route_size */
- xbt_assert(xbt_dynar_length(route) || latency,
+ xbt_assert(!xbt_dynar_is_empty(route) || latency,
"You're trying to send data from %s to %s but there is no connection at all between these two hosts.",
src_name, dst_name);
(link->lmm_resource.power.peak * link->lmm_resource.power.scale);
if (bandwidth_bound < 0.0)
bandwidth_bound =
- (*bandwidth_factor_callback) (size) *
+ bandwidth_factor_callback(size) *
(link->lmm_resource.power.peak * link->lmm_resource.power.scale);
else
bandwidth_bound =
min(bandwidth_bound,
- (*bandwidth_factor_callback) (size) *
+ bandwidth_factor_callback(size) *
(link->lmm_resource.power.peak *
link->lmm_resource.power.scale));
}
/* LARGE PLATFORMS HACK:
Add src->link and dst->link latencies */
action->lat_current = action->latency;
- action->latency *= (*latency_factor_callback) (size);
+ action->latency *= latency_factor_callback(size);
action->rate =
- (*bandwidth_constraint_callback) (action->rate, bandwidth_bound,
+ bandwidth_constraint_callback(action->rate, bandwidth_bound,
size);
- if(xbt_dynar_length(route) > 0) {
+ if(!xbt_dynar_is_empty(route)) {
link = *(link_CM02_t*)xbt_dynar_get_ptr(route, 0);
gap_append(size, link, action);
XBT_DEBUG("Comm %p: %s -> %s gap=%f (lat=%f)",
static xbt_dynar_t net_get_route(const char *src, const char *dst)
{
- return global_routing->get_route(src, dst);
+ xbt_dynar_t route=NULL;
+ routing_get_route_and_latency(src, dst,&route, NULL);
+ return route;
}
static double net_get_link_bandwidth(const void *link)
surf_model_exit(surf_network_model);
surf_network_model = NULL;
- global_routing->finalize();
-
lmm_system_free(network_maxmin_system);
network_maxmin_system = NULL;
}
network_maxmin_system = lmm_system_new();
routing_model_create(sizeof(link_CM02_t),
- net_create_resource(xbt_strdup("__loopback__"),
- 498000000, NULL, 0.000015, NULL,
- SURF_RESOURCE_ON, NULL,
- SURF_LINK_FATPIPE, NULL),
- net_get_link_latency);
+ net_create_resource("__loopback__",
+ 498000000, NULL,
+ 0.000015, NULL,
+ SURF_RESOURCE_ON, NULL,
+ SURF_LINK_FATPIPE, NULL));
}
xbt_cfg_setdefault_double(_surf_cfg_set, "network/sender_gap", 10e-6);
xbt_cfg_setdefault_double(_surf_cfg_set, "network/weight_S", 8775);
- update_model_description(surf_network_model_description,
- "SMPI", surf_network_model);
}
/************************************************************************/
0.92);
xbt_cfg_setdefault_double(_surf_cfg_set, "network/weight_S", 8775);
- update_model_description(surf_network_model_description,
- "LV08_fullupdate", surf_network_model);
}
/***************************************************************************/
net_define_callbacks();
xbt_dynar_push(model_list, &surf_network_model);
network_solve = lmm_solve;
-
- update_model_description(surf_network_model_description,
- "CM02", surf_network_model);
}
void surf_network_model_init_Reno(void)
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,
- "Reno", surf_network_model);
}
0.92);
xbt_cfg_setdefault_double(_surf_cfg_set, "network/weight_S_parameter",
8775);
-
- update_model_description(surf_network_model_description,
- "Reno2", surf_network_model);
}
void surf_network_model_init_Vegas(void)
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,
- "Vegas", surf_network_model);
}