Skip to content

use simple waitqueue for kvm vcpu waitqueue (v3)

Marcelo Tosatti kvm linux-rt-users lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest2 patches 23 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/2KVM: use simple waitqueue for vcpu->wqarch/arm/kvm/arm.c arch/arm/kvm/psci.c arch/mips/kvm/kvm_mips.c +9 more+54 -5621 replies
2/2KVM: lapic: mark LAPIC timer handler as irqsafearch/x86/kvm/lapic.c+39 -31 reply

Reviews trailers per patch

All 2 patches have a Reviewed-by or Acked-by of their own; the series has one for all of them.

PatchPaolo BonziniRik van RielPeter Zijlstra (Intel)
SeriesR-b
1/2A-b Mostly-Signed-off-by
2/2A-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 3 reviewers.

Read the v1 thread

Cover letter [patch -rt 0/2] use simple waitqueue for kvm vcpu waitqueue (v3)

Against v3.14-rt branch of
git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git

The problem:

On -RT, an emulated LAPIC timer instance 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.

cyclictest command line:

# cyclictest -m -n -q -p99 -l 1000000 -h60  -D 1m

This patch reduces the average latency in my tests from 14us to 11us.

v2: improve changelog (Rik van Riel)
v3: limit (once) guest triggered printk and WARN_ON (Paolo Bonzini)