Dear maintainers, since QEMU 10.2, if io_uring is enabled, it will be used for the event loop of iothreads and this causes an IO pressure stall value of nearly 100 when idle.
The issue was also reported on the kernel mailing list [0]. The suggestion from Jens Axboe was to just turn off the iowait accounting completely. But since (for block/file-posix.c), there is actual IO submitted via the same ring, I wasn't sure if that is the right approach. So the idea was to keep track of whether the event loop is otherwise idle and only use the IORING_ENTER_NO_IOWAIT flag in that case [1]. However, doing so would only help for block/file-posix.c, which submits IO via luring_co_submit() -> fdmon_io_uring_add_sqe(). For example, for block/rbd.c, only a poll SQE for the AioHandler node's fd is used. When submitting that poll SQE in the iothread, we would need to be able to know if IO for RBD is currently in-flight or not to be able to decide whether to use the IORING_ENTER_NO_IOWAIT flag or not. Is there a good way to do this (in a general way)? Or should the flag really always be used (if supported by the kernel)? Is there a way to tell io_uring/kernel that we are an event loop and our waiting should only be accounted for when there is actual IO in-flight? Happy to hear your opinions and suggestions! [0]: https://lore.kernel.org/io-uring/[email protected]/T/ [1]: https://lore.proxmox.com/pve-devel/[email protected]/T/ Best Regards, Fiona
