#include "maxmin_private.hpp"
#include "simgrid/sg_config.h"
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu_cas, surf_cpu,
- "Logging specific to the SURF CPU IMPROVED module");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu_cas, surf_cpu, "Logging specific to the SURF CPU IMPROVED module");
/*********
* Model *
lmm_constraint_new(model->getMaxminSystem(), this, core * xbt_dynar_get_as(speedPerPstate, 0/*pstate*/, double)),
speedPerPstate, core)
{
- XBT_DEBUG("CPU create: peak=%f, pstate=%d", speed_.peak, pstate_);
-
- coresAmount_ = core;
}
CpuCas01::~CpuCas01()
CpuCas01Action *action = new CpuCas01Action(getModel(), 1.0, isOff(),
speed_.scale * speed_.peak, getConstraint());
-
// FIXME: sleep variables should not consume 1.0 in lmm_expand
action->m_maxDuration = duration;
action->m_suspended = 2;
#include "src/instr/instr_private.h" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals
XBT_LOG_EXTERNAL_CATEGORY(surf_kernel);
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu, surf,
- "Logging specific to the SURF cpu module");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu, surf, "Logging specific to the SURF cpu module");
-int autoload_surf_cpu_model = 1;
void_f_void_t surf_cpu_model_init_preparse = NULL;
simgrid::surf::CpuModel *surf_cpu_model_pm;
for(ActionList::iterator it(running_actions->begin()), itNext=it, itend(running_actions->end())
; it != itend ; it=itNext) {
- ++itNext;
+ ++itNext;
action = static_cast<CpuAction*>(&*it);
if (TRACE_is_enabled()) {
- Cpu *x = static_cast<Cpu*> (lmm_constraint_id(lmm_get_cnst_from_var(getMaxminSystem(), action->getVariable(), 0)) );
+ Cpu *cpu = static_cast<Cpu*> (lmm_constraint_id(lmm_get_cnst_from_var(getMaxminSystem(), action->getVariable(), 0)) );
- TRACE_surf_host_set_utilization(x->getName(),
+ TRACE_surf_host_set_utilization(cpu->getName(),
action->getCategory(),
lmm_variable_getvalue(action->getVariable()),
now - delta,
action->setState(SURF_ACTION_DONE);
}
}
-
- return;
}
/************
* Resource *
************/
-Cpu::Cpu(Model *model, simgrid::s4u::Host *host,
- xbt_dynar_t speedPerPstate, int core)
+Cpu::Cpu(Model *model, simgrid::s4u::Host *host, xbt_dynar_t speedPerPstate, int core)
: Cpu(model, host, NULL/*constraint*/, speedPerPstate, core)
{
}
xbt_dynar_push(speedPerPstate_, &value);
}
- /* Currently, we assume that a VM does not have a multicore CPU. */
- if (core > 1)
- xbt_assert(model == surf_cpu_model_pm);
+ xbt_assert(model == surf_cpu_model_pm || core==1, "Currently, VM cannot be multicore");
if (model->getUpdateMechanism() != UM_UNDEFINED) {
- p_constraintCore = xbt_new(lmm_constraint_t, core);
- p_constraintCoreId = xbt_new(void*, core);
+ p_constraintCore = xbt_new(lmm_constraint_t, core);
+ p_constraintCoreId = xbt_new(void*, core);
- int i;
- for (i = 0; i < core; i++) {
+ for (int i = 0; i < core; i++) {
/* just for a unique id, never used as a string. */
p_constraintCoreId[i] = bprintf("%s:%i", host->name().c_str(), i);
p_constraintCore[i] = lmm_constraint_new(model->getMaxminSystem(), p_constraintCoreId[i], speed_.scale * speed_.peak);
Cpu::~Cpu()
{
if (p_constraintCoreId){
- for (int i = 0; i < coresAmount_; i++) {
- xbt_free(p_constraintCoreId[i]);
- }
+ for (int i = 0; i < coresAmount_; i++)
+ xbt_free(p_constraintCoreId[i]);
xbt_free(p_constraintCore);
}
- if (p_constraintCoreId)
- xbt_free(p_constraintCoreId);
- if (speedPerPstate_)
- xbt_dynar_free(&speedPerPstate_);
+ xbt_free(p_constraintCoreId);
+ xbt_dynar_free(&speedPerPstate_);
}
double Cpu::getCurrentPowerPeak()
}
void Cpu::onSpeedChange() {
- TRACE_surf_host_set_speed(surf_get_clock(), getName(),
- coresAmount_ * speed_.scale * speed_.peak);
+ TRACE_surf_host_set_speed(surf_get_clock(), getName(), coresAmount_ * speed_.scale * speed_.peak);
}
void CpuAction::updateRemainingLazy(double now)
{
- double delta = 0.0;
+ xbt_assert(getStateSet() == getModel()->getRunningActionSet(), "You're updating an action that is not running.");
+ xbt_assert(getPriority() > 0, "You're updating an action that seems suspended.");
- xbt_assert(getStateSet() == getModel()->getRunningActionSet(),
- "You're updating an action that is not running.");
-
- /* bogus priority, skip it */
- xbt_assert(getPriority() > 0,
- "You're updating an action that seems suspended.");
-
- delta = now - m_lastUpdate;
+ double delta = now - m_lastUpdate;
if (m_remains > 0) {
XBT_CDEBUG(surf_kernel, "Updating action(%p): remains was %f, last_update was: %f", this, m_remains, m_lastUpdate);
nbits += 1;
}
- if (nbits > 1) {
- XBT_CRITICAL("Do not specify multiple cores for an affinity mask.");
- XBT_CRITICAL("See the comment in cpu_action_set_affinity().");
- DIE_IMPOSSIBLE;
- }
+ xbt_assert(nbits <= 1, "Affinity mask cannot span over multiple cores.");
}
for (int i = 0; i < cpu->coresAmount_; i++) {
**********/
/** @ingroup SURF_cpu_interface
- * @brief SURF Cpu action interface class
- * @details A CpuAction represent the execution of code on a Cpu
+ * @brief A CpuAction represents the execution of code on one or several Cpus
*/
XBT_PUBLIC_CLASS CpuAction : public simgrid::surf::Action {
friend XBT_PUBLIC(Cpu*) getActionCpu(CpuAction *action);
public:
-/** @brief Callbacks handler which emit the callbacks after CpuAction State changed *
- * @details Callback functions have the following signature: `void(CpuAction *action, e_surf_action_state_t previous)`
- */
+ /** @brief Callbacks handler which emit the callbacks after CpuAction State changed *
+ * @details Callback functions have the following signature: `void(CpuAction *action, e_surf_action_state_t previous)`
+ */
static simgrid::xbt::signal<void(simgrid::surf::CpuAction*, e_surf_action_state_t)> onStateChange;
- /** @brief CpuAction constructor */
CpuAction(simgrid::surf::Model *model, double cost, bool failed)
- : Action(model, cost, failed) {} //FIXME:DEADCODE?
-
- /** @brief CpuAction constructor */
+ : Action(model, cost, failed) {} //FIXME:DEADCODE?
CpuAction(simgrid::surf::Model *model, double cost, bool failed, lmm_variable_t var)
- : Action(model, cost, failed, var) {}
+ : Action(model, cost, failed, var) {}
- /**
- * @brief Set the affinity of the current CpuAction
- * @details [TODO]
- */
+ /** @brief Set the affinity of the current CpuAction */
virtual void setAffinity(Cpu *cpu, unsigned long mask);
void setState(e_surf_action_state_t state);
void updateRemainingLazy(double now);
-
};
}