- TRACE_surf_host_set_utilization(cpu->getName(), getCategory(), m_lastValue, m_lastUpdate, now - m_lastUpdate);
- }
- XBT_CDEBUG(surf_kernel, "Updating action(%p): remains is now %f", this, m_remains);
- }
-
- m_lastUpdate = now;
- m_lastValue = lmm_variable_getvalue(getVariable());
-}
-
-/*
- *
- * This function formulates a constraint problem that pins a given task to
- * particular cores. Currently, it is possible to pin a task to an exactly one
- * specific core. The system links the variable object of the task to the
- * per-core constraint object.
- *
- * But, the taskset command on Linux takes a mask value specifying a CPU
- * affinity setting of a given task. If the mask value is 0x03, the given task
- * will be executed on the first core (CPU0) or the second core (CPU1) on the
- * given PM. The schedular will determine appropriate placements of tasks,
- * considering given CPU affinities and task activities.
- *
- * How should the system formulate constraint problems for an affinity to
- * multiple cores?
- *
- * The cpu argument must be the host where the task is being executed. The
- * action object does not have the information about the location where the
- * action is being executed.
- */
-void CpuAction::setAffinity(Cpu *cpu, unsigned long mask)
-{
- lmm_variable_t var_obj = getVariable();
- XBT_IN("(%p,%lx)", this, mask);
-
- {
- unsigned long nbits = 0;
-
- /* FIXME: There is much faster algorithms doing this. */
- for (int i = 0; i < cpu->m_core; i++) {
- unsigned long has_affinity = (1UL << i) & mask;
- if (has_affinity)
- 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;