-/* Copyright (c) 2007-2010, 2013-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2007-2018. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "ptask_L07.hpp"
#include "cpu_interface.hpp"
+#include "xbt/utility.hpp"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_host);
XBT_LOG_EXTERNAL_CATEGORY(xbt_cfg);
namespace surf {
HostL07Model::HostL07Model() : HostModel() {
- maxminSystem_ = new s_lmm_system_t(true /* lazy */);
- maxminSystem_->solve_fun = &bottleneck_solve;
+ maxminSystem_ = new simgrid::kernel::lmm::System(true /* lazy */);
+ maxminSystem_->solve_fun = &simgrid::kernel::lmm::bottleneck_solve;
surf_network_model = new NetworkL07Model(this,maxminSystem_);
surf_cpu_model_pm = new CpuL07Model(this,maxminSystem_);
}
HostL07Model::~HostL07Model()
{
- delete maxminSystem_;
- maxminSystem_ = nullptr;
delete surf_network_model;
delete surf_cpu_model_pm;
}
-CpuL07Model::CpuL07Model(HostL07Model *hmodel,lmm_system_t sys)
- : CpuModel()
- , hostModel_(hmodel)
+CpuL07Model::CpuL07Model(HostL07Model* hmodel, lmm_system_t sys) : CpuModel(), hostModel_(hmodel)
{
maxminSystem_ = sys;
}
maxminSystem_ = nullptr;
}
-NetworkL07Model::NetworkL07Model(HostL07Model *hmodel, lmm_system_t sys)
- : NetworkModel()
- , hostModel_(hmodel)
+NetworkL07Model::NetworkL07Model(HostL07Model* hmodel, lmm_system_t sys) : NetworkModel(), hostModel_(hmodel)
{
maxminSystem_ = sys;
loopback_ = NetworkL07Model::createLink("__loopback__", 498000000, 0.000015, SURF_LINK_FATPIPE);
double HostL07Model::nextOccuringEvent(double now)
{
double min = HostModel::nextOccuringEventFull(now);
- for (Action const& action : *getRunningActionSet()) {
+ for (kernel::resource::Action const& action : *getRunningActionSet()) {
const L07Action& net_action = static_cast<const L07Action&>(action);
if (net_action.latency_ > 0 && (min < 0 || net_action.latency_ < min)) {
min = net_action.latency_;
if (((action.getRemains() <= 0) && (action.getVariable()->get_weight() > 0)) ||
((action.getMaxDuration() > NO_MAX_DURATION) && (action.getMaxDuration() <= 0))) {
- action.finish(Action::State::done);
+ action.finish(kernel::resource::Action::State::done);
} else {
/* Need to check that none of the model has failed */
int i = 0;
- lmm_constraint_t cnst = action.getVariable()->get_constraint(i);
+ kernel::lmm::Constraint* cnst = action.getVariable()->get_constraint(i);
while (cnst != nullptr) {
i++;
void* constraint_id = cnst->get_id();
- if (static_cast<simgrid::surf::Resource*>(constraint_id)->isOff()) {
+ if (static_cast<simgrid::kernel::resource::Resource*>(constraint_id)->isOff()) {
XBT_DEBUG("Action (%p) Failed!!", &action);
- action.finish(Action::State::failed);
+ action.finish(kernel::resource::Action::State::failed);
break;
}
cnst = action.getVariable()->get_constraint(i);
}
}
-Action *HostL07Model::executeParallelTask(int host_nb, sg_host_t *host_list,
- double *flops_amount, double *bytes_amount,double rate) {
+kernel::resource::Action* HostL07Model::executeParallelTask(int host_nb, sg_host_t* host_list, double* flops_amount,
+ double* bytes_amount, double rate)
+{
return new L07Action(this, host_nb, host_list, flops_amount, bytes_amount, rate);
}
-L07Action::L07Action(Model *model, int host_nb, sg_host_t *host_list,
- double *flops_amount, double *bytes_amount, double rate)
- : CpuAction(model, 1, 0)
- , computationAmount_(flops_amount)
- , communicationAmount_(bytes_amount)
- , rate_(rate)
+L07Action::L07Action(kernel::resource::Model* model, int host_nb, sg_host_t* host_list, double* flops_amount,
+ double* bytes_amount, double rate)
+ : CpuAction(model, 1, 0), computationAmount_(flops_amount), communicationAmount_(bytes_amount), rate_(rate)
{
int nb_link = 0;
int nb_used_host = 0; /* Only the hosts with something to compute (>0 flops) are counted) */
delete[] host_list;
}
-Action* NetworkL07Model::communicate(s4u::Host* src, s4u::Host* dst, double size, double rate)
+kernel::resource::Action* NetworkL07Model::communicate(s4u::Host* src, s4u::Host* dst, double size, double rate)
{
sg_host_t* host_list = new sg_host_t[2]();
double* flops_amount = new double[2]();
s4u::Link::onCreation(this->piface_);
}
-Action *CpuL07::execution_start(double size)
+kernel::resource::Action* CpuL07::execution_start(double size)
{
sg_host_t* host_list = new sg_host_t[1]();
double* flops_amount = new double[1]();
return static_cast<CpuL07Model*>(model())->hostModel_->executeParallelTask(1, host_list, flops_amount, nullptr, -1);
}
-Action *CpuL07::sleep(double duration)
+kernel::resource::Action* CpuL07::sleep(double duration)
{
L07Action *action = static_cast<L07Action*>(execution_start(1.0));
action->setMaxDuration(duration);
- action->suspended_ = 2;
+ action->suspended_ = kernel::resource::Action::SuspendStates::sleeping;
model()->getMaxminSystem()->update_variable_weight(action->getVariable(), 0.0);
return action;
/** @brief take into account changes of speed (either load or max) */
void CpuL07::onSpeedChange() {
- lmm_variable_t var = nullptr;
- lmm_element_t elem = nullptr;
+ kernel::lmm::Variable* var = nullptr;
+ const_lmm_element_t elem = nullptr;
model()->getMaxminSystem()->update_constraint_bound(constraint(), speed_.peak * speed_.scale);
while ((var = constraint()->get_variable(&elem))) {
- Action* action = static_cast<Action*>(var->get_id());
+ kernel::resource::Action* action = static_cast<kernel::resource::Action*>(var->get_id());
model()->getMaxminSystem()->update_variable_bound(action->getVariable(), speed_.scale * speed_.peak);
}
void LinkL07::setLatency(double value)
{
- lmm_variable_t var = nullptr;
+ kernel::lmm::Variable* var = nullptr;
L07Action *action;
- lmm_element_t elem = nullptr;
+ const_lmm_element_t elem = nullptr;
latency_.peak = value;
while ((var = constraint()->get_variable(&elem))) {
}
double lat_bound = sg_tcp_gamma / (2.0 * lat_current);
XBT_DEBUG("action (%p) : lat_bound = %g", this, lat_bound);
- if ((latency_ <= 0.0) && (suspended_ == 0)) {
+ if ((latency_ <= 0.0) && (suspended_ == Action::SuspendStates::not_suspended)) {
if (rate_ < 0)
getModel()->getMaxminSystem()->update_variable_bound(getVariable(), lat_bound);
else
{
refcount_--;
if (not refcount_) {
- if (action_hook.is_linked())
- stateSet_->erase(stateSet_->iterator_to(*this));
+ if (stateSetHook_.is_linked())
+ simgrid::xbt::intrusive_erase(*stateSet_, *this);
if (getVariable())
getModel()->getMaxminSystem()->variable_free(getVariable());
delete this;