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
placing instrumentation of network utilization on better place
[simgrid.git]
/
src
/
surf
/
network_gtnets.c
diff --git
a/src/surf/network_gtnets.c
b/src/surf/network_gtnets.c
index
11e6089
..
a1a8847
100644
(file)
--- a/
src/surf/network_gtnets.c
+++ b/
src/surf/network_gtnets.c
@@
-21,29
+21,47
@@
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;
if (xbt_dict_get_or_null(surf_network_model->resource_set, name)) {
return;
}
- link_count++;
+#ifdef HAVE_TRACING
+ TRACE_surf_link_declaration (name, bw, lat);
+#endif
- if (gtnets_add_link(link_count, bw, lat)) {
- xbt_assert0(0, "Cannot create GTNetS link");
- }
+ 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_friend = (char *)calloc(strlen(name), sizeof(char));
+ sprintf(name_friend, "%d_%d", tmp_iddst, tmp_idsrc);
- /* 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
+
+ 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);
+ surf_resource_free);
}
static void route_new(int src_id, int dst_id, xbt_dynar_t links,int nb_link)
@@
-122,6
+140,7
@@
static void create_gtnets_topology()
xbt_dict_foreach(onelink_routes, cursor, key, data){
s_onelink_t link = (s_onelink_t) data;
+
DEBUG3("Link (#%d), src (#%d), dst (#%d)", ((network_link_GTNETS_t)(link->link_ptr))->id , link->src_id, link->dst_id);
DEBUG0("Calling one link route");
if(used_routing->is_router(link->src_id)){
@@
-233,9
+252,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);
@@
-244,19
+268,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);
@@
-337,11
+360,6
@@
static int action_is_suspended(surf_action_t action)
static void finalize(void)
{
- xbt_dict_free(&surf_network_model->resource_set);
-
- surf_model_exit(surf_network_model);
- surf_network_model = NULL;
-
gtnets_finalize();
}
@@
-371,13
+389,17
@@
static void surf_network_model_init_internal(void)
surf_network_model->extension.network.communicate = communicate;
/* Added the initialization for GTNetS interface */
- if (gtnets_initialize()) {
+ if (gtnets_initialize(
sg_tcp_gamma
)) {
xbt_assert0(0, "Impossible to initialize GTNetS interface");
}
routing_model_create(sizeof(network_link_GTNETS_t), NULL);
}
+static int get_latency_limited(surf_action_t action){
+ return 0;
+}
+
#ifdef HAVE_GTNETS
void surf_network_model_init_GTNETS(const char *filename)
{
@@
-387,6
+409,8
@@
void surf_network_model_init_GTNETS(const char *filename)
define_callbacks(filename);
xbt_dynar_push(model_list, &surf_network_model);
+ surf_network_model->get_latency_limited = get_latency_limited;
+
if(sg_gtnets_jitter > 0.0){
gtnets_set_jitter(sg_gtnets_jitter);
gtnets_set_jitter_seed(sg_gtnets_jitter_seed);