Re: [patch -rt 1/2] KVM: use simple waitqueue for vcpu->wq

Marcelo Tosatti
2014-11-25T19:30:54Z

On Tue, Nov 25, 2014 at 01:57:37PM -0500, Rik van Riel wrote:
> On 11/25/2014 12:21 PM, Marcelo Tosatti wrote:
> > The problem:
> >
> > On -RT, an emulated LAPIC timer instances has the following path:
> >
> > 1) hard interrupt
> > 2) ksoftirqd is scheduled
> > 3) ksoftirqd wakes up vcpu thread
> > 4) vcpu thread is scheduled
> >
> > This extra context switch introduces unnecessary latency in the
> > LAPIC path for a KVM guest.
> >
> > The solution:
> >
> > Allow waking up vcpu thread from hardirq context,
> > thus avoiding the need for ksoftirqd to be scheduled.
> >
> > Normal waitqueues make use of spinlocks, which on -RT
> > are sleepable locks. Therefore, waking up a waitqueue
> > waiter involves locking a sleeping lock, which
> > is not allowed from hard interrupt context.
> >
>
> What are the consequences for the realtime kernel of
> making waitqueue traversal non-preemptible?
>
> Is waitqueue traversal something that ever takes so
> long we need to care about it being non-preemptible?

commit d872cfa018625071a3a6b1ea8a62a2790d2c157a
Author: Thomas Gleixner <tglx@linutronix.de>
Date: Mon Dec 12 12:29:04 2011 +0100

wait-simple: Simple waitqueue implementation

wait_queue is a swiss army knife and in most of the cases the
complexity is not needed. For RT waitqueues are a constant source of
trouble as we can't convert the head lock to a raw spinlock due to
fancy and long lasting callbacks.

Unsure about the details...