On 08/11/2016 16:39, Stefan Hajnoczi wrote: > The current status is: > > 1. virtio-blk and virtio-scsi support multiple queues but these queues > are processed from a single thread today. > > 2. MemoryRegions can be marked with !global_locking so its handler > functions are dispatched without taking the QEMU global mutex. This > allows device emulation to run in multiple threads.
Alternatively, virtio-blk and virtio-scsi can already use ioeventfd and "-object iothread,id=FOO -device virtio-blk-pci,iothread=FOO" to let device emulation run in a separate thread that doesn't take the QEMU global mutex. > 3. Paolo Bonzini (CCed) is currently working on make the block layer > (BlockDriverState and co) support access from multiple threads and > multiqueue. This is work in progress. > > If you are interested in this work keep an eye out for patch series from > Paolo Bonzini and Fam Zheng. The first part (drop RFifoLock) was committed for 2.8. It's a relatively long road, but these are the currently ready parts of the work: - take AioContext acquire/release in small critical sections - push AioContext down to individual callbacks - make BlockDriverState thread-safe The latter needs rebasing after the last changes to dirty bitmaps, but I think these patches should be ready for 2.9. These are the planned bits: - replace AioContext with fine-grained mutex in bdrv_aio_* - protect everything with CoMutex in bdrv_co_* - remove aio_context_acquire/release For now I was not planning to make network backends support multiqueue, only files. Paolo