Thread (15 messages) flat view 15 messages, 5 authors, 2011-07-28

Re: On migrate_disable() and latencies

From: Thomas Gleixner <hidden>
Date: 2011-07-28 07:01:35
Also in: lkml

On Thu, 28 Jul 2011, Yong Zhang wrote:
On Wed, Jul 27, 2011 at 11:30:08AM -0700, Paul E. McKenney wrote:
quoted
o	Tasks awakening outside of migrate-disable regions will pick
	the CPU running the lowest-priority task, whether or not this
	task is in migrate-disable state.  (At least I don't see
	anything in 3.0-rt3 that looks like a scheduling decision
	based on ->migrate_disable, perhaps due to blindness.)
I'm also confused here, seems we just disable migration for RT task.
migrate_disable()
{
	...
		if (p->sched_class->set_cpus_allowed)
			p->sched_class->set_cpus_allowed(p, mask);
		p->rt.nr_cpus_allowed =	cpumask_weight(mask);
	...
}

Shouldn't we also forbid migration on !RT task?
We do. Just RT is the only sched class which has a set_cpus_allowed()
callback implemented and want's an update to its rt.nr_cpus_allowed
field.

       if (!p->migrate_disable) {
                if (p->sched_class && p->sched_class->set_cpus_allowed)
                        p->sched_class->set_cpus_allowed(p, new_mask);
                p->rt.nr_cpus_allowed = cpumask_weight(new_mask);
        }

The general part is here:

       cpumask_copy(&p->cpus_allowed, new_mask);

And tsk_cpus_allowed() does:
{
        if (p->migrate_disable)
                return cpumask_of(task_cpu(p));

        return &p->cpus_allowed;
}

which is the relevant information to keep any task independent of it's
sched class pinned.

Thanks,

	tglx
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help