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
manage links in a different way (to help tracing gtnets fullduplex behavior)
[simgrid.git]
/
src
/
surf
/
network_gtnets.c
diff --git
a/src/surf/network_gtnets.c
b/src/surf/network_gtnets.c
index
feaa165
..
0ee07bd
100644
(file)
--- a/
src/surf/network_gtnets.c
+++ b/
src/surf/network_gtnets.c
@@
-21,6
+21,7
@@
static void link_new(char *name, double bw, double lat, xbt_dict_t props)
{
static int link_count = -1;
network_link_GTNETS_t gtnets_link;
+ network_link_GTNETS_t gtnets_link_friend;
int tmp_idsrc=-1;
int tmp_iddst=-1;
char *name_friend;
@@
-30,53
+31,38
@@
static void link_new(char *name, double bw, double lat, xbt_dict_t props)
return;
}
+#ifdef HAVE_TRACING
+ TRACE_surf_link_declaration (name, bw, lat);
+#endif
+
DEBUG1("Scanning link name %s", name);
sscanf(name, "%d_%d", &tmp_idsrc, &tmp_iddst);
DEBUG2("Link name split into %d and %d", tmp_idsrc, tmp_iddst);
xbt_assert0( (tmp_idsrc!=-1)&&(tmp_idsrc!=-1), "You need to respect fullduplex convention x_y for xml link id.");
- name_normal = (char *)calloc(strlen(name), sizeof(char));
name_friend = (char *)calloc(strlen(name), sizeof(char));
+ sprintf(name_friend, "%d_%d", tmp_iddst, tmp_idsrc);
- if(tmp_idsrc < tmp_iddst){
- sprintf(name_normal, "%d_%d", tmp_idsrc, tmp_iddst);
- sprintf(name_friend, "%d_%d", tmp_iddst, tmp_idsrc);
- }else{
- sprintf(name_normal, "%d_%d", tmp_iddst, tmp_idsrc);
- sprintf(name_friend, "%d_%d", tmp_idsrc, tmp_iddst);
- }
-
- gtnets_link = xbt_dict_get_or_null(surf_network_model->resource_set, name_normal);
-
- if (gtnets_link) {
- DEBUG3("Link already added as friend normal=%s friend=%s (#%d)", name_normal, name_friend, ((network_link_GTNETS_t)gtnets_link)->id );
- return;
- }
-
- link_count++;
-
- DEBUG4("Adding new link, linkid %d, name %s, latency %g, bandwidth %g", link_count, name, lat, bw);
-
- if (gtnets_add_link(link_count, bw, lat)) {
- xbt_assert0(0, "Cannot create GTNetS link");
- }
-
- /* KF: Insert entry in the dictionary */
gtnets_link = xbt_new0(s_network_link_GTNETS_t, 1);
gtnets_link->generic_resource.name = name;
gtnets_link->generic_resource.properties = props;
gtnets_link->bw_current = bw;
gtnets_link->lat_current = lat;
- gtnets_link->id = link_count;
-#ifdef HAVE_TRACING
- TRACE_surf_link_declaration (name, bw, lat);
-#endif
- xbt_dict_set(surf_network_model->resource_set, name_normal, gtnets_link,
- surf_resource_free);
- xbt_dict_set(surf_network_model->resource_set, name_friend, gtnets_link,
- surf_resource_free);
+ if((gtnets_link_friend=xbt_dict_get_or_null(surf_network_model->resource_set, name_friend))) {
+ gtnets_link->id = gtnets_link_friend->id;
+ } else {
+ link_count++;
+
+ DEBUG4("Adding new link, linkid %d, name %s, latency %g, bandwidth %g", link_count, name, lat, bw);
+ if (gtnets_add_link(link_count, bw, lat)) {
+ xbt_assert0(0, "Cannot create GTNetS link");
+ }
+ gtnets_link->id = link_count;
+ }
+ xbt_dict_set(surf_network_model->resource_set, name, gtnets_link,
+ surf_resource_free);
}
static void route_new(int src_id, int dst_id, xbt_dynar_t links,int nb_link)
@@
-267,9
+253,14
@@
static void update_actions_state(double now, double delta)
xbt_swag_foreach(action, running_actions) {
DEBUG2("Action (%p) remains old value: %f", action,
action->generic_action.remains);
- double
remain
= gtnets_get_flow_rx(action);
+ double
sent
= gtnets_get_flow_rx(action);
#ifdef HAVE_TRACING
+ double trace_sent = sent;
+ if (trace_sent == 0){
+ //if sent is equals to 0, means that gtnets sent all the bytes
+ trace_sent = action->generic_action.cost;
+ }
// tracing resource utilization
int src = TRACE_surf_gtnets_get_src (action);
int dst = TRACE_surf_gtnets_get_dst (action);
@@
-278,19
+269,18
@@
static void update_actions_state(double now, double delta)
network_link_GTNETS_t link;
unsigned int i;
xbt_dynar_foreach(route, i, link) {
-
TRACE_surf_link_set_utilization (link->generic_resource.name,
- action->generic_action.data,
(action->generic_action.remains-remain)
/delta, now-delta, delta);
+ action->generic_action.data,
trace_sent
/delta, now-delta, delta);
}
}
#endif
- DEBUG1("
Remain value returned by GTNetS : %f", remain
);
+ DEBUG1("
Sent value returned by GTNetS : %f", sent
);
//need to trust this remain value
- if (
remain
== 0) {
+ if (
sent
== 0) {
action->generic_action.remains = 0;
} else {
- action->generic_action.remains = action->generic_action.cost -
remain
;
+ action->generic_action.remains = action->generic_action.cost -
sent
;
}
DEBUG2("Action (%p) remains new value: %f", action,
action->generic_action.remains);