From 37f93a514b90d9d6ae75f1719346d7a8c604f34a Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Mon, 8 Feb 2016 11:43:32 +0100 Subject: [PATCH] make the rest of trace:connect private to the XML parsing --- src/surf/cpu_interface.hpp | 4 +-- src/surf/host_ptask_L07.cpp | 40 +------------------------- src/surf/network_cm02.cpp | 51 +-------------------------------- src/surf/network_interface.cpp | 19 ++++++++++++ src/surf/network_interface.hpp | 4 +++ src/surf/surf_interface.hpp | 3 -- src/surf/surfxml_parseplatf.cpp | 34 ++++++++++++++++++---- 7 files changed, 55 insertions(+), 100 deletions(-) diff --git a/src/surf/cpu_interface.hpp b/src/surf/cpu_interface.hpp index d565730a00..6e8e71ad1c 100644 --- a/src/surf/cpu_interface.hpp +++ b/src/surf/cpu_interface.hpp @@ -163,8 +163,8 @@ public: void **p_constraintCoreId=NULL; public: - virtual void set_state_trace(tmgr_trace_t trace); /*< setup the trace file with states events (ON or OFF) */ - virtual void set_speed_trace(tmgr_trace_t trace); /*< setup the trace file with availability events (peak speed changes due to external load) */ + virtual void set_state_trace(tmgr_trace_t trace); /*< setup the trace file with states events (ON or OFF). Trace must contain boolean values (0 or 1). */ + virtual void set_speed_trace(tmgr_trace_t trace); /*< setup the trace file with availability events (peak speed changes due to external load). Trace must contain relative values (ratio between 0 and 1) */ tmgr_trace_iterator_t p_stateEvent = nullptr; s_surf_metric_t p_speed = {1.0, 0, nullptr}; diff --git a/src/surf/host_ptask_L07.cpp b/src/surf/host_ptask_L07.cpp index bc73ae68fb..c062c50501 100644 --- a/src/surf/host_ptask_L07.cpp +++ b/src/surf/host_ptask_L07.cpp @@ -36,9 +36,6 @@ void surf_host_model_init_ptask_L07(void) // Define the callbacks to parse the XML simgrid::surf::on_link.connect(ptask_netlink_parse_init); - simgrid::surf::on_postparse.connect([](){ - surf_host_model->addTraces(); - }); surf_host_model = new simgrid::surf::HostL07Model(); xbt_dynar_push(all_existing_models, &surf_host_model); @@ -334,42 +331,7 @@ Link* NetworkL07Model::createLink(const char *name, void HostL07Model::addTraces() { - xbt_dict_cursor_t cursor = NULL; - char *trace_name, *elm; - - if (!trace_connect_list_link_avail) - return; - - /* Connect 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); - LinkL07 *link = static_cast(Link::byName(elm)); - - xbt_assert(link, "Link %s undefined", elm); - xbt_assert(trace, "Trace %s undefined", trace_name); - - 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); - LinkL07 *link = static_cast(Link::byName(elm)); - - xbt_assert(link, "Link %s undefined", elm); - xbt_assert(trace, "Trace %s undefined", trace_name); - - 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); - LinkL07 *link = static_cast(Link::byName(elm)); - - xbt_assert(link, "Link %s undefined", elm); - xbt_assert(trace, "Trace %s undefined", trace_name); - - link->m_latency.event = future_evt_set->add_trace(trace, 0.0, link); - } + THROW_DEADCODE; } /************ diff --git a/src/surf/network_cm02.cpp b/src/surf/network_cm02.cpp index c19dbfdb01..9322e1b10b 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(); - }); } /********* @@ -458,53 +455,7 @@ Action *NetworkCm02Model::communicate(NetCard *src, NetCard *dst, } 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); - } +THROW_DEADCODE; } /************ diff --git a/src/surf/network_interface.cpp b/src/surf/network_interface.cpp index 4489f8a3ec..547145bbb3 100644 --- a/src/surf/network_interface.cpp +++ b/src/surf/network_interface.cpp @@ -266,6 +266,25 @@ void Link::turnOff(){ onStateChange(this); } } +void Link::set_state_trace(tmgr_trace_t trace) +{ + xbt_assert(m_stateEvent==NULL,"Cannot set a second state trace to Link %s", getName()); + + m_stateEvent = future_evt_set->add_trace(trace, 0.0, this); +} +void Link::set_bandwidth_trace(tmgr_trace_t trace) +{ + xbt_assert(m_bandwidth.event==NULL,"Cannot set a second bandwidth trace to Link %s", getName()); + + m_bandwidth.event = future_evt_set->add_trace(trace, 0.0, this); +} +void Link::set_latency_trace(tmgr_trace_t trace) +{ + xbt_assert(m_latency.event==NULL,"Cannot set a second latency trace to Link %s", getName()); + + m_latency.event = future_evt_set->add_trace(trace, 0.0, this); +} + /********** * Action * diff --git a/src/surf/network_interface.hpp b/src/surf/network_interface.hpp index 2b94aaf9ec..ca9f7e10c0 100644 --- a/src/surf/network_interface.hpp +++ b/src/surf/network_interface.hpp @@ -235,6 +235,10 @@ public: void turnOn() override; void turnOff() override; + virtual void set_state_trace(tmgr_trace_t trace); /*< setup the trace file with states events (ON or OFF). Trace must contain boolean values. */ + virtual void set_bandwidth_trace(tmgr_trace_t trace); /*< setup the trace file with bandwidth events (peak speed changes due to external load). Trace must contain percentages (value between 0 and 1). */ + virtual void set_latency_trace(tmgr_trace_t trace); /*< setup the trace file with latency events (peak latency changes due to external load). Trace must contain absolute values */ + tmgr_trace_iterator_t m_stateEvent = NULL; s_surf_metric_t m_latency = {1.0,0,NULL}; s_surf_metric_t m_bandwidth = {1.0,0,NULL}; diff --git a/src/surf/surf_interface.hpp b/src/surf/surf_interface.hpp index ebbf7a8d4d..1635966656 100644 --- a/src/surf/surf_interface.hpp +++ b/src/surf/surf_interface.hpp @@ -71,9 +71,6 @@ enum heap_action_type{ *********/ /* For the trace and trace:connect tag (store their content till the end of the parsing) */ XBT_PUBLIC_DATA(xbt_dict_t) traces_set_list; -XBT_PUBLIC_DATA(xbt_dict_t) trace_connect_list_link_avail; -XBT_PUBLIC_DATA(xbt_dict_t) trace_connect_list_link_bw; -XBT_PUBLIC_DATA(xbt_dict_t) trace_connect_list_link_lat; /********** * Action * diff --git a/src/surf/surfxml_parseplatf.cpp b/src/surf/surfxml_parseplatf.cpp index 51ce41a759..ead4804893 100644 --- a/src/surf/surfxml_parseplatf.cpp +++ b/src/surf/surfxml_parseplatf.cpp @@ -10,7 +10,7 @@ #include "xbt/dict.h" #include "simgrid/platf.h" #include "src/surf/cpu_interface.hpp" -#include "src/surf/surf_private.h" +#include "src/surf/network_interface.hpp" #include "src/surf/surfxml_private.h" #ifdef HAVE_LUA @@ -64,11 +64,11 @@ void surfxml_bufferstack_pop(int new_one) */ xbt_dict_t traces_set_list = NULL; -xbt_dict_t trace_connect_list_host_avail = NULL; -xbt_dict_t trace_connect_list_host_speed = NULL; -xbt_dict_t trace_connect_list_link_avail = NULL; -xbt_dict_t trace_connect_list_link_bw = NULL; -xbt_dict_t trace_connect_list_link_lat = NULL; +XBT_PRIVATE xbt_dict_t trace_connect_list_host_avail = NULL; +XBT_PRIVATE xbt_dict_t trace_connect_list_host_speed = NULL; +XBT_PRIVATE xbt_dict_t trace_connect_list_link_avail = NULL; +XBT_PRIVATE xbt_dict_t trace_connect_list_link_bw = NULL; +XBT_PRIVATE xbt_dict_t trace_connect_list_link_lat = NULL; void sg_platf_trace_connect(sg_platf_trace_connect_cbarg_t trace_connect) { @@ -201,7 +201,29 @@ void parse_platform_file(const char *file) cpu->set_speed_trace(trace); } + 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); + xbt_assert(trace, "Trace %s undefined", trace_name); + Link *link = Link::byName(elm); + xbt_assert(link, "Link %s undefined", elm); + link->set_state_trace(trace); + } + + 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); + xbt_assert(trace, "Trace %s undefined", trace_name); + Link *link = Link::byName(elm); + xbt_assert(link, "Link %s undefined", elm); + link->set_bandwidth_trace(trace); + } + 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); + xbt_assert(trace, "Trace %s undefined", trace_name); + Link *link = Link::byName(elm); + xbt_assert(link, "Link %s undefined", elm); + link->set_latency_trace(trace); + } /* Free my data */ xbt_dict_free(&trace_connect_list_host_avail); -- 2.20.1