On Mon, Mar 10, 2025 at 03:43:57PM +0100, Kevin Wolf wrote: > Am 13.02.2025 um 19:00 hat Stefan Hajnoczi geschrieben: > > Implement --device virtio-scsi-pci,iothread-vq-mapping= support so that > > virtqueues can be assigned to different IOThreads. This improves SMP guest > > scalability where I/O-intensive applications can become bottlenecked on a > > single IOThread. > > > > The following benchmark results show the effect of iothread-vq-mapping. fio > > randread 4k iodepth=64 results from a 4 vCPU guest with an Intel P4800X SSD: > > iothreads IOPS > > ------------------------------ > > 1 189576 > > 2 312698 > > 4 346744 > > > > The virtio-scsi device model and core SCSI emulation currently assume that > > requests are processed in a single AioContext. This patch series goes about > > modifying this as follows: > > > > scsi-disk: drop unused SCSIDiskState->bh field > > dma: use current AioContext for dma_blk_io() > > > > Make dma-helpers.c support the QEMU multi-queue block layer by using > > qemu_get_current_aio_context(). > > > > scsi: track per-SCSIRequest AioContext > > scsi: introduce requests_lock > > > > Make the core SCSI emulation code support processing requests in multiple > > AioContexts by protecting the per-SCSIDevice requests list. > > > > virtio-scsi: introduce event and ctrl virtqueue locks > > virtio-scsi: protect events_dropped field > > virtio-scsi: perform TMFs in appropriate AioContexts > > > > Make the virtio-scsi emulation code support processing requests in multiple > > AioContexts. The event and ctrl virtqueues can interact with multiple > > AioContexts. Especially the SCSI Task Management Functions (TMFs) handled by > > the ctrl virtqueue need to be made thread-safe. > > > > virtio-blk: extract cleanup_iothread_vq_mapping() function > > virtio-blk: tidy up iothread_vq_mapping functions > > virtio: extract iothread-vq-mapping.h API > > virtio-scsi: add iothread-vq-mapping parameter > > > > Port over the iothread-vq-mapping qdev property from virtio-blk to > > virtio-scsi. > > > > virtio-scsi: handle ctrl virtqueue in main loop > > > > Simplify TMF handling now that there is no longer a single AioContext where > > all > > requests are processed. > > > > Stefan Hajnoczi (12): > > scsi-disk: drop unused SCSIDiskState->bh field > > dma: use current AioContext for dma_blk_io() > > scsi: track per-SCSIRequest AioContext > > scsi: introduce requests_lock > > virtio-scsi: introduce event and ctrl virtqueue locks > > virtio-scsi: protect events_dropped field > > virtio-scsi: perform TMFs in appropriate AioContexts > > virtio-blk: extract cleanup_iothread_vq_mapping() function > > virtio-blk: tidy up iothread_vq_mapping functions > > virtio: extract iothread-vq-mapping.h API > > virtio-scsi: add iothread-vq-mapping parameter > > virtio-scsi: handle ctrl virtqueue in main loop > > Patches 1-10: Reviewed-by: Kevin Wolf <kw...@redhat.com>
Thank you. I'm preparing another revision that applies a fixed mapping to the ctrl and event vqs and only exposes the command vqs through the iothread-vq-mapping property. Stefan
signature.asc
Description: PGP signature