X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a9cf1ace2a16e19685da841d70c401adb448c83d..b43444e9895fb2a66540a78027644da1fbc5f2ef:/src/surf/host_ptask_L07.cpp diff --git a/src/surf/host_ptask_L07.cpp b/src/surf/host_ptask_L07.cpp index 23495dab15..38b1709101 100644 --- a/src/surf/host_ptask_L07.cpp +++ b/src/surf/host_ptask_L07.cpp @@ -13,8 +13,10 @@ #include "cpu_interface.hpp" #include "surf_routing.hpp" #include "xbt/lib.h" +#include "src/surf/platform.hpp" XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_host); +XBT_LOG_EXTERNAL_CATEGORY(xbt_cfg); /**************************************/ /*** Resource Creation & Destruction **/ @@ -28,13 +30,15 @@ static void ptask_netlink_parse_init(sg_platf_link_cbarg_t link) void surf_host_model_init_ptask_L07(void) { - XBT_INFO("Switching to the L07 model to handle parallel tasks."); + XBT_CINFO(xbt_cfg,"Switching to the L07 model to handle parallel tasks."); xbt_assert(!surf_cpu_model_pm, "CPU model type already defined"); xbt_assert(!surf_network_model, "network model type already defined"); // Define the callbacks to parse the XML - sg_platf_link_add_cb(ptask_netlink_parse_init); - sg_platf_postparse_add_cb(host_add_traces); + 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); @@ -52,7 +56,7 @@ HostL07Model::HostL07Model() : HostModel() { routing_model_create(surf_network_model->createLink("__loopback__", 498000000, NULL, 0.000015, NULL, - SURF_RESOURCE_ON, NULL, + 1/*ON*/, NULL, SURF_LINK_FATPIPE, NULL)); } @@ -166,7 +170,7 @@ void HostL07Model::updateActionsState(double /*now*/, double delta) { while ((cnst = lmm_get_cnst_from_var(p_maxminSystem, action->getVariable(), i++))) { void *constraint_id = lmm_constraint_id(cnst); - if (static_cast(constraint_id)->getState() == SURF_RESOURCE_OFF) { + if (static_cast(constraint_id)->isOff()) { XBT_DEBUG("Action (%p) Failed!!", action); action->finish(); action->setState(SURF_ACTION_FAILED); @@ -199,9 +203,9 @@ L07Action::L07Action(Model *model, int host_nb, xbt_dict_t ptask_parallel_task_link_set = xbt_dict_new_homogeneous(NULL); - this->p_edgeList->reserve(host_nb); + this->p_netcardList->reserve(host_nb); for (int i = 0; ip_edgeList->push_back(sg_host_edge(host_list[i])); + this->p_netcardList->push_back(host_list[i]->pimpl_netcard); /* Compute the number of affected resources... */ for (int i = 0; i < host_nb; i++) { @@ -214,7 +218,7 @@ L07Action::L07Action(Model *model, int host_nb, void *_link; LinkL07 *link; - routing_platf->getRouteAndLatency((*this->p_edgeList)[i], (*this->p_edgeList)[j], + routing_platf->getRouteAndLatency((*this->p_netcardList)[i], (*this->p_netcardList)[j], &route, &lat); latency = MAX(latency, lat); @@ -249,7 +253,7 @@ L07Action::L07Action(Model *model, int host_nb, for (int i = 0; i < host_nb; i++) lmm_expand(model->getMaxminSystem(), - sg_host_surfcpu(host_list[i])->getConstraint(), + host_list[i]->pimpl_cpu->getConstraint(), this->getVariable(), flops_amount[i]); for (int i = 0; i < host_nb; i++) { @@ -260,7 +264,7 @@ L07Action::L07Action(Model *model, int host_nb, if (bytes_amount[i * host_nb + j] == 0.0) continue; - routing_platf->getRouteAndLatency((*this->p_edgeList)[i], (*this->p_edgeList)[j], + routing_platf->getRouteAndLatency((*this->p_netcardList)[i], (*this->p_netcardList)[j], &route, NULL); xbt_dynar_foreach(route, cpt, _link) { @@ -278,7 +282,7 @@ L07Action::L07Action(Model *model, int host_nb, } } -Action *NetworkL07Model::communicate(RoutingEdge *src, RoutingEdge *dst, +Action *NetworkL07Model::communicate(NetCard *src, NetCard *dst, double size, double rate) { sg_host_t*host_list = xbt_new0(sg_host_t, 2); @@ -297,14 +301,14 @@ Action *NetworkL07Model::communicate(RoutingEdge *src, RoutingEdge *dst, return res; } -Cpu *CpuL07Model::createCpu(simgrid::Host *host, xbt_dynar_t powerPeakList, +Cpu *CpuL07Model::createCpu(simgrid::s4u::Host *host, xbt_dynar_t powerPeakList, int pstate, double power_scale, tmgr_trace_t power_trace, int core, - e_surf_resource_state_t state_initial, + int initiallyOn, tmgr_trace_t state_trace) { CpuL07 *cpu = new CpuL07(this, host, powerPeakList, pstate, power_scale, power_trace, - core, state_initial, state_trace); + core, initiallyOn, state_trace); return cpu; } @@ -313,7 +317,7 @@ Link* NetworkL07Model::createLink(const char *name, tmgr_trace_t bw_trace, double lat_initial, tmgr_trace_t lat_trace, - e_surf_resource_state_t state_initial, + int initiallyOn, tmgr_trace_t state_trace, e_surf_link_sharing_policy_t policy, xbt_dict_t properties) @@ -324,7 +328,7 @@ Link* NetworkL07Model::createLink(const char *name, Link* link = new LinkL07(this, name, properties, bw_initial, bw_trace, lat_initial, lat_trace, - state_initial, state_trace, + initiallyOn, state_trace, policy); Link::onCreation(link); return link; @@ -341,7 +345,7 @@ void HostL07Model::addTraces() /* Connect traces relative to cpu */ xbt_dict_foreach(trace_connect_list_host_avail, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - CpuL07 *host = static_cast(sg_host_surfcpu(sg_host_by_name(elm))); + CpuL07 *host = static_cast(sg_host_by_name(elm)->pimpl_cpu); xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -351,7 +355,7 @@ void HostL07Model::addTraces() xbt_dict_foreach(trace_connect_list_power, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - CpuL07 *host = static_cast(sg_host_surfcpu(sg_host_by_name(elm))); + CpuL07 *host = static_cast(sg_host_by_name(elm)->pimpl_cpu); xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -395,14 +399,13 @@ void HostL07Model::addTraces() * Resource * ************/ -CpuL07::CpuL07(CpuL07Model *model, simgrid::Host *host, +CpuL07::CpuL07(CpuL07Model *model, simgrid::s4u::Host *host, xbt_dynar_t speedPeakList, int pstate, double speedScale, tmgr_trace_t speedTrace, - int core, e_surf_resource_state_t state_initial, tmgr_trace_t state_trace) + int core, int initiallyOn, tmgr_trace_t state_trace) : Cpu(model, host, speedPeakList, pstate, - core, xbt_dynar_get_as(speedPeakList,pstate,double), speedScale, state_initial) + core, xbt_dynar_get_as(speedPeakList,pstate,double), speedScale, initiallyOn) { - xbt_assert(m_speedScale > 0, "Power has to be >0"); p_constraint = lmm_constraint_new(model->getMaxminSystem(), this, xbt_dynar_get_as(speedPeakList,pstate,double) * speedScale); if (speedTrace) @@ -423,7 +426,7 @@ LinkL07::LinkL07(NetworkL07Model *model, const char* name, xbt_dict_t props, tmgr_trace_t bw_trace, double lat_initial, tmgr_trace_t lat_trace, - e_surf_resource_state_t state_initial, + int initiallyOn, tmgr_trace_t state_trace, e_surf_link_sharing_policy_t policy) : Link(model, name, props, lmm_constraint_new(model->getMaxminSystem(), this, bw_initial), history, state_trace) @@ -432,7 +435,10 @@ LinkL07::LinkL07(NetworkL07Model *model, const char* name, xbt_dict_t props, if (bw_trace) p_bwEvent = tmgr_history_add_trace(history, bw_trace, 0.0, 0, this); - setState(state_initial); + if (initiallyOn) + turnOn(); + else + turnOff(); m_latCurrent = lat_initial; if (lat_trace) @@ -475,6 +481,25 @@ bool CpuL07::isUsed(){ return lmm_constraint_used(getModel()->getMaxminSystem(), getConstraint()); } +/** @brief take into account changes of speed (either load or max) */ +void CpuL07::onSpeedChange() { + lmm_variable_t var = NULL; + lmm_element_t elem = NULL; + + lmm_update_constraint_bound(getModel()->getMaxminSystem(), getConstraint(), m_speedPeak * m_speedScale); + while ((var = lmm_get_var_from_cnst + (getModel()->getMaxminSystem(), getConstraint(), &elem))) { + Action *action = static_cast(lmm_variable_id(var)); + + lmm_update_variable_bound(getModel()->getMaxminSystem(), + action->getVariable(), + m_speedScale * m_speedPeak); + } + + Cpu::onSpeedChange(); +} + + bool LinkL07::isUsed(){ return lmm_constraint_used(getModel()->getMaxminSystem(), getConstraint()); } @@ -482,15 +507,15 @@ bool LinkL07::isUsed(){ void CpuL07::updateState(tmgr_trace_event_t event_type, double value, double /*date*/){ XBT_DEBUG("Updating cpu %s (%p) with value %g", getName(), this, value); if (event_type == p_speedEvent) { - m_speedScale = value; - lmm_update_constraint_bound(getModel()->getMaxminSystem(), getConstraint(), m_speedPeak * m_speedScale); + m_speedScale = value; + onSpeedChange(); if (tmgr_trace_event_free(event_type)) p_speedEvent = NULL; } else if (event_type == p_stateEvent) { if (value > 0) - setState(SURF_RESOURCE_ON); + turnOn(); else - setState(SURF_RESOURCE_OFF); + turnOff(); if (tmgr_trace_event_free(event_type)) p_stateEvent = NULL; } else { @@ -512,9 +537,9 @@ void LinkL07::updateState(tmgr_trace_event_t event_type, double value, double da p_latEvent = NULL; } else if (event_type == p_stateEvent) { if (value > 0) - setState(SURF_RESOURCE_ON); + turnOn(); else - setState(SURF_RESOURCE_OFF); + turnOff(); if (tmgr_trace_event_free(event_type)) p_stateEvent = NULL; } else { @@ -563,7 +588,7 @@ void L07Action::updateBound() double lat_bound = -1.0; int i, j; - int hostNb = p_edgeList->size(); + int hostNb = p_netcardList->size(); for (i = 0; i < hostNb; i++) { for (j = 0; j < hostNb; j++) { @@ -571,7 +596,7 @@ void L07Action::updateBound() if (p_communicationAmount[i * hostNb + j] > 0) { double lat = 0.0; - routing_platf->getRouteAndLatency((*p_edgeList)[i], (*p_edgeList)[j], + routing_platf->getRouteAndLatency((*p_netcardList)[i], (*p_netcardList)[j], &route, &lat); lat_current = MAX(lat_current, lat * p_communicationAmount[i * hostNb + j]);