Commit 9ef9d402 authored by Stefan Hajnoczi's avatar Stefan Hajnoczi
Browse files

virtio-blk: suppress virtqueue kick during processing



The guest does not need to kick the virtqueue while we are processing
it.  This reduces the number of vmexits during periods of heavy I/O.

Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Message-id: 20161201192652.9509-8-stefanha@redhat.com
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent 0d9d86fb
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -588,6 +588,9 @@ void virtio_blk_handle_vq(VirtIOBlock *s, VirtQueue *vq)

    blk_io_plug(s->blk);

    do {
        virtio_queue_set_notification(vq, 0);

        while ((req = virtio_blk_get_request(s, vq))) {
            if (virtio_blk_handle_request(req, &mrb)) {
                virtqueue_detach_element(req->vq, &req->elem, 0);
@@ -596,6 +599,9 @@ void virtio_blk_handle_vq(VirtIOBlock *s, VirtQueue *vq)
            }
        }

        virtio_queue_set_notification(vq, 1);
    } while (!virtio_queue_empty(vq));

    if (mrb.num_reqs) {
        virtio_blk_submit_multireq(s->blk, &mrb);
    }