X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c0bda26f8216132898999052ea1fdbbe01fd2aa0..15cd0a2b725a3a828b9eec14a3f589e77673de29:/src/surf/surf_interface.cpp diff --git a/src/surf/surf_interface.cpp b/src/surf/surf_interface.cpp index 42b84483a4..fa9aaa2a73 100644 --- a/src/surf/surf_interface.cpp +++ b/src/surf/surf_interface.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2004-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2004-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. */ @@ -8,8 +8,10 @@ #include "simgrid/s4u/Engine.hpp" #include "simgrid/sg_config.h" #include "src/instr/instr_private.hpp" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals +#include "src/kernel/lmm/maxmin.hpp" // Constraint #include "src/kernel/routing/NetPoint.hpp" #include "src/surf/HostImpl.hpp" +#include "xbt/utility.hpp" #include #include @@ -319,7 +321,7 @@ void surf_exit() { TRACE_end(); /* Just in case it was not called by the upper layer (or there is no upper layer) */ - sg_host_exit(); + simgrid::s4u::Engine::shutdown(); sg_link_exit(); for (auto const& e : storage_types) { simgrid::surf::StorageType* stype = e.second; @@ -335,7 +337,6 @@ void surf_exit() delete model; delete all_existing_models; - simgrid::surf::surfExitCallbacks(); if (future_evt_set) { delete future_evt_set; @@ -344,7 +345,6 @@ void surf_exit() tmgr_finalize(); sg_platf_exit(); - simgrid::s4u::Engine::shutdown(); NOW = 0; /* Just in case the user plans to restart the simulation afterward */ } @@ -374,6 +374,8 @@ Model::~Model(){ delete runningActionSet_; delete failedActionSet_; delete doneActionSet_; + delete modifiedSet_; + delete maxminSystem_; } Action* Model::actionHeapPop() @@ -410,13 +412,13 @@ double Model::nextOccuringEventLazy(double now) continue; /* bogus priority, skip it */ - if (action->getPriority() <= 0 || action->getHat()==LATENCY) + if (action->getPriority() <= 0 || action->getHat() == Action::Type::LATENCY) continue; action->updateRemainingLazy(now); double min = -1; - double share = lmm_variable_getvalue(action->getVariable()); + double share = action->getVariable()->get_value(); if (share > 0) { double time_to_completion; @@ -442,7 +444,7 @@ double Model::nextOccuringEventLazy(double now) action->getMaxDuration()); if (min > -1) { - action->heapUpdate(actionHeap_, min, max_dur_flag ? MAX_DURATION : NORMAL); + action->heapUpdate(actionHeap_, min, max_dur_flag ? Action::Type::MAX_DURATION : Action::Type::NORMAL); XBT_DEBUG("Insert at heap action(%p) min %f now %f", action, min, now); } else DIE_IMPOSSIBLE; @@ -463,22 +465,22 @@ double Model::nextOccuringEventFull(double /*now*/) { maxminSystem_->solve_fun(maxminSystem_); double min = -1; - for (auto it(getRunningActionSet()->begin()), itend(getRunningActionSet()->end()); it != itend ; ++it) { - Action *action = &*it; - double value = lmm_variable_getvalue(action->getVariable()); + + for (Action& action : *getRunningActionSet()) { + double value = action.getVariable()->get_value(); if (value > 0) { - if (action->getRemains() > 0) - value = action->getRemainsNoUpdate() / value; + if (action.getRemains() > 0) + value = action.getRemainsNoUpdate() / value; else value = 0.0; if (min < 0 || value < min) { min = value; - XBT_DEBUG("Updating min (value) with %p: %f", action, min); + XBT_DEBUG("Updating min (value) with %p: %f", &action, min); } } - if ((action->getMaxDuration() >= 0) && (min<0 || action->getMaxDuration() < min)) { - min = action->getMaxDuration(); - XBT_DEBUG("Updating min (duration) with %p: %f", action, min); + if ((action.getMaxDuration() >= 0) && (min < 0 || action.getMaxDuration() < min)) { + min = action.getMaxDuration(); + XBT_DEBUG("Updating min (duration) with %p: %f", &action, min); } } XBT_DEBUG("min value : %f", min); @@ -539,6 +541,11 @@ void Resource::turnOff() isOn_ = false; } +double Resource::getLoad() +{ + return constraint_->get_usage(); +} + Model* Resource::model() const { return model_; @@ -570,15 +577,6 @@ lmm_constraint_t Resource::constraint() const * Action * **********/ -const char *surf_action_state_names[6] = { - "SURF_ACTION_READY", - "SURF_ACTION_RUNNING", - "SURF_ACTION_FAILED", - "SURF_ACTION_DONE", - "SURF_ACTION_TO_FREE", - "SURF_ACTION_NOT_IN_THE_SYSTEM" -}; - namespace simgrid { namespace surf { @@ -607,7 +605,7 @@ void Action::finish(Action::State state) setState(state); } -Action::State Action::getState() +Action::State Action::getState() const { if (stateSet_ == model_->getReadyActionSet()) return Action::State::ready; @@ -622,7 +620,7 @@ Action::State Action::getState() void Action::setState(Action::State state) { - stateSet_->erase(stateSet_->iterator_to(*this)); + simgrid::xbt::intrusive_erase(*stateSet_, *this); switch (state) { case Action::State::ready: stateSet_ = model_->getReadyActionSet(); @@ -644,37 +642,22 @@ void Action::setState(Action::State state) stateSet_->push_back(*this); } -double Action::getBound() +double Action::getBound() const { - return (variable_) ? lmm_variable_getbound(variable_) : 0; + return variable_ ? variable_->get_bound() : 0; } void Action::setBound(double bound) { XBT_IN("(%p,%g)", this, bound); if (variable_) - lmm_update_variable_bound(getModel()->getMaxminSystem(), variable_, bound); + getModel()->getMaxminSystem()->update_variable_bound(variable_, bound); if (getModel()->getUpdateMechanism() == UM_LAZY && getLastUpdate() != surf_get_clock()) heapRemove(getModel()->getActionHeap()); XBT_OUT(); } -double Action::getStartTime() -{ - return start_; -} - -double Action::getFinishTime() -{ - return finishTime_; -} - -void Action::setData(void* data) -{ - data_ = data; -} - void Action::setCategory(const char *category) { category_ = xbt_strdup(category); @@ -695,7 +678,7 @@ void Action::setSharingWeight(double weight) { XBT_IN("(%p,%g)", this, weight); sharingWeight_ = weight; - lmm_update_variable_weight(getModel()->getMaxminSystem(), getVariable(), weight); + getModel()->getMaxminSystem()->update_variable_weight(getVariable(), weight); if (getModel()->getUpdateMechanism() == UM_LAZY) heapRemove(getModel()->getActionHeap()); @@ -706,7 +689,7 @@ void Action::cancel(){ setState(Action::State::failed); if (getModel()->getUpdateMechanism() == UM_LAZY) { if (action_lmm_hook.is_linked()) - getModel()->getModifiedSet()->erase(getModel()->getModifiedSet()->iterator_to(*this)); + simgrid::xbt::intrusive_erase(*getModel()->getModifiedSet(), *this); heapRemove(getModel()->getActionHeap()); } } @@ -715,14 +698,14 @@ int Action::unref(){ refcount_--; if (not refcount_) { if (action_hook.is_linked()) - stateSet_->erase(stateSet_->iterator_to(*this)); + simgrid::xbt::intrusive_erase(*stateSet_, *this); if (getVariable()) - lmm_variable_free(getModel()->getMaxminSystem(), getVariable()); + getModel()->getMaxminSystem()->variable_free(getVariable()); if (getModel()->getUpdateMechanism() == UM_LAZY) { /* remove from heap */ heapRemove(getModel()->getActionHeap()); if (action_lmm_hook.is_linked()) - getModel()->getModifiedSet()->erase(getModel()->getModifiedSet()->iterator_to(*this)); + simgrid::xbt::intrusive_erase(*getModel()->getModifiedSet(), *this); } delete this; return 1; @@ -733,8 +716,8 @@ int Action::unref(){ void Action::suspend() { XBT_IN("(%p)", this); - if (suspended_ != 2) { - lmm_update_variable_weight(getModel()->getMaxminSystem(), getVariable(), 0.0); + if (suspended_ != SuspendStates::sleeping) { + getModel()->getMaxminSystem()->update_variable_weight(getVariable(), 0.0); if (getModel()->getUpdateMechanism() == UM_LAZY){ heapRemove(getModel()->getActionHeap()); if (getModel()->getUpdateMechanism() == UM_LAZY && stateSet_ == getModel()->getRunningActionSet() && @@ -743,7 +726,7 @@ void Action::suspend() updateRemainingLazy(surf_get_clock()); } } - suspended_ = 1; + suspended_ = SuspendStates::suspended; } XBT_OUT(); } @@ -751,9 +734,9 @@ void Action::suspend() void Action::resume() { XBT_IN("(%p)", this); - if (suspended_ != 2) { - lmm_update_variable_weight(getModel()->getMaxminSystem(), getVariable(), getPriority()); - suspended_ = 0; + if (suspended_ != SuspendStates::sleeping) { + getModel()->getMaxminSystem()->update_variable_weight(getVariable(), getPriority()); + suspended_ = SuspendStates::not_suspended; if (getModel()->getUpdateMechanism() == UM_LAZY) heapRemove(getModel()->getActionHeap()); } @@ -762,7 +745,7 @@ void Action::resume() bool Action::isSuspended() { - return suspended_ == 1; + return suspended_ == SuspendStates::suspended; } /* insert action on heap using a given key and a hat (heap_action_type) * a hat can be of three types for communications: @@ -771,7 +754,7 @@ bool Action::isSuspended() * LATENCY = this is a heap entry to warn us when the latency is payed * MAX_DURATION =this is a heap entry to warn us when the max_duration limit is reached */ -void Action::heapInsert(heap_type& heap, double key, enum heap_action_type hat) +void Action::heapInsert(heap_type& heap, double key, Action::Type hat) { hat_ = hat; heapHandle_ = heap.emplace(std::make_pair(key, this)); @@ -779,14 +762,14 @@ void Action::heapInsert(heap_type& heap, double key, enum heap_action_type hat) void Action::heapRemove(heap_type& heap) { - hat_ = NOTSET; + hat_ = Action::Type::NOTSET; if (heapHandle_) { heap.erase(*heapHandle_); clearHeapHandle(); } } -void Action::heapUpdate(heap_type& heap, double key, enum heap_action_type hat) +void Action::heapUpdate(heap_type& heap, double key, Action::Type hat) { hat_ = hat; if (heapHandle_) { @@ -806,10 +789,5 @@ double Action::getRemains() return remains_; } -double Action::getRemainsNoUpdate() -{ - return remains_; -} - } }