On Mon, Sep 18, 2023 at 12:16:02PM -0400, Stefan Hajnoczi wrote:
> virtio-blk and virtio-scsi devices need a way to specify the mapping between
> IOThreads and virtqueues. At the moment all virtqueues are assigned to a
> single
> IOThread or the main loop. This single thread can be a CPU bottleneck, so it
> is
> necessary to allow finer-grained assignment to spread the load. With this
> series applied, "pidstat -t 1" shows that guests with -smp 2 or higher are
> able
> to exploit multiple IOThreads.
>
> This series introduces command-line syntax for the new iothread-vq-mapping
> property is as follows:
>
> --device
> '{"driver":"virtio-blk-pci","iothread-vq-mapping":[{"iothread":"iothread0","vqs":[0,1,2]},...]},...'
>
> IOThreads are specified by name and virtqueues are specified by 0-based
> index.
>
> It will be common to simply assign virtqueues round-robin across a set
> of IOThreads. A convenient syntax that does not require specifying
> individual virtqueue indices is available:
>
> --device
> '{"driver":"virtio-blk-pci","iothread-vq-mapping":[{"iothread":"iothread0"},{"iothread":"iothread1"},...]},...'
>
> There is no way to reassign virtqueues at runtime and I expect that to be a
> very rare requirement.
>
> Note that JSON --device syntax is required for the iothread-vq-mapping
> parameter because it's non-scalar.
>
> Based-on: [email protected] ("[PATCH v3 0/5]
> block-backend: process I/O in the current AioContext")
Acked-by: Michael S. Tsirkin <[email protected]>
More of a block thingy so pls use that tree.
> Stefan Hajnoczi (2):
> qdev: add IOThreadVirtQueueMappingList property type
> virtio-blk: add iothread-vq-mapping parameter
>
> qapi/virtio.json | 30 +++++
> hw/block/dataplane/virtio-blk.h | 3 +
> include/hw/qdev-properties-system.h | 4 +
> include/hw/virtio/virtio-blk.h | 2 +
> hw/block/dataplane/virtio-blk.c | 163 +++++++++++++++++++++-------
> hw/block/virtio-blk.c | 92 ++++++++++++++--
> hw/core/qdev-properties-system.c | 47 ++++++++
> 7 files changed, 287 insertions(+), 54 deletions(-)
>
> --
> 2.41.0