static lmm_system_t network_maxmin_system = NULL;
static void (*network_solve) (lmm_system_t) = NULL;
-double latency_factor = 1.0; /* default value */
-double bandwidth_factor = 1.0; /* default value */
-double weight_S_parameter = 0.0; /* default value */
+double sg_latency_factor = 1.0; /* default value; can be set by model or from command line */
+double sg_bandwidth_factor = 1.0; /* default value; can be set by model or from command line */
+double sg_weight_S_parameter = 0.0;/* default value; can be set by model or from command line */
double sg_tcp_gamma = 0.0;
-static link_CM02_t link_new(char *name,
+static link_CM02_t net_link_new(char *name,
double bw_initial,
tmgr_trace_t bw_trace,
double lat_initial,
surf_resource_lmm_new(sizeof(s_link_CM02_t),
surf_network_model, name, properties,
network_maxmin_system,
- bandwidth_factor * bw_initial,
+ sg_bandwidth_factor * bw_initial,
history,
state_initial, state_trace,
bw_initial, bw_trace);
xbt_dict_set(surf_network_model->resource_set, name, nw_link,
surf_resource_free);
+#ifdef HAVE_TRACING
+ TRACE_surf_link_declaration (name, bw_initial, lat_initial);
+#endif
return nw_link;
}
-static void parse_link_init(void)
+static void net_parse_link_init(void)
{
char *name_link;
double bw_initial;
state_trace = tmgr_trace_new(A_surfxml_link_state_file);
- link_new(name_link, bw_initial, bw_trace,
+ net_link_new(name_link, bw_initial, bw_trace,
lat_initial, lat_trace, state_initial_link, state_trace,
policy_initial_link, xbt_dict_new());
}
-static void add_traces(void)
+static void net_add_traces(void)
{
xbt_dict_cursor_t cursor = NULL;
char *trace_name, *elm;
}
}
-static void define_callbacks(const char *file)
+static void net_define_callbacks(const char *file)
{
/* Figuring out the network links */
- surfxml_add_callback(STag_surfxml_link_cb_list, &parse_link_init);
- surfxml_add_callback(ETag_surfxml_platform_cb_list, &add_traces);
+ surfxml_add_callback(STag_surfxml_link_cb_list, &net_parse_link_init);
+ surfxml_add_callback(ETag_surfxml_platform_cb_list, &net_add_traces);
}
-static int resource_used(void *resource_id)
+static int net_resource_used(void *resource_id)
{
return lmm_constraint_used(network_maxmin_system,
((surf_resource_lmm_t) resource_id)->constraint);
}
-static int action_unref(surf_action_t action)
+static int net_action_unref(surf_action_t action)
{
action->refcount--;
if (!action->refcount) {
return 0;
}
-static void action_cancel(surf_action_t action)
+static void net_action_cancel(surf_action_t action)
{
+ surf_network_model->action_state_set((surf_action_t) action,
+ SURF_ACTION_FAILED);
return;
}
-static void action_recycle(surf_action_t action)
+static void net_action_recycle(surf_action_t action)
{
return;
}
-static double action_get_remains(surf_action_t action)
+static double net_action_get_remains(surf_action_t action)
{
return action->remains;
}
-static double share_resources(double now)
+static double net_share_resources(double now)
{
s_surf_action_network_CM02_t s_action;
surf_action_network_CM02_t action = NULL;
return min;
}
-static void update_actions_state(double now, double delta)
+static void net_update_actions_state(double now, double delta)
{
double deltap = 0.0;
surf_action_network_CM02_t action = NULL;
*/
xbt_swag_foreach_safe(action, next_action, running_actions) {
+
+#ifdef HAVE_TRACING
+ xbt_dynar_t route = used_routing->get_route(action->src, action->dst);
+ link_CM02_t link;
+ unsigned int i;
+ xbt_dynar_foreach(route, i, link) {
+ TRACE_surf_link_set_utilization (link->lmm_resource.generic_resource.name,
+ action->generic_action.data, lmm_variable_getvalue(action->variable), now-delta, delta);
+ }
+#endif
+
deltap = delta;
if (action->latency > 0) {
if (action->latency > deltap) {
return;
}
-static void update_resource_state(void *id,
+static void net_update_resource_state(void *id,
tmgr_trace_event_t event_type,
double value, double date)
{
if (event_type == nw_link->lmm_resource.power.event) {
double delta =
- weight_S_parameter / value - weight_S_parameter /
+ sg_weight_S_parameter / value - sg_weight_S_parameter /
(nw_link->lmm_resource.power.peak * nw_link->lmm_resource.power.scale);
lmm_variable_t var = NULL;
lmm_element_t elem = NULL;
nw_link->lmm_resource.power.peak = value;
lmm_update_constraint_bound(network_maxmin_system,
nw_link->lmm_resource.constraint,
- bandwidth_factor *
+ sg_bandwidth_factor *
(nw_link->lmm_resource.power.peak *
nw_link->lmm_resource.power.scale));
- if (weight_S_parameter > 0) {
+#ifdef HAVE_TRACING
+ TRACE_surf_link_set_bandwidth (date, nw_link->lmm_resource.generic_resource.name, sg_bandwidth_factor * (nw_link->lmm_resource.power.peak * nw_link->lmm_resource.power.scale));
+#endif
+ if (sg_weight_S_parameter > 0) {
while ((var = lmm_get_var_from_cnst
(network_maxmin_system, nw_link->lmm_resource.constraint,
&elem))) {
return;
}
-static surf_action_t communicate(const char *src_name, const char *dst_name,
+static surf_action_t net_communicate(const char *src_name, const char *dst_name,
int src, int dst, double size, double rate)
{
surf_action_network_CM02_t action = NULL;
action->latency += link->lat_current;
action->weight +=
link->lat_current +
- weight_S_parameter /
+ sg_weight_S_parameter /
(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;
+ action->latency *= sg_latency_factor;
/* LARGE PLATFORMS HACK:
lmm_variable_new(..., total_route_size) */
/* LARGE PLATFORMS HACK:
expand also with src->link and dst->link */
+ /* saving the src and dst of this communication */
+ action->src = src;
+ action->dst = dst;
+
XBT_OUT;
return (surf_action_t) action;
}
-static double get_link_bandwidth(const void *link)
+static double net_get_link_bandwidth(const void *link)
{
surf_resource_lmm_t lmm = (surf_resource_lmm_t) link;
return lmm->power.peak * lmm->power.scale;
}
-static double get_link_latency(const void *link)
+static double net_get_link_latency(const void *link)
{
return ((link_CM02_t) link)->lat_current;
}
-static int link_shared(const void *link)
+static int net_link_shared(const void *link)
{
return lmm_constraint_is_shared(((surf_resource_lmm_t) link)->constraint);
}
-static void action_suspend(surf_action_t action)
+static void net_action_suspend(surf_action_t action)
{
((surf_action_network_CM02_t) action)->suspended = 1;
lmm_update_variable_weight(network_maxmin_system,
0.0);
}
-static void action_resume(surf_action_t action)
+static void net_action_resume(surf_action_t action)
{
if (((surf_action_network_CM02_t) action)->suspended) {
lmm_update_variable_weight(network_maxmin_system,
}
}
-static int action_is_suspended(surf_action_t action)
+static int net_action_is_suspended(surf_action_t action)
{
return ((surf_action_network_CM02_t) action)->suspended;
}
-static void action_set_max_duration(surf_action_t action, double duration)
+static void net_action_set_max_duration(surf_action_t action, double duration)
{
action->max_duration = duration;
}
-static void finalize(void)
+static void net_finalize(void)
{
surf_model_exit(surf_network_model);
surf_network_model = NULL;
surf_network_model = surf_model_init();
surf_network_model->name = "network";
- surf_network_model->action_unref = action_unref;
- surf_network_model->action_cancel = action_cancel;
- surf_network_model->action_recycle = action_recycle;
- surf_network_model->get_remains = action_get_remains;
+ surf_network_model->action_unref = net_action_unref;
+ surf_network_model->action_cancel = net_action_cancel;
+ surf_network_model->action_recycle = net_action_recycle;
+ surf_network_model->get_remains = net_action_get_remains;
- surf_network_model->model_private->resource_used = resource_used;
- surf_network_model->model_private->share_resources = share_resources;
+ surf_network_model->model_private->resource_used = net_resource_used;
+ surf_network_model->model_private->share_resources = net_share_resources;
surf_network_model->model_private->update_actions_state =
- update_actions_state;
+ net_update_actions_state;
surf_network_model->model_private->update_resource_state =
- update_resource_state;
- surf_network_model->model_private->finalize = finalize;
+ net_update_resource_state;
+ surf_network_model->model_private->finalize = net_finalize;
- surf_network_model->suspend = action_suspend;
- surf_network_model->resume = action_resume;
- surf_network_model->is_suspended = action_is_suspended;
- surf_cpu_model->set_max_duration = action_set_max_duration;
+ surf_network_model->suspend = net_action_suspend;
+ surf_network_model->resume = net_action_resume;
+ surf_network_model->is_suspended = net_action_is_suspended;
+ surf_cpu_model->set_max_duration = net_action_set_max_duration;
- surf_network_model->extension.network.communicate = communicate;
+ surf_network_model->extension.network.communicate = net_communicate;
surf_network_model->extension.network.get_link_bandwidth =
- get_link_bandwidth;
- surf_network_model->extension.network.get_link_latency = get_link_latency;
- surf_network_model->extension.network.link_shared = link_shared;
+ net_get_link_bandwidth;
+ surf_network_model->extension.network.get_link_latency = net_get_link_latency;
+ surf_network_model->extension.network.link_shared = net_link_shared;
if (!network_maxmin_system)
network_maxmin_system = lmm_system_new();
routing_model_create(sizeof(link_CM02_t),
- link_new(xbt_strdup("__loopback__"),
+ net_link_new(xbt_strdup("__loopback__"),
498000000, NULL, 0.000015, NULL,
SURF_RESOURCE_ON, NULL, SURF_LINK_FATPIPE,
NULL));
if (surf_network_model)
return;
surf_network_model_init_internal();
- define_callbacks(filename);
+ net_define_callbacks(filename);
xbt_dynar_push(model_list, &surf_network_model);
network_solve = lmm_solve;
- latency_factor = 10.4;
- bandwidth_factor = 0.92;
- weight_S_parameter = 8775;
+ xbt_cfg_setdefault_double(_surf_cfg_set,"network/latency_factor",10.4);
+ 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);
if (surf_network_model)
return;
surf_network_model_init_internal();
- define_callbacks(filename);
+ net_define_callbacks(filename);
xbt_dynar_push(model_list, &surf_network_model);
network_solve = lmm_solve;
if (surf_network_model)
return;
surf_network_model_init_internal();
- define_callbacks(filename);
+ net_define_callbacks(filename);
xbt_dynar_push(model_list, &surf_network_model);
lmm_set_default_protocol_function(func_reno_f, func_reno_fp, func_reno_fpi);
network_solve = lagrange_solve;
- latency_factor = 10.4;
- bandwidth_factor = 0.92;
- weight_S_parameter = 8775;
+ xbt_cfg_setdefault_double(_surf_cfg_set,"network/latency_factor", 10.4);
+ 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);
if (surf_network_model)
return;
surf_network_model_init_internal();
- define_callbacks(filename);
+ net_define_callbacks(filename);
xbt_dynar_push(model_list, &surf_network_model);
lmm_set_default_protocol_function(func_reno2_f, func_reno2_fp,
func_reno2_fpi);
network_solve = lagrange_solve;
- latency_factor = 10.4;
- bandwidth_factor = 0.92;
- weight_S_parameter = 8775;
+ xbt_cfg_setdefault_double(_surf_cfg_set,"network/latency_factor", 10.4);
+ xbt_cfg_setdefault_double(_surf_cfg_set,"network/bandwidth_factor", 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);
if (surf_network_model)
return;
surf_network_model_init_internal();
- define_callbacks(filename);
+ net_define_callbacks(filename);
xbt_dynar_push(model_list, &surf_network_model);
lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp,
func_vegas_fpi);
network_solve = lagrange_solve;
- latency_factor = 10.4;
- bandwidth_factor = 0.92;
- weight_S_parameter = 8775;
+ xbt_cfg_setdefault_double(_surf_cfg_set,"network/latency_factor", 10.4);
+ 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);