aboutsummaryrefslogtreecommitdiff
path: root/scsi
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@redhat.com>2022-04-27 15:35:37 +0100
committerStefan Hajnoczi <stefanha@redhat.com>2022-05-09 10:45:04 +0100
commit38738f7dbbda90fbc161757b7f4be35b52205552 (patch)
tree988e4b58b3216bc1107759359931a47dca2324d6 /scsi
parent2f743ef6366c2df4ef51ef3ae318138cdc0125ab (diff)
downloadqemu-38738f7dbbda90fbc161757b7f4be35b52205552.zip
qemu-38738f7dbbda90fbc161757b7f4be35b52205552.tar.gz
qemu-38738f7dbbda90fbc161757b7f4be35b52205552.tar.bz2
virtio-scsi: don't waste CPU polling the event virtqueue
The virtio-scsi event virtqueue is not emptied by its handler function. This is typical for rx virtqueues where the device uses buffers when some event occurs (e.g. a packet is received, an error condition happens, etc). Polling non-empty virtqueues wastes CPU cycles. We are not waiting for new buffers to become available, we are waiting for an event to occur, so it's a misuse of CPU resources to poll for buffers. Introduce the new virtio_queue_aio_attach_host_notifier_no_poll() API, which is identical to virtio_queue_aio_attach_host_notifier() except that it does not poll the virtqueue. Before this patch the following command-line consumed 100% CPU in the IOThread polling and calling virtio_scsi_handle_event(): $ qemu-system-x86_64 -M accel=kvm -m 1G -cpu host \ --object iothread,id=iothread0 \ --device virtio-scsi-pci,iothread=iothread0 \ --blockdev file,filename=test.img,aio=native,cache.direct=on,node-name=drive0 \ --device scsi-hd,drive=drive0 After this patch CPU is no longer wasted. Reported-by: Nir Soffer <nsoffer@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Tested-by: Nir Soffer <nsoffer@redhat.com> Message-id: 20220427143541.119567-3-stefanha@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'scsi')
0 files changed, 0 insertions, 0 deletions