mirror of
https://github.com/mii443/qemu.git
synced 2025-12-03 11:08:25 +00:00
qdev: add IOThreadVirtQueueMappingList property type
virtio-blk and virtio-scsi devices will 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.
Introduce DEFINE_PROP_IOTHREAD_VQ_MAPPING_LIST() so devices can take a
parameter that maps virtqueues to IOThreads. The command-line syntax for
this new property is as follows:
--device '{"driver":"foo","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":"foo","iothread-vq-mapping":[{"iothread":"iothread0"},{"iothread":"iothread1"},...]}'
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-ID: <20231220134755.814917-4-stefanha@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
committed by
Kevin Wolf
parent
350147a871
commit
cf03a152c5
@@ -928,3 +928,32 @@
|
||||
'data': { 'path': 'str', 'queue': 'uint16', '*index': 'uint16' },
|
||||
'returns': 'VirtioQueueElement',
|
||||
'features': [ 'unstable' ] }
|
||||
|
||||
##
|
||||
# @IOThreadVirtQueueMapping:
|
||||
#
|
||||
# Describes the subset of virtqueues assigned to an IOThread.
|
||||
#
|
||||
# @iothread: the id of IOThread object
|
||||
#
|
||||
# @vqs: an optional array of virtqueue indices that will be handled by this
|
||||
# IOThread. When absent, virtqueues are assigned round-robin across all
|
||||
# IOThreadVirtQueueMappings provided. Either all IOThreadVirtQueueMappings
|
||||
# must have @vqs or none of them must have it.
|
||||
#
|
||||
# Since: 9.0
|
||||
##
|
||||
|
||||
{ 'struct': 'IOThreadVirtQueueMapping',
|
||||
'data': { 'iothread': 'str', '*vqs': ['uint16'] } }
|
||||
|
||||
##
|
||||
# @DummyVirtioForceArrays:
|
||||
#
|
||||
# Not used by QMP; hack to let us use IOThreadVirtQueueMappingList internally
|
||||
#
|
||||
# Since: 9.0
|
||||
##
|
||||
|
||||
{ 'struct': 'DummyVirtioForceArrays',
|
||||
'data': { 'unused-iothread-vq-mapping': ['IOThreadVirtQueueMapping'] } }
|
||||
|
||||
Reference in New Issue
Block a user