A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
[simgrid.git]
/
src
/
surf
/
surf_routing.c
diff --git
a/src/surf/surf_routing.c
b/src/surf/surf_routing.c
index
634b3c7
..
935b858
100644
(file)
--- a/
src/surf/surf_routing.c
+++ b/
src/surf/surf_routing.c
@@
-91,60
+91,14
@@
struct s_model_type routing_models[] = { {"Full",
{"none", "No routing (usable with Constant network only)",
model_none_create, model_none_load, model_none_unload, model_none_end},
{"RuleBased", "Rule-Based routing data (...)", model_rulebased_create,
- model_
rulebased_load, model_rulebased_unload, model_rulebased
_end},
-{"Vivaldi", "Vivaldi routing", model_
rulebased
_create,
- model_
rulebased_load, model_rulebased_unload, model_rulebased
_end},
+ model_
none_load, model_none_unload, model_none
_end},
+{"Vivaldi", "Vivaldi routing", model_
vivaldi
_create,
+ model_
none_load, model_none_unload, model_none
_end},
{"Cluster", "Cluster routing", model_cluster_create,
- model_
rulebased_load, model_rulebased_unload, model_rulebased
_end},
+ model_
none_load, model_none_unload, model_none
_end},
{NULL, NULL, NULL, NULL, NULL, NULL}
};
-static double euclidean_dist_comp(int index, xbt_dynar_t src, xbt_dynar_t dst)
-{
- double src_coord, dst_coord;
-
- src_coord = atof(xbt_dynar_get_as(src, index, char *));
- dst_coord = atof(xbt_dynar_get_as(dst, index, char *));
-
- return (src_coord-dst_coord)*(src_coord-dst_coord);
-
-}
-
-static double base_vivaldi_get_latency (const char *src, const char *dst)
-{
- double euclidean_dist;
- xbt_dynar_t src_ctn, dst_ctn;
- src_ctn = xbt_lib_get_or_null(host_lib, src, COORD_HOST_LEVEL);
- if(!src_ctn) src_ctn = xbt_lib_get_or_null(as_router_lib, src, COORD_ASR_LEVEL);
- dst_ctn = xbt_lib_get_or_null(host_lib, dst, COORD_HOST_LEVEL);
- if(!dst_ctn) dst_ctn = xbt_lib_get_or_null(as_router_lib, dst, COORD_ASR_LEVEL);
-
- if(dst_ctn == NULL || src_ctn == NULL)
- xbt_die("Coord src '%s' :%p dst '%s' :%p",src,src_ctn,dst,dst_ctn);
-
- euclidean_dist = sqrt (euclidean_dist_comp(0,src_ctn,dst_ctn)+euclidean_dist_comp(1,src_ctn,dst_ctn))
- + fabs(atof(xbt_dynar_get_as(src_ctn, 2, char *)))+fabs(atof(xbt_dynar_get_as(dst_ctn, 2, char *)));
-
- xbt_assert(euclidean_dist>=0, "Euclidean Dist is less than 0\"%s\" and \"%.2f\"", src, euclidean_dist);
-
- //From .ms to .s
- return euclidean_dist / 1000;
-}
-
-static double vivaldi_get_link_latency (routing_component_t rc,const char *src, const char *dst, route_extended_t e_route)
-{
- if(get_network_element_type(src) == SURF_NETWORK_ELEMENT_AS) {
- int need_to_clean = e_route?0:1;
- double latency;
- e_route = e_route?e_route:(*(rc->get_route)) (rc, src, dst);
- latency = base_vivaldi_get_latency(e_route->src_gateway,e_route->dst_gateway);
- if(need_to_clean) generic_free_extended_route(e_route);
- return latency;
- } else {
- return base_vivaldi_get_latency(src,dst);
- }
-}
-
/**
* \brief Add a "host" to the network element list
*/
@@
-172,83
+126,52
@@
static void parse_S_host(const char *host_id, const char* coord)
}
}
-static void parse_E_host(void)
-{
- xbt_dict_cursor_t cursor = NULL;
- char *key;
- char *elem;
-
- xbt_dict_foreach(current_property_set, cursor, key, elem) {
- XBT_DEBUG("property : %s = %s",key,elem);
- }
-}
-
/*
* \brief Add a host to the network element list from XML
*/
-static void parse_S_host_XML(s
urf_parsing_host_
arg_t h)
+static void parse_S_host_XML(s
g_platf_host_cb
arg_t h)
{
parse_S_host(h->V_host_id, h->V_host_coord);
}
-static void parse_E_host_XML(void)
-{
- parse_E_host();
-}
-
-/*
- * \brief Add a host to the network element list from lua script
- */
-static void parse_S_host_lua(const char *host_id, const char *coord)
-{
- parse_S_host(host_id, coord);
-}
-
/**
* \brief Add a "router" to the network element list
*/
-static void parse_S_router(
void
)
+static void parse_S_router(
sg_platf_router_cbarg_t router
)
{
network_element_info_t info = NULL;
if (current_routing->hierarchy == SURF_ROUTING_NULL)
current_routing->hierarchy = SURF_ROUTING_BASE;
- xbt_assert(!xbt_lib_get_or_null(as_router_lib,
struct_
router->V_router_id, ROUTING_ASR_LEVEL),
+ xbt_assert(!xbt_lib_get_or_null(as_router_lib,router->V_router_id, ROUTING_ASR_LEVEL),
"Reading a router, processing unit \"%s\" already exists",
-
struct_
router->V_router_id);
+ router->V_router_id);
xbt_assert(current_routing->set_processing_unit,
"no defined method \"set_processing_unit\" in \"%s\"",
current_routing->name);
(*(current_routing->set_processing_unit)) (current_routing,
-
struct_
router->V_router_id);
+ router->V_router_id);
info = xbt_new0(s_network_element_info_t, 1);
info->rc_component = current_routing;
info->rc_type = SURF_NETWORK_ELEMENT_ROUTER;
- xbt_lib_set(as_router_lib,
struct_
router->V_router_id,ROUTING_ASR_LEVEL,(void *) info);
+ xbt_lib_set(as_router_lib,router->V_router_id,ROUTING_ASR_LEVEL,(void *) info);
if (strcmp(A_surfxml_router_coordinates,"")) {
if(!COORD_ASR_LEVEL) xbt_die("To use coordinates, you must set configuration 'coordinates' to 'yes'");
xbt_dynar_t ctn = xbt_str_split_str(A_surfxml_router_coordinates, " ");
xbt_dynar_shrink(ctn, 0);
- xbt_lib_set(as_router_lib,
struct_
router->V_router_id,COORD_ASR_LEVEL,(void *) ctn);
+ xbt_lib_set(as_router_lib,router->V_router_id,COORD_ASR_LEVEL,(void *) ctn);
}
}
/**
* brief Add a "router" to the network element list from XML description
*/
-static void parse_S_router_XML(void)
-{
- return parse_S_router();
-}
-
-/**
- * brief Add a "router" to the network element list from XML description
- */
-static void parse_S_router_lua(const char* router_id)
-{
- struct_router->V_router_id = xbt_strdup(router_id);
- struct_router->V_router_coord = xbt_strdup("");
- return parse_S_router();
+static void parse_S_router_lua(const char* router_id) {
+ s_sg_platf_router_cbarg_t router;
+ memset(&router,0,sizeof(router));
+ router.V_router_id = router_id;
+ router.V_router_coord = "";
+ return parse_S_router(&router);
}
/**
@@
-460,10
+383,6
@@
void sg_platf_new_AS_open(const char *AS_id, const char *wanted_routing_type)
new_routing->name = xbt_strdup(AS_id);
new_routing->routing_sons = xbt_dict_new();
- /* Hack for Vivaldi */
- if(!strcmp(model->name,"Vivaldi"))
- new_routing->get_latency = vivaldi_get_link_latency;
-
if (current_routing == NULL && global_routing->root == NULL) {
/* it is the first one */
@@
-967,9
+886,8
@@
void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_
current_routing = NULL;
/* parse generic elements */
- surf_parse_host_add_cb(parse_S_host_XML);
- surfxml_add_callback(ETag_surfxml_host_cb_list, &parse_E_host_XML);
- surfxml_add_callback(STag_surfxml_router_cb_list, &parse_S_router_XML);
+ sg_platf_host_add_cb(parse_S_host_XML);
+ sg_platf_router_add_cb(parse_S_router);
surfxml_add_callback(STag_surfxml_route_cb_list,
&parse_S_route_new_and_endpoints_XML);
@@
-1469,103
+1387,6
@@
void generic_src_dst_check(routing_component_t rc, const char *src,
src,dst,src_as->name, dst_as->name,rc->name);
}
-
-static void parse_create_host_link(int i)
-{
- char *host_id, *link_id = NULL;
- s_surf_parsing_host_arg_t host;
- memset(&host,0,sizeof(host));
-
- host_id = bprintf("%s%d%s", struct_cluster->V_cluster_prefix, i, struct_cluster->V_cluster_suffix);
- link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, i);
-
- A_surfxml_host_state = A_surfxml_host_state_ON;
-
- XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\">", host_id, struct_cluster->S_cluster_power);
- host.V_host_id = xbt_strdup(host_id);
- if(strcmp(struct_cluster->V_cluster_availability_file,"")){
- xbt_dict_set(patterns, "radical", bprintf("%d", i), xbt_free);
- char* tmp_availability_file = xbt_strdup(struct_cluster->V_cluster_availability_file);
- xbt_str_varsubst(tmp_availability_file,patterns);
- XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file);
- host.V_host_power_trace = tmgr_trace_new(tmp_availability_file);
- xbt_free(tmp_availability_file);
- }
- else
- {
- XBT_DEBUG("\tavailability_file=\"\"");
- }
- if(strcmp(struct_cluster->V_cluster_state_file,"")){
- char *tmp_state_file = xbt_strdup(struct_cluster->V_cluster_state_file);
- xbt_str_varsubst(tmp_state_file,patterns);
- XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file);
- host.V_host_state_trace = tmgr_trace_new(tmp_state_file);
- xbt_free(tmp_state_file);
- }
- else
- {
- XBT_DEBUG("\tstate_file=\"\"");
- }
-
- host.V_host_power_peak = struct_cluster->S_cluster_power;
- host.V_host_power_scale = 1.0;
- host.V_host_core = struct_cluster->S_cluster_core;
- host.V_host_state_initial = SURF_RESOURCE_ON;
- host.V_host_coord = "";
- surf_parse_host(&host);
- XBT_DEBUG("</host>");
-
- A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
- if(AX_surfxml_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
- {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;}
- if(AX_surfxml_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE)
- {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;}
-
- XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat);
-
- struct_lnk = xbt_new0(s_surf_parsing_link_arg_t, 1);
- struct_lnk->V_link_id = xbt_strdup(link_id);
- struct_lnk->V_link_bandwidth = struct_cluster->S_cluster_bw;
- struct_lnk->V_link_latency = struct_cluster->S_cluster_lat;
- struct_lnk->V_link_bandwidth_file = NULL;
- struct_lnk->V_link_latency_file = NULL;
- struct_lnk->V_link_state_file = NULL;
- struct_lnk->V_link_state = SURF_RESOURCE_ON;
- struct_lnk->V_link_sharing_policy = A_surfxml_link_sharing_policy;
-
- if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_SHARED)
- struct_lnk->V_policy_initial_link = SURF_LINK_SHARED;
- else
- {
- if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FATPIPE)
- struct_lnk->V_policy_initial_link = SURF_LINK_FATPIPE;
- else if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX)
- struct_lnk->V_policy_initial_link = SURF_LINK_FULLDUPLEX;
- }
- surf_parse_link();
-
- ETag_surfxml_host();
- ETag_surfxml_link();
-
- surf_parsing_link_up_down_t info = xbt_new0(s_surf_parsing_link_up_down_t, 1);
-
- if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX){
- char* tmp_link = bprintf("%s_UP",link_id);
- info->link_up = xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL);
- free(tmp_link);
- tmp_link = bprintf("%s_DOWN",link_id);
- info->link_down = xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL);
- free(tmp_link);
- }
- else{
- info->link_up = xbt_lib_get_or_null(link_lib, link_id, SURF_LINK_LEVEL);
- info->link_down = info->link_up;
- }
- xbt_dict_set(cluster_host_link,host_id,info,xbt_free);
- xbt_free(link_id);
- xbt_free(host_id);
-}
-
void routing_parse_Scluster(void)
{
if(!cluster_host_link)
@@
-1574,7
+1395,7
@@
void routing_parse_Scluster(void)
static int AX_ptr = 0;
char *host_id, *groups, *link_id = NULL;
- s_s
urf_parsing_host_
arg_t host;
+ s_s
g_platf_host_cb
arg_t host;
if( strcmp(struct_cluster->V_cluster_availability_file,"")
|| strcmp(struct_cluster->V_cluster_state_file,"") )
@@
-1645,7
+1466,7
@@
void routing_parse_Scluster(void)
host.V_host_core = struct_cluster->S_cluster_core;
host.V_host_state_initial = SURF_RESOURCE_ON;
host.V_host_coord = "";
- s
urf_parse
_host(&host);
+ s
g_platf_new
_host(&host);
XBT_DEBUG("</host>");
A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
@@
-1677,11
+1498,25
@@
void routing_parse_Scluster(void)
}
surf_parse_link();
- xbt_dict_set(cluster_host_link,host_id,strdup(link_id),free);
-// XBT_INFO("key '%s' Value '%s'",host_id,link_id);
- ETag_surfxml_host();
ETag_surfxml_link();
+ surf_parsing_link_up_down_t info = xbt_new0(s_surf_parsing_link_up_down_t, 1);
+ if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX){
+ char* tmp_link = bprintf("%s_UP",link_id);
+ info->link_up = xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL);
+ free(tmp_link);
+ tmp_link = bprintf("%s_DOWN",link_id);
+ info->link_down = xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL);
+ free(tmp_link);
+ }
+ else{
+ info->link_up = xbt_lib_get_or_null(link_lib, link_id, SURF_LINK_LEVEL);
+ info->link_down = info->link_up;
+ }
+ xbt_dict_set(cluster_host_link,host_id,info,xbt_free);
+ xbt_free(link_id);
+ xbt_free(host_id);
+
break;
case 2:
@@
-1725,7
+1560,7
@@
void routing_parse_Scluster(void)
host.V_host_core = struct_cluster->S_cluster_core;
host.V_host_state_initial = SURF_RESOURCE_ON;
host.V_host_coord = "";
- s
urf_parse
_host(&host);
+ s
g_platf_new
_host(&host);
XBT_DEBUG("</host>");
A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
@@
-1757,12
+1592,25
@@
void routing_parse_Scluster(void)
}
surf_parse_link();
- xbt_dict_set(cluster_host_link,host_id,strdup(link_id),free);
-// XBT_INFO("key '%s' Value '%s'",host_id,link_id);
-
- ETag_surfxml_host();
ETag_surfxml_link();
+ surf_parsing_link_up_down_t info = xbt_new0(s_surf_parsing_link_up_down_t, 1);
+ if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX){
+ char* tmp_link = bprintf("%s_UP",link_id);
+ info->link_up = xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL);
+ free(tmp_link);
+ tmp_link = bprintf("%s_DOWN",link_id);
+ info->link_down = xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL);
+ free(tmp_link);
+ }
+ else{
+ info->link_up = xbt_lib_get_or_null(link_lib, link_id, SURF_LINK_LEVEL);
+ info->link_down = info->link_up;
+ }
+ xbt_dict_set(cluster_host_link,host_id,info,xbt_free);
+ xbt_free(link_id);
+ xbt_free(host_id);
+
}
break;
@@
-1793,7
+1641,7
@@
void routing_parse_Scluster(void)
{A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;}
struct_lnk = xbt_new0(s_surf_parsing_link_arg_t, 1);
- struct_lnk->V_link_id =
xbt_strdup(link_backbone)
;
+ struct_lnk->V_link_id =
link_backbone
;
struct_lnk->V_link_bandwidth = struct_cluster->S_cluster_bb_bw;
struct_lnk->V_link_latency = struct_cluster->S_cluster_bb_lat;
struct_lnk->V_link_bandwidth_file = NULL;
@@
-1894,10
+1742,10
@@
static void routing_parse_Speer(void)
SURFXML_START_TAG(AS);
XBT_DEBUG(" ");
- host_id =
bprintf("peer_%s",
struct_peer->V_peer_id);
- router_id =
bprintf("router_%s",
struct_peer->V_peer_id);
- link_id_up =
bprintf("link_%s_up",
struct_peer->V_peer_id);
- link_id_down =
bprintf("link_%s_down",
struct_peer->V_peer_id);
+ host_id =
HOST_PEER(
struct_peer->V_peer_id);
+ router_id =
ROUTER_PEER(
struct_peer->V_peer_id);
+ link_id_up =
LINK_UP_PEER(
struct_peer->V_peer_id);
+ link_id_down =
LINK_DOWN_PEER(
struct_peer->V_peer_id);
link_router = bprintf("%s_link_router", struct_peer->V_peer_id);
link_backbone = bprintf("%s_backbone", struct_peer->V_peer_id);
@@
-2124,7
+1972,7
@@
static void routing_parse_Erandom(void)
void routing_add_host(const char *host_id)
{
- parse_S_host
_lua((char *) host_id, (char*)
""); // FIXME propagate coordinate system to lua
+ parse_S_host
(host_id,
""); // FIXME propagate coordinate system to lua
}
/*