[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 00/12] virtio-scsi: add iothread-vq-mapping parameter
From: |
Stefan Hajnoczi |
Subject: |
Re: [PATCH 00/12] virtio-scsi: add iothread-vq-mapping parameter |
Date: |
Tue, 11 Mar 2025 17:22:02 +0800 |
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 <kwolf@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