Hi Stefan and all,
I spent some time on getting familiar with QEMU and relevant concepts. My project is using QEMU 2.9 with virtio-scsi backend, and I am exploring proper way to improve the IOPS of my project. Thanks @Stefan for the response and advices! Could you please help review and clarify following questions: While @Stefan mentioned about additional iothread object support of virtio-blk, Is the feature also supported by virtio-scsi? I am trying to exploring the perf multiple IO threads / per VM via followings: QMP setup example to create 2 io threads in QEMU, one io thread per device: (QEMU) object-add qom-type=iothread id=iothread0 (QEMU) object-add qom-type=iothread id=iothread1 (QEMU) device_add driver=virtio-scsi-pci id=test0 iothread=iothread0 (QEMU) device_add driver=virtio-scsi-pci id=test1 iothread=iothread1 (QEMU) device_add driver=scsi-block drive=none0 id=v0 bus=test0.0 (QEMU) device_add driver=scsi-block drive=none1 id=v1 bus=test1.0 You mentioned about the multi-queue devices feature, it seems like the multi-queue feature will help improve the IOPS of single Device. Could you please provide more details? What’s the current plan of support multi-queue device? Which release will include the support or it has already been included in any existing release newer than 2.9? Is there any feature branch which I would get more details about the code and in progress status? In addition, Someone posted related to multi-queue https://marc.info/?l=linux-virtualization&m=135583400026151&w=2, but it only measure the bandwidth, do we have any perf result about IOPS improvement of Multi-Queue approach? Thanks again, Wei On 2/18/19, 2:24 AM, "Stefan Hajnoczi" <stefa...@redhat.com> wrote: On Thu, Feb 14, 2019 at 08:21:30AM -0800, Wei Li wrote: > I learnt that QEMU iothread architecture has one QEMU thread per vCPU and a dedicated event loop thread which is iothread, and I want to better understand whether there is any specific reason to have a single iothead instead of multiple iothreads? > Given that single iothread becomes a performance bottleneck in my project, if there any proper way to support multiple iothreads? E.g. have one iothread per volume attachment instead of single iothread per host? But I am not quite sure whether it is feasible or not. Please let me know if you have any advices. Hi, Please send general questions to qemu-devel@nongnu.org and CC me in the future. That way others can participate in the discussion and it will be archived so someone searching for the same question will find the answer in the future. QEMU supports additional IOThread objects: -object iothread,id=iothread0 -device virtio-blk-pci,iothread=iothread0,drive=drive0 This virtio-blk device will perform device emulation and I/O in iothread0 instead of the main loop thread. Currently only 1:1 device<->IOThread association is possible. In the future 1:N should be possible and will allow multi-queue devices to achieve better performance. Stefan