RT scheduling: wakeup bug?

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Ingo Molnar <mingo@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>
Date: Monday, October 1, 2007 - 6:15 pm

I've been trying to track down some unexpected realtime latencies and
believe one source is a bug in the wakeup code.  Specifically, this is
within the try_to_wake_up() routine.  Within this routine there is the
following code segment:

	/*
	 * If a newly woken up RT task cannot preempt the
	 * current (RT) task (on a target runqueue) then try
	 * to find another CPU it can preempt:
	 */
	if (rt_task(p) && !TASK_PREEMPTS_CURR(p, rq)) {
		struct rq *this_rq = cpu_rq(this_cpu);
		/*
		 * Special-case: the task on this CPU can be
		 * preempted. In that case there's no need to
		 * trigger reschedules on other CPUs, we can
		 * mark the current task for reschedule.
		 *
		 * (Note that it's safe to access this_rq without
		 * extra locking in this particular case, because
		 * we are on the current CPU.)
		 */
		if (TASK_PREEMPTS_CURR(p, this_rq))
			set_tsk_need_resched(this_rq->curr);
		else
			/*
			 * Neither the intended target runqueue
			 * nor the current CPU can take this task.
			 * Trigger a reschedule on all other CPUs
			 * nevertheless, maybe one of them can take
			 * this task:
			 */
			smp_send_reschedule_allbutself_cpumask(p->cpus_allowed);

		schedstat_inc(this_rq, rto_wakeup);
	}

This logic seems appropriate.  But, the task 'p' is most likely not on
the runqueue when sending the IPI.  It gets added to the runqueue a
little later in the routine.  As a result, the 'rt_overload' global may
not be set (based on the count of RT tasks on the runqueue) and other
CPUs may 'pass over' the runqueue when doing RT load balancing.

My observations/debugging/conclusions are based on an earlier version
of the code.  It appears the same code/issue still exists in the most
version.  But, I have not not done any work with the latest version.

-- 
Mike
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
RT scheduling: wakeup bug?, Mike Kravetz, (Mon Oct 1, 6:15 pm)
Re: -rt scheduling: wakeup bug?, Ingo Molnar, (Tue Oct 2, 1:06 am)
Re: -rt scheduling: wakeup bug?, Mike Kravetz, (Wed Oct 3, 1:37 pm)
Re: -rt scheduling: wakeup bug?, Ingo Molnar, (Thu Oct 4, 4:02 am)
Re: -rt scheduling: wakeup bug?, Mike Kravetz, (Tue Oct 2, 3:30 pm)
Re: -rt scheduling: wakeup bug?, Steven Rostedt, (Tue Oct 2, 3:37 pm)