gtnets_sim->print_topology();
}
+// set jitter
+void gtnets_set_jitter(double d){
+ gtnets_sim->set_jitter(d);
+}
+
+
int gtnets_run(double delta);
int gtnets_finalize();
-
+ void gtnets_set_jitter(double);
#ifdef __cplusplus
}
#endif
nflow_ = 0;
sim_ = new Simulator();
topo_ = new GTNETS_Topology();
+ uniform_jitter_ = NULL;
sim_->verbose=false;
// Set default values.
xbt_assert1(!(topo_->add_link(id) < 0),"Can't add link %d. already exists", id);
DEBUG3("Creating a new P2P, linkid %d, bandwidth %gl, latency %gl", id, bandwidth, latency);
gtnets_links_[id] = new Linkp2p(bw, latency);
+ if(jitter_ > 0){
+ DEBUG1("Using jitter %f", jitter_);
+ double min = 0.0;
+ double max = jitter_*latency;
+ if(uniform_jitter_ == NULL){
+ uniform_jitter_ = new Uniform(min,max);
+ }
+ gtnets_links_[id]->Jitter((const Random &) *uniform_jitter_);
+ }
return 0;
}
return 0;
}
+void GTSim::set_jitter(double d){
+ jitter_ = d;
+}
void static tcp_sent_callback(void* action, double completion_time){
// Schedule the flow complete event.
double gtnets_get_flow_rx(void *metadata);
void create_gtnets_topology();
void print_topology();
+ void set_jitter(double);
private:
void add_nodes();
void node_connect();
int nnode_;
int is_topology_;
int nflow_;
+ double jitter_;
+ Uniform *uniform_jitter_;
map < int, TCPServer * >gtnets_servers_;
map < int, TCPSend * >gtnets_clients_;
"Logging specific to the SURF network GTNetS module");
extern routing_t used_routing;
+double sg_gtnets_jitter=0.0;
static void link_new(char *name, double bw, double lat, xbt_dict_t props)
{
define_callbacks(filename);
xbt_dynar_push(model_list, &surf_network_model);
+ if(sg_gtnets_jitter > 0.0){
+ gtnets_set_jitter(sg_gtnets_jitter);
+ }
+
update_model_description(surf_network_model_description,
"GTNets", surf_network_model);
}
"About the configuration of surf (and the rest of the simulation)");
xbt_cfg_t _surf_cfg_set = NULL;
-
+#ifdef HAVE_GTNETS
+extern double sg_gtnets_jitter;
+#endif
/* Parse the command line, looking for options */
static void surf_config_cmd_line(int *argc, char **argv)
sg_maxmin_selective_update = xbt_cfg_get_int(_surf_cfg_set, name);
}
+#ifdef HAVE_GTNETS
+static void _surf_cfg_cb__gtnets_jitter(const char *name, int pos){
+ sg_gtnets_jitter = xbt_cfg_get_double(_surf_cfg_set, name);
+}
+#endif
+
/* create the config set, register what should be and parse the command line*/
void surf_config_init(int *argc, char **argv)
{
xbt_cfg_register(&_surf_cfg_set, "maxmin_selective_update",
"Update the constraint set propagating recursively to others constraints",
xbt_cfgelm_int, &default_value_int, 0, 1, _surf_cfg_cb__surf_maxmin_selective_update, NULL);
+
+#ifdef HAVE_GTNETS
+ xbt_cfg_register(&_surf_cfg_set, "gtnets_jitter",
+ "Double value to inflate the link latency, latency plus random in [0,latency*gtnets_jitter)", xbt_cfgelm_double,
+ NULL, 1, 1, _surf_cfg_cb__gtnets_jitter, NULL);
+ xbt_cfg_set_double(_surf_cfg_set, "gtnets_jitter", 1.0);
+#endif
+
if (!surf_path) {
/* retrieves the current directory of the current process */
const char *initial_path = __surf_get_initial_path();