Move xen interrupt handlers to dedicated task queues
authormikeb <mikeb@openbsd.org>
Fri, 29 Jul 2016 21:27:43 +0000 (21:27 +0000)
committermikeb <mikeb@openbsd.org>
Fri, 29 Jul 2016 21:27:43 +0000 (21:27 +0000)
commit5c0d44b119736584aa2c93c8cdc3e3c71a13ff05
treedf678a8f4aa55746d82534922a184d3dd4fba7fa
parent55f4ff3de7886f674d9baf99ebdb78ee57c506be
Move xen interrupt handlers to dedicated task queues

Handling receive and transmit for multiple networking interfaces
in a "shared interrupt" within normal interrupt vector code path
introduces too much delay from the hypervisor POV which prevents
it from injecting further completion event interrupts for Rx and
Tx queues.

Additionally, Netfront backend driver includes a mechanism to
detect Rx ring stalls and "turn the carrier off" when the guest
is not replenishing the ring (e.g. due to missing completion
interrupts) that relies on guest waking up periodically and making
sure that the Rx ring completion handling is progressing.

Having tried both task queue + timeout and interrupts + timeout
approaches, it appears that using  the task queue is more flexible
and provides superior performance under heavy network load.
sys/dev/pv/xen.c
sys/dev/pv/xenvar.h