X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2c81199c603dbd371a6c0f6936e5a4e5fbd4a5aa..5fedb73886fa7c03fcc89ca008fb7a6dc72d80a1:/src/surf/network_cm02.cpp diff --git a/src/surf/network_cm02.cpp b/src/surf/network_cm02.cpp index 318c3b9272..6915a08a3e 100644 --- a/src/surf/network_cm02.cpp +++ b/src/surf/network_cm02.cpp @@ -29,9 +29,6 @@ void net_define_callbacks(void) { /* Figuring out the network links */ simgrid::surf::on_link.connect(netlink_parse_init); - simgrid::surf::on_postparse.connect([]() { - surf_network_model->addTraces(); - }); } /********* @@ -161,8 +158,7 @@ NetworkCm02Model::NetworkCm02Model() :NetworkModel() { char *optim = xbt_cfg_get_string(_sg_cfg_set, "network/optim"); - int select = - xbt_cfg_get_boolean(_sg_cfg_set, "network/maxmin_selective_update"); + int select = xbt_cfg_get_boolean(_sg_cfg_set, "network/maxmin_selective_update"); if (!strcmp(optim, "Full")) { p_updateMechanism = UM_FULL; @@ -170,17 +166,14 @@ NetworkCm02Model::NetworkCm02Model() } else if (!strcmp(optim, "Lazy")) { p_updateMechanism = UM_LAZY; m_selectiveUpdate = 1; - xbt_assert((select == 1) - || - (xbt_cfg_is_default_value - (_sg_cfg_set, "network/maxmin_selective_update")), + xbt_assert((select == 1) || (xbt_cfg_is_default_value(_sg_cfg_set, "network/maxmin_selective_update")), "Disabling selective update while using the lazy update mechanism is dumb!"); } else { xbt_die("Unsupported optimization (%s) for this model", optim); } if (!p_maxminSystem) - p_maxminSystem = lmm_system_new(m_selectiveUpdate); + p_maxminSystem = lmm_system_new(m_selectiveUpdate); routing_model_create(createLink("__loopback__", 498000000, NULL, 0.000015, NULL, @@ -209,7 +202,7 @@ Link* NetworkCm02Model::createLink(const char *name, "Link '%s' declared several times in the platform", name); - Link* link = new NetworkCm02Link(this, name, properties, p_maxminSystem, sg_bandwidth_factor * bw_initial, future_evt_set, + Link* link = new NetworkCm02Link(this, name, properties, p_maxminSystem, sg_bandwidth_factor * bw_initial, initiallyOn, state_trace, bw_initial, bw_trace, lat_initial, lat_trace, policy); Link::onCreation(link); return link; @@ -351,12 +344,12 @@ Action *NetworkCm02Model::communicate(NetCard *src, NetCard *dst, xbt_dynar_t route = xbt_dynar_new(sizeof(NetCard*), NULL); - XBT_IN("(%s,%s,%g,%g)", src->getName(), dst->getName(), size, rate); + XBT_IN("(%s,%s,%g,%g)", src->name(), dst->name(), size, rate); routing_platf->getRouteAndLatency(src, dst, &route, &latency); xbt_assert(!xbt_dynar_is_empty(route) || latency, "You're trying to send data from %s to %s but there is no connecting path between these two hosts.", - src->getName(), dst->getName()); + src->name(), dst->name()); xbt_dynar_foreach(route, i, _link) { link = static_cast(_link); @@ -413,7 +406,7 @@ Action *NetworkCm02Model::communicate(NetCard *src, NetCard *dst, link = *static_cast(xbt_dynar_get_ptr(route, 0)); gapAppend(size, link, action); XBT_DEBUG("Comm %p: %s -> %s gap=%f (lat=%f)", - action, src->getName(), dst->getName(), action->m_senderGap, + action, src->name(), dst->name(), action->m_senderGap, action->m_latency); } @@ -460,68 +453,17 @@ Action *NetworkCm02Model::communicate(NetCard *src, NetCard *dst, return action; } -void NetworkCm02Model::addTraces(){ - xbt_dict_cursor_t cursor = NULL; - char *trace_name, *elm; - - static int called = 0; - if (called) - return; - called = 1; - - /* connect all traces relative to network */ - xbt_dict_foreach(trace_connect_list_link_avail, cursor, trace_name, elm) { - tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - NetworkCm02Link *link = static_cast( Link::byName(elm) ); - - xbt_assert(link, "Cannot connect trace %s to link %s: link undefined", - trace_name, elm); - xbt_assert(trace, - "Cannot connect trace %s to link %s: trace undefined", - trace_name, elm); - - link->m_stateEvent = future_evt_set->add_trace(trace, 0.0, link); - } - - xbt_dict_foreach(trace_connect_list_link_bw, cursor, trace_name, elm) { - tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - NetworkCm02Link *link = static_cast( Link::byName(elm) ); - - xbt_assert(link, "Cannot connect trace %s to link %s: link undefined", - trace_name, elm); - xbt_assert(trace, - "Cannot connect trace %s to link %s: trace undefined", - trace_name, elm); - - link->m_bandwidth.event = future_evt_set->add_trace(trace, 0.0, link); - } - - xbt_dict_foreach(trace_connect_list_link_lat, cursor, trace_name, elm) { - tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - NetworkCm02Link *link = static_cast(Link::byName(elm));; - - xbt_assert(link, "Cannot connect trace %s to link %s: link undefined", - trace_name, elm); - xbt_assert(trace, - "Cannot connect trace %s to link %s: trace undefined", - trace_name, elm); - - link->m_latency.event = future_evt_set->add_trace(trace, 0.0, link); - } -} - /************ * Resource * ************/ NetworkCm02Link::NetworkCm02Link(NetworkCm02Model *model, const char *name, xbt_dict_t props, lmm_system_t system, double constraint_value, - sg_future_evt_set_t fes, int initiallyOn, tmgr_trace_t state_trace, double bw_peak, tmgr_trace_t bw_trace, double lat_initial, tmgr_trace_t lat_trace, e_surf_link_sharing_policy_t policy) -: Link(model, name, props, lmm_constraint_new(system, this, constraint_value), fes, state_trace) +: Link(model, name, props, lmm_constraint_new(system, this, constraint_value), state_trace) { if (initiallyOn) turnOn(); @@ -531,14 +473,14 @@ NetworkCm02Link::NetworkCm02Link(NetworkCm02Model *model, const char *name, xbt_ m_bandwidth.scale = 1.0; m_bandwidth.peak = bw_peak; if (bw_trace) - m_bandwidth.event = fes->add_trace(bw_trace, 0.0, this); + m_bandwidth.event = future_evt_set->add_trace(bw_trace, 0.0, this); else m_bandwidth.event = NULL; m_latency.scale = 1.0; m_latency.peak = lat_initial; if (lat_trace) - m_latency.event = fes->add_trace(lat_trace, 0.0, this); + m_latency.event = future_evt_set->add_trace(lat_trace, 0.0, this); if (policy == SURF_LINK_FATPIPE) lmm_constraint_shared(getConstraint()); @@ -546,23 +488,25 @@ NetworkCm02Link::NetworkCm02Link(NetworkCm02Model *model, const char *name, xbt_ -void NetworkCm02Link::updateState(tmgr_trace_iterator_t triggered, - double value, double date) +void NetworkCm02Link::apply_event(tmgr_trace_iterator_t triggered, double value) { /* Find out which of my iterators was triggered, and react accordingly */ if (triggered == m_bandwidth.event) { - updateBandwidth(value, date); + updateBandwidth(value); tmgr_trace_event_unref(&m_bandwidth.event); + } else if (triggered == m_latency.event) { - updateLatency(value, date); + updateLatency(value); tmgr_trace_event_unref(&m_latency.event); + } else if (triggered == m_stateEvent) { if (value > 0) turnOn(); else { lmm_variable_t var = NULL; lmm_element_t elem = NULL; + double now = surf_get_clock(); turnOff(); while ((var = lmm_get_var_from_cnst(getModel()->getMaxminSystem(), getConstraint(), &elem))) { @@ -570,7 +514,7 @@ void NetworkCm02Link::updateState(tmgr_trace_iterator_t triggered, if (action->getState() == SURF_ACTION_RUNNING || action->getState() == SURF_ACTION_READY) { - action->setFinishTime(date); + action->setFinishTime(now); action->setState(SURF_ACTION_FAILED); } } @@ -585,7 +529,7 @@ void NetworkCm02Link::updateState(tmgr_trace_iterator_t triggered, getConstraint()); } -void NetworkCm02Link::updateBandwidth(double value, double date){ +void NetworkCm02Link::updateBandwidth(double value) { double delta = sg_weight_S_parameter / value - sg_weight_S_parameter / (m_bandwidth.peak * m_bandwidth.scale); lmm_variable_t var = NULL; @@ -600,7 +544,7 @@ void NetworkCm02Link::updateBandwidth(double value, double date){ getConstraint(), sg_bandwidth_factor * (m_bandwidth.peak * m_bandwidth.scale)); - TRACE_surf_link_set_bandwidth(date, getName(), sg_bandwidth_factor * m_bandwidth.peak * m_bandwidth.scale); + TRACE_surf_link_set_bandwidth(surf_get_clock(), getName(), sg_bandwidth_factor * m_bandwidth.peak * m_bandwidth.scale); if (sg_weight_S_parameter > 0) { while ((var = lmm_get_var_from_cnst_safe(getModel()->getMaxminSystem(), getConstraint(), &elem, &nextelem, &numelem))) { action = (NetworkCm02Action*) lmm_variable_id(var); @@ -611,7 +555,7 @@ void NetworkCm02Link::updateBandwidth(double value, double date){ } } -void NetworkCm02Link::updateLatency(double value, double date){ +void NetworkCm02Link::updateLatency(double value){ double delta = value - m_latency.peak; lmm_variable_t var = NULL; lmm_element_t elem = NULL;