vnc: 0.841 other: 0.828 semantic: 0.822 device: 0.743 PID: 0.734 debug: 0.729 permissions: 0.702 graphic: 0.701 KVM: 0.695 performance: 0.687 network: 0.597 boot: 0.593 files: 0.576 socket: 0.547 dataplane interrupt handler doesn't support msi hw/block/dataplane/virtio-blk.c commit 1010cadf62332017648abee0d7a3dc7f2eef9632 in the function notify_guest_bh, the function virtio_notify_irqfd is called to deliver the interrupt corresponding to the vq however, without the dataplane, hw/block/virtio_blk_req_complete calls virtio_notify to deliver the interrupt (immediately). this goes though a slightly more involved path that calls virtio_pci_notify which includes a case to handle msi interrupts. so, msi interrupts with block devices aren't serviced when using dataplane batching. diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c index 101f32c..31d9eb8 100644 --- a/hw/block/dataplane/virtio-blk.c +++ b/hw/block/dataplane/virtio-blk.c @@ -73,7 +73,7 @@ static void notify_guest_bh(void *opaque) unsigned i = j + ctzl(bits); VirtQueue *vq = virtio_get_queue(s->vdev, i); - virtio_notify_irqfd(s->vdev, vq); + virtio_notify(s->vdev, vq); bits &= bits - 1; /* clear right-most bit */ } oh right, another note. this only manifests when using kvm. On Mon, May 14, 2018 at 03:00:44AM -0000, eric hoffman wrote: > diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c > index 101f32c..31d9eb8 100644 > --- a/hw/block/dataplane/virtio-blk.c > +++ b/hw/block/dataplane/virtio-blk.c > @@ -73,7 +73,7 @@ static void notify_guest_bh(void *opaque) > unsigned i = j + ctzl(bits); > VirtQueue *vq = virtio_get_queue(s->vdev, i); > > - virtio_notify_irqfd(s->vdev, vq); > + virtio_notify(s->vdev, vq); > > bits &= bits - 1; /* clear right-most bit */ > } Please send patches to