git: DragonFly_RELEASE_4_6 kernel - Deal with lost IPIs (VM related)
Matthew Dillon
dillon at crater.dragonflybsd.org
Sun Sep 11 18:12:11 PDT 2016
commit 46b5c9082ad5c4c7de03a86e8cda85240effe576
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Mon Sep 5 17:11:05 2016 -0700
kernel - Deal with lost IPIs (VM related)
* Some (all?) VMs appear to be able to lose IPIs. Hopefully the same can't
be said for device interrupts! Add some recovery code for lost Xinvltlb
IPIs for now.
For synchronizing invalidations we use the TSC and run a recovery attempt
after 1/16 second, and every 1 second there-after, if an Xinvltlb is not
responded to (smp_invltlb() and smp_invlpg()). The IPI will be re-issued.
* Some basic testing shows that a VM can stall out a cpu thread for an
indefinite period of time, potentially causing the above watchdog to
trigger. Even so it should not have required re-issuing the IPI, but
it seems it does, so the VM appears to be losing the IPI(!) when a cpu
thread stalls out on the host! At least with the VM we tested under,
type unknown.
* IPIQ IPIs currently do not have any specific recovery but I think each
cpu will poll for IPIQs slowly in the idle thread, so they might
automatically recover anyway.
Reported-by: zach
Summary of changes:
sys/platform/pc64/x86_64/mp_machdep.c | 24 +++++---
sys/platform/pc64/x86_64/pmap_inval.c | 113 ++++++++++++++++++++--------------
2 files changed, 85 insertions(+), 52 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/46b5c9082ad5c4c7de03a86e8cda85240effe576
--
DragonFly BSD source repository
More information about the Commits
mailing list