use simple waitqueue for kvm vcpu waitqueue (v3)
Get series with b4
b4 am [email protected]Versions newest first
- v1 Latest2 patches 23 repliesIn review
Patches in v1 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/2 | KVM: use simple waitqueue for vcpu->wqarch/ arch/ arch/ +9 more | +54 | 21 replies | |
| 2/2 | KVM: lapic: mark LAPIC timer handler as irqsafearch/ | +39 | 1 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.
| Patch | Paolo Bonzini | Rik van Riel | Peter Zijlstra (Intel) |
|---|---|---|---|
| Series | R-b | ||
| 1/2 | A-b | Mostly-Signed-off-by | |
| 2/2 | A-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.
Cover letter [patch -rt 0/2] use simple waitqueue for kvm vcpu waitqueue (v3)
Against v3.14-rt branch ofgit://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)