提交 9ef9d402 编写于 作者: S Stefan Hajnoczi

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: NStefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
Message-id: 20161201192652.9509-8-stefanha@redhat.com
Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
上级 0d9d86fb
...@@ -588,13 +588,19 @@ void virtio_blk_handle_vq(VirtIOBlock *s, VirtQueue *vq) ...@@ -588,13 +588,19 @@ void virtio_blk_handle_vq(VirtIOBlock *s, VirtQueue *vq)
blk_io_plug(s->blk); blk_io_plug(s->blk);
while ((req = virtio_blk_get_request(s, vq))) { do {
if (virtio_blk_handle_request(req, &mrb)) { virtio_queue_set_notification(vq, 0);
virtqueue_detach_element(req->vq, &req->elem, 0);
virtio_blk_free_request(req); while ((req = virtio_blk_get_request(s, vq))) {
break; if (virtio_blk_handle_request(req, &mrb)) {
virtqueue_detach_element(req->vq, &req->elem, 0);
virtio_blk_free_request(req);
break;
}
} }
}
virtio_queue_set_notification(vq, 1);
} while (!virtio_queue_empty(vq));
if (mrb.num_reqs) { if (mrb.num_reqs) {
virtio_blk_submit_multireq(s->blk, &mrb); virtio_blk_submit_multireq(s->blk, &mrb);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册