* [PULL 0/3] Block patches
@ 2019-12-20 10:25 Stefan Hajnoczi
2020-01-03 18:50 ` Peter Maydell
0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2019-12-20 10:25 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Peter Maydell, Eduardo Habkost, qemu-block,
libvir-list, Jason Wang, Max Reitz, Stefan Hajnoczi
The following changes since commit aceeaa69d28e6f08a24395d0aa6915b687d0a681:
Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2019-12-17' into staging (2019-12-17 15:55:20 +0000)
are available in the Git repository at:
https://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 725fe5d10dbd4259b1853b7d253cef83a3c0d22a:
virtio-blk: fix out-of-bounds access to bitmap in notify_guest_bh (2019-12-19 16:20:25 +0000)
----------------------------------------------------------------
Pull request
----------------------------------------------------------------
Li Hangjing (1):
virtio-blk: fix out-of-bounds access to bitmap in notify_guest_bh
Stefan Hajnoczi (2):
virtio-blk: deprecate SCSI passthrough
docs: fix rst syntax errors in unbuilt docs
docs/arm-cpu-features.rst | 6 +++---
docs/virtio-net-failover.rst | 4 ++--
docs/virtio-pmem.rst | 19 ++++++++++---------
hw/block/dataplane/virtio-blk.c | 2 +-
qemu-deprecated.texi | 11 +++++++++++
5 files changed, 27 insertions(+), 15 deletions(-)
--
2.23.0
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2019-12-20 10:25 Stefan Hajnoczi
@ 2020-01-03 18:50 ` Peter Maydell
0 siblings, 0 replies; 31+ messages in thread
From: Peter Maydell @ 2020-01-03 18:50 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: Kevin Wolf, Eduardo Habkost, Qemu-block, Libvirt, Jason Wang,
QEMU Developers, Max Reitz
On Fri, 20 Dec 2019 at 10:25, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>
> The following changes since commit aceeaa69d28e6f08a24395d0aa6915b687d0a681:
>
> Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2019-12-17' into staging (2019-12-17 15:55:20 +0000)
>
> are available in the Git repository at:
>
> https://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 725fe5d10dbd4259b1853b7d253cef83a3c0d22a:
>
> virtio-blk: fix out-of-bounds access to bitmap in notify_guest_bh (2019-12-19 16:20:25 +0000)
>
> ----------------------------------------------------------------
> Pull request
>
> ----------------------------------------------------------------
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/5.0
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 0/3] Block patches
@ 2020-03-06 14:23 Stefan Hajnoczi
2020-03-06 17:02 ` Peter Maydell
0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2020-03-06 14:23 UTC (permalink / raw)
To: qemu-devel
Cc: Laurent Vivier, Peter Maydell, Thomas Huth, qemu-block,
Alexander Bulekov, Bandan Das, Stefan Hajnoczi, Paolo Bonzini
The following changes since commit ef9f8fcbec6276414921dcd042575129a6331a2d:
Merge remote-tracking branch 'remotes/stefanberger/tags/pull-tpm-2020-03-04-2' into staging (2020-03-05 19:39:47 +0000)
are available in the Git repository at:
https://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 1f40ace7b5634f93801c8474b9eb77fe2e00289c:
tests: Fix a bug with count variables (2020-03-06 10:35:15 +0000)
----------------------------------------------------------------
Pull request
These patches would have gone through Thomas Huth but he is away on leave.
----------------------------------------------------------------
Alexander Bulekov (2):
fuzz: fix style/typos in linker-script comments
qtest: fix fuzzer-related 80-char limit violations
Tianjia Zhang (1):
tests: Fix a bug with count variables
qtest.c | 3 ++-
tests/qtest/fuzz/fork_fuzz.ld | 16 ++++++++++------
tests/qtest/fuzz/qos_fuzz.c | 5 ++++-
tests/test-rcu-list.c | 2 +-
4 files changed, 17 insertions(+), 9 deletions(-)
--
2.24.1
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2020-03-06 14:23 Stefan Hajnoczi
@ 2020-03-06 17:02 ` Peter Maydell
0 siblings, 0 replies; 31+ messages in thread
From: Peter Maydell @ 2020-03-06 17:02 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: Laurent Vivier, Thomas Huth, Qemu-block, QEMU Developers,
Alexander Bulekov, Bandan Das, Paolo Bonzini
On Fri, 6 Mar 2020 at 14:23, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>
> The following changes since commit ef9f8fcbec6276414921dcd042575129a6331a2d:
>
> Merge remote-tracking branch 'remotes/stefanberger/tags/pull-tpm-2020-03-04-2' into staging (2020-03-05 19:39:47 +0000)
>
> are available in the Git repository at:
>
> https://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 1f40ace7b5634f93801c8474b9eb77fe2e00289c:
>
> tests: Fix a bug with count variables (2020-03-06 10:35:15 +0000)
>
> ----------------------------------------------------------------
> Pull request
>
> These patches would have gone through Thomas Huth but he is away on leave.
>
> ----------------------------------------------------------------
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/5.0
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 0/3] Block patches
@ 2020-08-17 15:16 Stefan Hajnoczi
2020-08-21 19:08 ` Peter Maydell
0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2020-08-17 15:16 UTC (permalink / raw)
To: qemu-devel, Peter Maydell
Cc: Fam Zheng, Kevin Wolf, Eduardo Habkost, qemu-block, Max Reitz,
Stefan Hajnoczi, Cleber Rosa, Paolo Bonzini
The following changes since commit d0ed6a69d399ae193959225cdeaa9382746c91cc:
Update version for v5.1.0 release (2020-08-11 17:07:03 +0100)
are available in the Git repository at:
https://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 44277bf914471962c9e88e09c859aae65ae109c4:
aio-posix: keep aio_notify_me disabled during polling (2020-08-13 13:34:14 =
+0100)
----------------------------------------------------------------
Pull request
----------------------------------------------------------------
Stefan Hajnoczi (3):
async: rename event_notifier_dummy_cb/poll()
async: always set ctx->notified in aio_notify()
aio-posix: keep aio_notify_me disabled during polling
util/aio-posix.c | 47 +++++++++++++++++++++++++----------------------
util/async.c | 36 +++++++++++++++++++++++-------------
2 files changed, 48 insertions(+), 35 deletions(-)
--=20
2.26.2
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2020-08-17 15:16 Stefan Hajnoczi
@ 2020-08-21 19:08 ` Peter Maydell
0 siblings, 0 replies; 31+ messages in thread
From: Peter Maydell @ 2020-08-21 19:08 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: Fam Zheng, Kevin Wolf, Eduardo Habkost, Qemu-block,
QEMU Developers, Max Reitz, Cleber Rosa, Paolo Bonzini
On Mon, 17 Aug 2020 at 16:16, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>
> The following changes since commit d0ed6a69d399ae193959225cdeaa9382746c91cc:
>
> Update version for v5.1.0 release (2020-08-11 17:07:03 +0100)
>
> are available in the Git repository at:
>
> https://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 44277bf914471962c9e88e09c859aae65ae109c4:
>
> aio-posix: keep aio_notify_me disabled during polling (2020-08-13 13:34:14 =
> +0100)
>
> ----------------------------------------------------------------
> Pull request
>
> ----------------------------------------------------------------
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/5.2
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 0/3] Block patches
@ 2021-11-23 15:59 Hanna Reitz
2021-11-23 17:58 ` Richard Henderson
0 siblings, 1 reply; 31+ messages in thread
From: Hanna Reitz @ 2021-11-23 15:59 UTC (permalink / raw)
To: qemu-block
Cc: Kevin Wolf, Peter Maydell, Hanna Reitz, Richard Henderson,
qemu-devel
The following changes since commit 73e0f70e097b7c92a5ce16ee35b53afe119b20d7:
Merge tag 'pull-lu-20211123' of https://gitlab.com/rth7680/qemu into staging (2021-11-23 11:33:14 +0100)
are available in the Git repository at:
https://gitlab.com/hreitz/qemu.git tags/pull-block-2021-11-23
for you to fetch changes up to 4dd218fd0717ed3cddb69c01eeb9da630107d89d:
iotests/149: Skip on unsupported ciphers (2021-11-23 15:39:12 +0100)
----------------------------------------------------------------
Block patches for 6.2-rc2:
- Fix memory leak in vvfat when vvfat_open() fails
- iotest fixes for the gnutls crypto backend
----------------------------------------------------------------
Daniella Lee (1):
block/vvfat.c fix leak when failure occurs
Hanna Reitz (2):
iotests: Use aes-128-cbc
iotests/149: Skip on unsupported ciphers
block/vvfat.c | 16 ++++++++++++----
tests/qemu-iotests/149 | 23 ++++++++++++++++++-----
tests/qemu-iotests/206 | 4 ++--
tests/qemu-iotests/206.out | 6 +++---
tests/qemu-iotests/210 | 4 ++--
tests/qemu-iotests/210.out | 6 +++---
6 files changed, 40 insertions(+), 19 deletions(-)
--
2.33.1
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2021-11-23 15:59 Hanna Reitz
@ 2021-11-23 17:58 ` Richard Henderson
0 siblings, 0 replies; 31+ messages in thread
From: Richard Henderson @ 2021-11-23 17:58 UTC (permalink / raw)
To: Hanna Reitz, qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel
On 11/23/21 4:59 PM, Hanna Reitz wrote:
> The following changes since commit 73e0f70e097b7c92a5ce16ee35b53afe119b20d7:
>
> Merge tag 'pull-lu-20211123' of https://gitlab.com/rth7680/qemu into staging (2021-11-23 11:33:14 +0100)
>
> are available in the Git repository at:
>
> https://gitlab.com/hreitz/qemu.git tags/pull-block-2021-11-23
>
> for you to fetch changes up to 4dd218fd0717ed3cddb69c01eeb9da630107d89d:
>
> iotests/149: Skip on unsupported ciphers (2021-11-23 15:39:12 +0100)
>
> ----------------------------------------------------------------
> Block patches for 6.2-rc2:
> - Fix memory leak in vvfat when vvfat_open() fails
> - iotest fixes for the gnutls crypto backend
>
> ----------------------------------------------------------------
> Daniella Lee (1):
> block/vvfat.c fix leak when failure occurs
>
> Hanna Reitz (2):
> iotests: Use aes-128-cbc
> iotests/149: Skip on unsupported ciphers
>
> block/vvfat.c | 16 ++++++++++++----
> tests/qemu-iotests/149 | 23 ++++++++++++++++++-----
> tests/qemu-iotests/206 | 4 ++--
> tests/qemu-iotests/206.out | 6 +++---
> tests/qemu-iotests/210 | 4 ++--
> tests/qemu-iotests/210.out | 6 +++---
> 6 files changed, 40 insertions(+), 19 deletions(-)
Applied, thanks.
r~
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 0/3] Block patches
@ 2021-12-22 16:52 Hanna Reitz
2021-12-23 2:33 ` Richard Henderson
0 siblings, 1 reply; 31+ messages in thread
From: Hanna Reitz @ 2021-12-22 16:52 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Hanna Reitz, Richard Henderson, qemu-devel
The following changes since commit 8c5f94cd4182753959c8be8de415120dc879d8f0:
Merge tag 'pull-loong-20211221-2' of https://gitlab.com/rth7680/qemu into staging (2021-12-21 13:30:35 -0800)
are available in the Git repository at:
https://gitlab.com/hreitz/qemu.git tags/pull-block-2021-12-22
for you to fetch changes up to 722f87df2545b308aec49b459b028f0802b4fd9e:
iotests: check: multiprocessing support (2021-12-22 16:29:48 +0100)
----------------------------------------------------------------
Block patches:
- Added support to the iotests for running tests in several parallel
jobs (using the new -j parameter)
----------------------------------------------------------------
Vladimir Sementsov-Ogievskiy (3):
iotests/testrunner.py: add doc string for run_test()
iotests/testrunner.py: move updating last_elapsed to run_tests
iotests: check: multiprocessing support
tests/qemu-iotests/check | 4 +-
tests/qemu-iotests/testrunner.py | 86 ++++++++++++++++++++++++++++----
2 files changed, 80 insertions(+), 10 deletions(-)
--
2.33.1
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2021-12-22 16:52 Hanna Reitz
@ 2021-12-23 2:33 ` Richard Henderson
0 siblings, 0 replies; 31+ messages in thread
From: Richard Henderson @ 2021-12-23 2:33 UTC (permalink / raw)
To: Hanna Reitz, qemu-block; +Cc: Kevin Wolf, qemu-devel
On 12/22/21 8:52 AM, Hanna Reitz wrote:
> The following changes since commit 8c5f94cd4182753959c8be8de415120dc879d8f0:
>
> Merge tag 'pull-loong-20211221-2' of https://gitlab.com/rth7680/qemu into staging (2021-12-21 13:30:35 -0800)
>
> are available in the Git repository at:
>
> https://gitlab.com/hreitz/qemu.git tags/pull-block-2021-12-22
>
> for you to fetch changes up to 722f87df2545b308aec49b459b028f0802b4fd9e:
>
> iotests: check: multiprocessing support (2021-12-22 16:29:48 +0100)
>
> ----------------------------------------------------------------
> Block patches:
> - Added support to the iotests for running tests in several parallel
> jobs (using the new -j parameter)
>
> ----------------------------------------------------------------
> Vladimir Sementsov-Ogievskiy (3):
> iotests/testrunner.py: add doc string for run_test()
> iotests/testrunner.py: move updating last_elapsed to run_tests
> iotests: check: multiprocessing support
>
> tests/qemu-iotests/check | 4 +-
> tests/qemu-iotests/testrunner.py | 86 ++++++++++++++++++++++++++++----
> 2 files changed, 80 insertions(+), 10 deletions(-)
Applied, thanks.
r~
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 0/3] Block patches
@ 2022-02-14 17:15 Stefan Hajnoczi
2022-02-15 22:40 ` Peter Maydell
0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2022-02-14 17:15 UTC (permalink / raw)
To: qemu-devel, Peter Maydell
Cc: Kevin Wolf, qemu-block, Michael S. Tsirkin, libvir-list,
Dr. David Alan Gilbert, virtio-fs, Hanna Reitz, Stefan Hajnoczi
The following changes since commit cc5ce8b8b6be83e5fe3b668dbd061ad97c534e3f:
Merge remote-tracking branch 'remotes/legoater/tags/pull-ppc-20220210' into staging (2022-02-13 20:33:28 +0000)
are available in the Git repository at:
https://gitlab.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 4c41c69e05fe28c0f95f8abd2ebf407e95a4f04b:
util: adjust coroutine pool size to virtio block queue (2022-02-14 17:11:25 +0000)
----------------------------------------------------------------
Pull request
This contains coroutine poll size scaling, virtiofsd rseq seccomp for new glibc
versions, and the QEMU C virtiofsd deprecation notice.
----------------------------------------------------------------
Christian Ehrhardt (1):
tools/virtiofsd: Add rseq syscall to the seccomp allowlist
Dr. David Alan Gilbert (1):
Deprecate C virtiofsd
Hiroki Narukawa (1):
util: adjust coroutine pool size to virtio block queue
docs/about/deprecated.rst | 17 +++++++++++++++++
include/qemu/coroutine.h | 10 ++++++++++
hw/block/virtio-blk.c | 5 +++++
tools/virtiofsd/passthrough_seccomp.c | 3 +++
util/qemu-coroutine.c | 20 ++++++++++++++++----
5 files changed, 51 insertions(+), 4 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2022-02-14 17:15 Stefan Hajnoczi
@ 2022-02-15 22:40 ` Peter Maydell
0 siblings, 0 replies; 31+ messages in thread
From: Peter Maydell @ 2022-02-15 22:40 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: Kevin Wolf, qemu-block, Michael S. Tsirkin, libvir-list,
qemu-devel, Dr. David Alan Gilbert, virtio-fs, Hanna Reitz
On Mon, 14 Feb 2022 at 17:44, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>
> The following changes since commit cc5ce8b8b6be83e5fe3b668dbd061ad97c534e3f:
>
> Merge remote-tracking branch 'remotes/legoater/tags/pull-ppc-20220210' into staging (2022-02-13 20:33:28 +0000)
>
> are available in the Git repository at:
>
> https://gitlab.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 4c41c69e05fe28c0f95f8abd2ebf407e95a4f04b:
>
> util: adjust coroutine pool size to virtio block queue (2022-02-14 17:11:25 +0000)
>
> ----------------------------------------------------------------
> Pull request
>
> This contains coroutine poll size scaling, virtiofsd rseq seccomp for new glibc
> versions, and the QEMU C virtiofsd deprecation notice.
>
> ----------------------------------------------------------------
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
thanks
-- PMM
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 0/3] Block patches
@ 2022-04-25 8:48 Stefan Hajnoczi
2022-04-25 20:35 ` Richard Henderson
0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2022-04-25 8:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Stefan Hajnoczi, qemu-block
The following changes since commit 9c125d17e9402c232c46610802e5931b3639d77b:
Merge tag 'pull-tcg-20220420' of https://gitlab.com/rth7680/qemu into staging (2022-04-20 16:43:11 -0700)
are available in the Git repository at:
https://gitlab.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to d45c83328feab2e4083991693160f0a417cfd9b0:
virtiofsd: Add docs/helper for killpriv_v2/no_killpriv_v2 option (2022-04-21 12:05:15 +0200)
----------------------------------------------------------------
Pull request
Small contrib/vhost-user-blk, contrib/vhost-user-scsi, and tools/virtiofsd
improvements.
----------------------------------------------------------------
Liu Yiding (1):
virtiofsd: Add docs/helper for killpriv_v2/no_killpriv_v2 option
Sakshi Kaushik (1):
Implements Backend Program conventions for vhost-user-scsi
Stefan Hajnoczi (1):
contrib/vhost-user-blk: add missing GOptionEntry NULL terminator
docs/tools/virtiofsd.rst | 5 ++
contrib/vhost-user-blk/vhost-user-blk.c | 3 +-
contrib/vhost-user-scsi/vhost-user-scsi.c | 77 +++++++++++++++--------
tools/virtiofsd/helper.c | 3 +
4 files changed, 62 insertions(+), 26 deletions(-)
--
2.35.1
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2022-04-25 8:48 Stefan Hajnoczi
@ 2022-04-25 20:35 ` Richard Henderson
0 siblings, 0 replies; 31+ messages in thread
From: Richard Henderson @ 2022-04-25 20:35 UTC (permalink / raw)
To: Stefan Hajnoczi, qemu-devel; +Cc: Peter Maydell, qemu-block
On 4/25/22 01:48, Stefan Hajnoczi wrote:
> The following changes since commit 9c125d17e9402c232c46610802e5931b3639d77b:
>
> Merge tag 'pull-tcg-20220420' of https://gitlab.com/rth7680/qemu into staging (2022-04-20 16:43:11 -0700)
>
> are available in the Git repository at:
>
> https://gitlab.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to d45c83328feab2e4083991693160f0a417cfd9b0:
>
> virtiofsd: Add docs/helper for killpriv_v2/no_killpriv_v2 option (2022-04-21 12:05:15 +0200)
>
> ----------------------------------------------------------------
> Pull request
>
> Small contrib/vhost-user-blk, contrib/vhost-user-scsi, and tools/virtiofsd
> improvements.
Applied, thanks. Please update https://wiki.qemu.org/ChangeLog/7.1 as appropriate.
r~
>
> ----------------------------------------------------------------
>
> Liu Yiding (1):
> virtiofsd: Add docs/helper for killpriv_v2/no_killpriv_v2 option
>
> Sakshi Kaushik (1):
> Implements Backend Program conventions for vhost-user-scsi
>
> Stefan Hajnoczi (1):
> contrib/vhost-user-blk: add missing GOptionEntry NULL terminator
>
> docs/tools/virtiofsd.rst | 5 ++
> contrib/vhost-user-blk/vhost-user-blk.c | 3 +-
> contrib/vhost-user-scsi/vhost-user-scsi.c | 77 +++++++++++++++--------
> tools/virtiofsd/helper.c | 3 +
> 4 files changed, 62 insertions(+), 26 deletions(-)
>
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 0/3] Block patches
@ 2022-05-05 8:42 Stefan Hajnoczi
2022-05-05 16:29 ` Richard Henderson
0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2022-05-05 8:42 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, Richard Henderson, Stefan Hajnoczi
The following changes since commit 9cf289af47bcfae5c75de37d8e5d6fd23705322c:
Merge tag 'qga-pull-request' of gitlab.com:marcandre.lureau/qemu into staging (2022-05-04 03:42:49 -0700)
are available in the Git repository at:
https://gitlab.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to bef2e050d6a7feb865854c65570c496ac5a8cf53:
util/event-loop-base: Introduce options to set the thread pool size (2022-05-04 17:02:19 +0100)
----------------------------------------------------------------
Pull request
Add new thread-pool-min/thread-pool-max parameters to control the thread pool
used for async I/O.
----------------------------------------------------------------
Nicolas Saenz Julienne (3):
Introduce event-loop-base abstract class
util/main-loop: Introduce the main loop into QOM
util/event-loop-base: Introduce options to set the thread pool size
qapi/qom.json | 43 ++++++++--
meson.build | 26 +++---
include/block/aio.h | 10 +++
include/block/thread-pool.h | 3 +
include/qemu/main-loop.h | 10 +++
include/sysemu/event-loop-base.h | 41 +++++++++
include/sysemu/iothread.h | 6 +-
event-loop-base.c | 140 +++++++++++++++++++++++++++++++
iothread.c | 68 +++++----------
util/aio-posix.c | 1 +
util/async.c | 20 +++++
util/main-loop.c | 65 ++++++++++++++
util/thread-pool.c | 55 +++++++++++-
13 files changed, 419 insertions(+), 69 deletions(-)
create mode 100644 include/sysemu/event-loop-base.h
create mode 100644 event-loop-base.c
--
2.35.1
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2022-05-05 8:42 Stefan Hajnoczi
@ 2022-05-05 16:29 ` Richard Henderson
2022-05-09 10:34 ` Stefan Hajnoczi
0 siblings, 1 reply; 31+ messages in thread
From: Richard Henderson @ 2022-05-05 16:29 UTC (permalink / raw)
To: Stefan Hajnoczi, qemu-devel; +Cc: qemu-block
On 5/5/22 03:42, Stefan Hajnoczi wrote:
> The following changes since commit 9cf289af47bcfae5c75de37d8e5d6fd23705322c:
>
> Merge tag 'qga-pull-request' of gitlab.com:marcandre.lureau/qemu into staging (2022-05-04 03:42:49 -0700)
>
> are available in the Git repository at:
>
> https://gitlab.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to bef2e050d6a7feb865854c65570c496ac5a8cf53:
>
> util/event-loop-base: Introduce options to set the thread pool size (2022-05-04 17:02:19 +0100)
>
> ----------------------------------------------------------------
> Pull request
>
> Add new thread-pool-min/thread-pool-max parameters to control the thread pool
> used for async I/O.
>
> ----------------------------------------------------------------
>
> Nicolas Saenz Julienne (3):
> Introduce event-loop-base abstract class
> util/main-loop: Introduce the main loop into QOM
> util/event-loop-base: Introduce options to set the thread pool size
>
> qapi/qom.json | 43 ++++++++--
> meson.build | 26 +++---
> include/block/aio.h | 10 +++
> include/block/thread-pool.h | 3 +
> include/qemu/main-loop.h | 10 +++
> include/sysemu/event-loop-base.h | 41 +++++++++
> include/sysemu/iothread.h | 6 +-
> event-loop-base.c | 140 +++++++++++++++++++++++++++++++
> iothread.c | 68 +++++----------
> util/aio-posix.c | 1 +
> util/async.c | 20 +++++
> util/main-loop.c | 65 ++++++++++++++
> util/thread-pool.c | 55 +++++++++++-
> 13 files changed, 419 insertions(+), 69 deletions(-)
> create mode 100644 include/sysemu/event-loop-base.h
> create mode 100644 event-loop-base.c
>
This appears to introduce a new error on msys2-64bit:
14/85 qemu:unit / test-aio ERROR 2.14s
exit status 3
>>> MALLOC_PERTURB_=82 G_TEST_SRCDIR=C:/GitLab-Runner/builds/qemu-project/qemu/tests/unit
G_TEST_BUILDDIR=C:/GitLab-Runner/builds/qemu-project/qemu/build/tests/unit
C:/GitLab-Runner/builds/qemu-project/qemu/build/tests/unit/test-aio.exe --tap -k
------------------------------------- 8< -------------------------------------
stderr:
(test program exited with status code 3)
https://gitlab.com/qemu-project/qemu/-/jobs/2418935125
Are you in a position to test this yourself locally?
r~
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2022-05-05 16:29 ` Richard Henderson
@ 2022-05-09 10:34 ` Stefan Hajnoczi
2022-05-09 12:45 ` Stefan Hajnoczi
0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2022-05-09 10:34 UTC (permalink / raw)
To: Richard Henderson, Nicolas Saenz Julienne
Cc: Stefan Hajnoczi, qemu-devel, qemu block
On Thu, 5 May 2022 at 17:43, Richard Henderson
<richard.henderson@linaro.org> wrote:
>
> On 5/5/22 03:42, Stefan Hajnoczi wrote:
> > The following changes since commit 9cf289af47bcfae5c75de37d8e5d6fd23705322c:
> >
> > Merge tag 'qga-pull-request' of gitlab.com:marcandre.lureau/qemu into staging (2022-05-04 03:42:49 -0700)
> >
> > are available in the Git repository at:
> >
> > https://gitlab.com/stefanha/qemu.git tags/block-pull-request
> >
> > for you to fetch changes up to bef2e050d6a7feb865854c65570c496ac5a8cf53:
> >
> > util/event-loop-base: Introduce options to set the thread pool size (2022-05-04 17:02:19 +0100)
> >
> > ----------------------------------------------------------------
> > Pull request
> >
> > Add new thread-pool-min/thread-pool-max parameters to control the thread pool
> > used for async I/O.
> >
> > ----------------------------------------------------------------
> >
> > Nicolas Saenz Julienne (3):
> > Introduce event-loop-base abstract class
> > util/main-loop: Introduce the main loop into QOM
> > util/event-loop-base: Introduce options to set the thread pool size
> >
> > qapi/qom.json | 43 ++++++++--
> > meson.build | 26 +++---
> > include/block/aio.h | 10 +++
> > include/block/thread-pool.h | 3 +
> > include/qemu/main-loop.h | 10 +++
> > include/sysemu/event-loop-base.h | 41 +++++++++
> > include/sysemu/iothread.h | 6 +-
> > event-loop-base.c | 140 +++++++++++++++++++++++++++++++
> > iothread.c | 68 +++++----------
> > util/aio-posix.c | 1 +
> > util/async.c | 20 +++++
> > util/main-loop.c | 65 ++++++++++++++
> > util/thread-pool.c | 55 +++++++++++-
> > 13 files changed, 419 insertions(+), 69 deletions(-)
> > create mode 100644 include/sysemu/event-loop-base.h
> > create mode 100644 event-loop-base.c
> >
>
> This appears to introduce a new error on msys2-64bit:
>
>
> 14/85 qemu:unit / test-aio ERROR 2.14s
> exit status 3
> >>> MALLOC_PERTURB_=82 G_TEST_SRCDIR=C:/GitLab-Runner/builds/qemu-project/qemu/tests/unit
> G_TEST_BUILDDIR=C:/GitLab-Runner/builds/qemu-project/qemu/build/tests/unit
> C:/GitLab-Runner/builds/qemu-project/qemu/build/tests/unit/test-aio.exe --tap -k
> ------------------------------------- 8< -------------------------------------
> stderr:
> (test program exited with status code 3)
>
> https://gitlab.com/qemu-project/qemu/-/jobs/2418935125
>
> Are you in a position to test this yourself locally?
I haven't reproduced it yet but will dig a bit more.
test-aio.exe succeeds under Wine:
# random seed: R02S572ad8b9cfeac92bb23a64678114e66d
1..29
# Start of aio tests
ok 1 /aio/acquire
ok 2 /aio/external-client
# Start of bh tests
ok 3 /aio/bh/schedule
ok 4 /aio/bh/schedule10
ok 5 /aio/bh/cancel
ok 6 /aio/bh/delete
ok 7 /aio/bh/flush
# Start of callback-delete tests
ok 8 /aio/bh/callback-delete/one
ok 9 /aio/bh/callback-delete/many
# End of callback-delete tests
# End of bh tests
# Start of event tests
ok 10 /aio/event/add-remove
ok 11 /aio/event/wait
ok 12 /aio/event/flush
# Start of wait tests
ok 13 /aio/event/wait/no-flush-cb
# End of wait tests
# End of event tests
# Start of timer tests
ok 14 /aio/timer/schedule
# End of timer tests
# Start of coroutine tests
ok 15 /aio/coroutine/queue-chaining
ok 16 /aio/coroutine/worker-thread-co-enter
# End of coroutine tests
# End of aio tests
# Start of aio-gsource tests
ok 17 /aio-gsource/flush
# Start of bh tests
ok 18 /aio-gsource/bh/schedule
ok 19 /aio-gsource/bh/schedule10
ok 20 /aio-gsource/bh/cancel
ok 21 /aio-gsource/bh/delete
ok 22 /aio-gsource/bh/flush
# Start of callback-delete tests
ok 23 /aio-gsource/bh/callback-delete/one
ok 24 /aio-gsource/bh/callback-delete/many
# End of callback-delete tests
# End of bh tests
# Start of event tests
ok 25 /aio-gsource/event/add-remove
ok 26 /aio-gsource/event/wait
ok 27 /aio-gsource/event/flush
# Start of wait tests
ok 28 /aio-gsource/event/wait/no-flush-cb
# End of wait tests
# End of event tests
# Start of timer tests
ok 29 /aio-gsource/timer/schedule
# End of timer tests
# End of aio-gsource tests
Stefan
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2022-05-09 10:34 ` Stefan Hajnoczi
@ 2022-05-09 12:45 ` Stefan Hajnoczi
0 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2022-05-09 12:45 UTC (permalink / raw)
To: Richard Henderson, Nicolas Saenz Julienne
Cc: Stefan Hajnoczi, qemu-devel, qemu block
It looks like a race condition in the test case. The failed test case
(tests/unit/test-aio.c:test_timer_schedule()) assumes the process will
be scheduled in a timely manner. A timer is scheduled for 750 ms and
the test waits for 1 second before running the event loop. At that
point a callback schedules the timer another 750 ms in the future. The
problem is that the exact sequence of event loop (aio_poll())
invocations can be unexpected on a heavily loaded CI runner leading to
spurious test failures.
I re-ran the job and it passed:
https://gitlab.com/qemu-project/qemu/-/jobs/2430529496
I also ran it locally under Wine and didn't see a failure.
FWIW I'm about to send another block pull request and it will include
these patches again. Feel free to wait for the next pull request.
Stefan
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 0/3] Block patches
@ 2022-10-31 18:51 Stefan Hajnoczi
2022-11-01 20:04 ` Stefan Hajnoczi
0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2022-10-31 18:51 UTC (permalink / raw)
To: qemu-devel
Cc: Eric Blake, Hanna Reitz, Stefan Hajnoczi, Markus Armbruster,
qemu-block, Kevin Wolf
The following changes since commit 7208429223963c405c62fa2611398f1aa8033593:
Merge tag 'mem-2022-10-28' of https://github.com/davidhildenbrand/qemu into staging (2022-10-30 18:31:59 -0400)
are available in the Git repository at:
https://gitlab.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 6c32fc0df9cd901add75618c831fb26a9eb742cb:
block/blkio: Make driver nvme-io_uring take a "path" instead of a "filename" (2022-10-31 14:35:14 -0400)
----------------------------------------------------------------
Pull request
Note that we're still discussing "block/blkio: Make driver nvme-io_uring take a
"path" instead of a "filename"". I have sent the pull request now so everything
is ready for the soft freeze tomorrow if we decide to go ahead with the patch.
----------------------------------------------------------------
Alberto Faria (3):
block/blkio: Add virtio-blk-vfio-pci BlockDriver
block/blkio: Tolerate device size changes
block/blkio: Make driver nvme-io_uring take a "path" instead of a
"filename"
qapi/block-core.json | 22 +++++++++++++++++++--
block/blkio.c | 47 ++++++++++++++++++++++++++++++++++++++++----
2 files changed, 63 insertions(+), 6 deletions(-)
--
2.38.1
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2022-10-31 18:51 Stefan Hajnoczi
@ 2022-11-01 20:04 ` Stefan Hajnoczi
0 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2022-11-01 20:04 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: qemu-devel, Eric Blake, Hanna Reitz, Stefan Hajnoczi,
Markus Armbruster, qemu-block, Kevin Wolf
[-- Attachment #1: Type: text/plain, Size: 115 bytes --]
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/7.2 for any user-visible changes.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 0/3] Block patches
@ 2023-01-23 20:04 Stefan Hajnoczi
2023-01-24 12:24 ` Peter Maydell
0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2023-01-23 20:04 UTC (permalink / raw)
To: qemu-devel
Cc: Hanna Reitz, Michael S. Tsirkin, Kevin Wolf, Stefan Hajnoczi,
Fam Zheng, qemu-block, Paolo Bonzini
The following changes since commit 00b1faea41d283e931256aa78aa975a369ec3ae6:
Merge tag 'pull-target-arm-20230123' of https://git.linaro.org/people/pmaydell/qemu-arm into staging (2023-01-23 13:40:28 +0000)
are available in the Git repository at:
https://gitlab.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 4f01a9bb0461e8c11ee0c94d90a504cb7d580a85:
block/blkio: Fix inclusion of required headers (2023-01-23 15:02:07 -0500)
----------------------------------------------------------------
Pull request
----------------------------------------------------------------
Chao Gao (1):
util/aio: Defer disabling poll mode as long as possible
Peter Krempa (1):
block/blkio: Fix inclusion of required headers
Stefan Hajnoczi (1):
virtio-blk: simplify virtio_blk_dma_restart_cb()
include/hw/virtio/virtio-blk.h | 2 --
block/blkio.c | 2 ++
hw/block/dataplane/virtio-blk.c | 17 +++++-------
hw/block/virtio-blk.c | 46 ++++++++++++++-------------------
util/aio-posix.c | 21 ++++++++++-----
5 files changed, 43 insertions(+), 45 deletions(-)
--
2.39.0
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2023-01-23 20:04 Stefan Hajnoczi
@ 2023-01-24 12:24 ` Peter Maydell
0 siblings, 0 replies; 31+ messages in thread
From: Peter Maydell @ 2023-01-24 12:24 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: qemu-devel, Hanna Reitz, Michael S. Tsirkin, Kevin Wolf,
Fam Zheng, qemu-block, Paolo Bonzini
On Mon, 23 Jan 2023 at 20:04, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>
> The following changes since commit 00b1faea41d283e931256aa78aa975a369ec3ae6:
>
> Merge tag 'pull-target-arm-20230123' of https://git.linaro.org/people/pmaydell/qemu-arm into staging (2023-01-23 13:40:28 +0000)
>
> are available in the Git repository at:
>
> https://gitlab.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 4f01a9bb0461e8c11ee0c94d90a504cb7d580a85:
>
> block/blkio: Fix inclusion of required headers (2023-01-23 15:02:07 -0500)
>
> ----------------------------------------------------------------
> Pull request
>
> ----------------------------------------------------------------
>
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/8.0
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 0/3] Block patches
@ 2023-11-06 17:10 Hanna Czenczek
2023-11-07 3:03 ` Stefan Hajnoczi
0 siblings, 1 reply; 31+ messages in thread
From: Hanna Czenczek @ 2023-11-06 17:10 UTC (permalink / raw)
To: qemu-block; +Cc: qemu-devel, Hanna Czenczek
The following changes since commit 3e01f1147a16ca566694b97eafc941d62fa1e8d8:
Merge tag 'pull-sp-20231105' of https://gitlab.com/rth7680/qemu into staging (2023-11-06 09:34:22 +0800)
are available in the Git repository at:
https://gitlab.com/hreitz/qemu.git tags/pull-block-2023-11-06
for you to fetch changes up to ad4feaca61d76fecad784e6d5e7bae40d0411c46:
file-posix: fix over-writing of returning zone_append offset (2023-11-06 16:15:07 +0100)
----------------------------------------------------------------
Block patches:
- One patch to make qcow2's discard-no-unref option do better what it is
supposed to do (i.e. prevent fragmentation)
- Two fixes for zoned requests
----------------------------------------------------------------
Jean-Louis Dupond (1):
qcow2: keep reference on zeroize with discard-no-unref enabled
Naohiro Aota (1):
file-posix: fix over-writing of returning zone_append offset
Sam Li (1):
block/file-posix: fix update_zones_wp() caller
qapi/block-core.json | 24 ++++++++++++++----------
block/file-posix.c | 23 ++++++++++++-----------
block/qcow2-cluster.c | 22 ++++++++++++++++++----
qemu-options.hx | 10 +++++++---
4 files changed, 51 insertions(+), 28 deletions(-)
--
2.41.0
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2023-11-06 17:10 Hanna Czenczek
@ 2023-11-07 3:03 ` Stefan Hajnoczi
0 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2023-11-07 3:03 UTC (permalink / raw)
To: Hanna Czenczek; +Cc: qemu-block, qemu-devel, Hanna Czenczek
[-- Attachment #1: Type: text/plain, Size: 115 bytes --]
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/8.2 for any user-visible changes.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 0/3] Block patches
@ 2025-05-08 14:22 Stefan Hajnoczi
2025-05-10 18:36 ` Stefan Hajnoczi
0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2025-05-08 14:22 UTC (permalink / raw)
To: qemu-devel
Cc: Stefan Hajnoczi, Kevin Wolf, Fam Zheng, Hanna Reitz, qemu-block,
qemu-s390x, Thomas Huth, Philippe Mathieu-Daudé
The following changes since commit 57b6f8d07f1478375f85a4593a207e936c63ff59:
Merge tag 'pull-target-arm-20250506' of https://git.linaro.org/people/pmaydell/qemu-arm into staging (2025-05-07 14:28:20 -0400)
are available in the Git repository at:
https://gitlab.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 624379be3a8136db420ec3a3fee36fe91e9f789e:
block/nvme: Use host PCI MMIO API (2025-05-08 10:21:10 -0400)
----------------------------------------------------------------
Pull request
Farhan Ali's s390x host PCI support for the block/nvme.c driver.
----------------------------------------------------------------
Farhan Ali (3):
util: Add functions for s390x mmio read/write
include: Add a header to define host PCI MMIO functions
block/nvme: Use host PCI MMIO API
include/qemu/host-pci-mmio.h | 136 +++++++++++++++++++++++++++++++
include/qemu/s390x_pci_mmio.h | 24 ++++++
block/nvme.c | 41 +++++-----
util/s390x_pci_mmio.c | 146 ++++++++++++++++++++++++++++++++++
util/meson.build | 2 +
5 files changed, 331 insertions(+), 18 deletions(-)
create mode 100644 include/qemu/host-pci-mmio.h
create mode 100644 include/qemu/s390x_pci_mmio.h
create mode 100644 util/s390x_pci_mmio.c
--
2.49.0
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2025-05-08 14:22 Stefan Hajnoczi
@ 2025-05-10 18:36 ` Stefan Hajnoczi
0 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2025-05-10 18:36 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: qemu-devel, Stefan Hajnoczi, Kevin Wolf, Fam Zheng, Hanna Reitz,
qemu-block, qemu-s390x, Thomas Huth, Philippe Mathieu-Daudé
[-- Attachment #1: Type: text/plain, Size: 116 bytes --]
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/10.1 for any user-visible changes.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 0/3] Block patches
@ 2026-04-29 18:21 Stefan Hajnoczi
2026-04-29 18:21 ` [PULL 1/3] aio-poll: avoid unnecessary polling time computation Stefan Hajnoczi
` (3 more replies)
0 siblings, 4 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2026-04-29 18:21 UTC (permalink / raw)
To: qemu-devel
Cc: Stefan Weil, Hanna Reitz, Peter Maydell, Kevin Wolf,
Markus Armbruster, Stefan Hajnoczi, qemu-block,
Dr. David Alan Gilbert, Paolo Bonzini, Fam Zheng,
Michael S. Tsirkin, Daniel P. Berrangé, Eric Blake
The following changes since commit 759c456b1d22fe4083c8b384da27d3f56fd53f82:
Merge tag 'linux-user-next-pull-request' of https://github.com/hdeller/qemu-hppa into staging (2026-04-27 12:57:33 -0400)
are available in the Git repository at:
https://gitlab.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 9fea80ddf0f58fed94f7e6d7d5c9e0ccf5cff44a:
qapi/iothread: introduce poll-weight parameter for aio-poll (2026-04-29 11:31:44 -0400)
----------------------------------------------------------------
Pull request
- Jaehoon Kim's AioContext polling CPU efficiency optimizations
----------------------------------------------------------------
Jaehoon Kim (3):
aio-poll: avoid unnecessary polling time computation
aio-poll: refine iothread polling using weighted handler intervals
qapi/iothread: introduce poll-weight parameter for aio-poll
qapi/misc.json | 6 ++
qapi/qom.json | 10 +-
include/qemu/aio.h | 7 +-
include/system/iothread.h | 18 ++++
util/aio-posix.h | 2 +-
iothread.c | 47 +++++++---
monitor/hmp-cmds.c | 1 +
tests/unit/test-nested-aio-poll.c | 2 +-
util/aio-posix.c | 148 ++++++++++++++++++------------
util/aio-win32.c | 3 +-
util/async.c | 2 +
qemu-options.hx | 8 +-
12 files changed, 176 insertions(+), 78 deletions(-)
--
2.54.0
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 1/3] aio-poll: avoid unnecessary polling time computation
2026-04-29 18:21 [PULL 0/3] Block patches Stefan Hajnoczi
@ 2026-04-29 18:21 ` Stefan Hajnoczi
2026-04-29 18:21 ` [PULL 2/3] aio-poll: refine iothread polling using weighted handler intervals Stefan Hajnoczi
` (2 subsequent siblings)
3 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2026-04-29 18:21 UTC (permalink / raw)
To: qemu-devel
Cc: Stefan Weil, Hanna Reitz, Peter Maydell, Kevin Wolf,
Markus Armbruster, Stefan Hajnoczi, qemu-block,
Dr. David Alan Gilbert, Paolo Bonzini, Fam Zheng,
Michael S. Tsirkin, Daniel P. Berrangé, Eric Blake,
Jaehoon Kim
From: Jaehoon Kim <jhkim@linux.ibm.com>
Nodes are no longer added to poll_aio_handlers when adaptive polling is
disabled, preventing unnecessary try_poll_mode() calls. This avoids
iterating over all nodes to compute max_ns unnecessarily when polling
is disabled.
Signed-off-by: Jaehoon Kim <jhkim@linux.ibm.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-ID: <20260423195918.661299-2-jhkim@linux.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
util/aio-posix.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/util/aio-posix.c b/util/aio-posix.c
index 488d964611..351847c6fb 100644
--- a/util/aio-posix.c
+++ b/util/aio-posix.c
@@ -307,9 +307,8 @@ static bool aio_dispatch_handler(AioContext *ctx, AioHandler *node)
* fdmon_supports_polling(), but only until the fd fires for the first
* time.
*/
- if (!QLIST_IS_INSERTED(node, node_deleted) &&
- !QLIST_IS_INSERTED(node, node_poll) &&
- node->io_poll) {
+ if (ctx->poll_max_ns && !QLIST_IS_INSERTED(node, node_deleted) &&
+ !QLIST_IS_INSERTED(node, node_poll) && node->io_poll) {
trace_poll_add(ctx, node, node->pfd.fd, revents);
if (ctx->poll_started && node->io_poll_begin) {
node->io_poll_begin(node->opaque);
@@ -631,7 +630,7 @@ static void adjust_polling_time(AioContext *ctx, AioPolledEvent *poll,
bool aio_poll(AioContext *ctx, bool blocking)
{
AioHandlerList ready_list = QLIST_HEAD_INITIALIZER(ready_list);
- bool progress;
+ bool progress = false;
bool use_notify_me;
int64_t timeout;
int64_t start = 0;
@@ -656,7 +655,9 @@ bool aio_poll(AioContext *ctx, bool blocking)
}
timeout = blocking ? aio_compute_timeout(ctx) : 0;
- progress = try_poll_mode(ctx, &ready_list, &timeout);
+ if (ctx->poll_max_ns != 0) {
+ progress = try_poll_mode(ctx, &ready_list, &timeout);
+ }
assert(!(timeout && progress));
/*
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 2/3] aio-poll: refine iothread polling using weighted handler intervals
2026-04-29 18:21 [PULL 0/3] Block patches Stefan Hajnoczi
2026-04-29 18:21 ` [PULL 1/3] aio-poll: avoid unnecessary polling time computation Stefan Hajnoczi
@ 2026-04-29 18:21 ` Stefan Hajnoczi
2026-04-29 18:21 ` [PULL 3/3] qapi/iothread: introduce poll-weight parameter for aio-poll Stefan Hajnoczi
2026-04-30 17:35 ` [PULL 0/3] Block patches Stefan Hajnoczi
3 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2026-04-29 18:21 UTC (permalink / raw)
To: qemu-devel
Cc: Stefan Weil, Hanna Reitz, Peter Maydell, Kevin Wolf,
Markus Armbruster, Stefan Hajnoczi, qemu-block,
Dr. David Alan Gilbert, Paolo Bonzini, Fam Zheng,
Michael S. Tsirkin, Daniel P. Berrangé, Eric Blake,
Jaehoon Kim
From: Jaehoon Kim <jhkim@linux.ibm.com>
Improve adaptive polling by updating each AioHandler's poll.ns
every loop iteration using weighted averages. This reduces CPU
consumption while minimizing performance impact.
Background:
Starting from QEMU 10.0, poll.ns was introduced per event handler
to mitigate excessive fluctuations in IOThread polling times
observed in earlier versions (QEMU 9.x). However, the current
design has limitations:
1. poll.ns is updated only when an event occurs, making it
difficult to treat block_ns as a reliable event interval.
2. The IOThread's next polling time is determined by the maximum
poll.ns among all AioHandlers, meaning idle AioHandlers with
high poll.ns can have an outsized impact on polling duration.
3. For io_uring, idle AioHandlers are cleared after
POLL_IDLE_INTERVAL_NS (7s), but for ppoll/epoll there is no
such mechanism, leading to increased CPU consumption from idle
nodes.
Implementation:
This patch treats block_ns as an event interval and updates each
AioHandler's poll.ns in every loop iteration:
- Active handlers (with events): poll.ns is updated using a
weighted average of the current block_ns and previous poll.ns,
smoothing out adjustments and preventing excessive fluctuations.
- Inactive handlers (no events): poll.ns accumulates block_ns
without weighting, allowing rapid isolation of idle nodes. When
poll.ns exceeds poll_max_ns, it resets to 0, preventing
sporadically active handlers from unnecessarily prolonging
iothread polling.
- The iothread polling duration is set based on the largest poll.ns
among active handlers. The shrink divider defaults to 2, matching
the grow rate, to reduce frequent poll_ns resets for slow devices.
The implementation renames poll_idle_timeout to last_dispatch_timestamp
for use as an active handler identifier.
Testing:
POLL_WEIGHT_SHIFT=3 (12.5% weight) was selected based on testing
comparing baseline vs weight=2/3 across various workloads:
Performance results (RHEL 10.1 + QEMU 10.0.0, FCP/FICON, 1-8 iothreads,
numjobs 1/4/8 averaged):
| poll-weight=2 | poll-weight=3
--------------------|--------------------|-----------------
Throughput avg | -2.4% (all tests) | -2.2% (all tests)
CPU consumption avg | -10.9% (all tests) | -9.4% (all tests)
Both configurations achieve ~10% CPU reduction with minimal throughput
impact (~2%). Weight=3 is chosen as default for slightly better
throughput while maintaining substantial CPU savings.
Additional validation testing on s390x SSD with fio (bs=8k, iodepth=8,
numjobs=1) shows how poll_weight affects polling time (poll.ns)
behavior:
RandRead workload:
+-------------+-----------+-----------+-------------+-------------+
| poll_weight | #samples | Mean (ns) | 50th % (ns) | 90th % (ns) |
+-------------+-----------+-----------+-------------+-------------+
| 1 | 4.79M | 8,034 | 5,116 | 20,509 |
| 2 | 5.01M | 12,584 | 11,078 | 24,693 |
| 3 | 5.01M | 15,647 | 14,863 | 28,695 |
| 4 | 5.12M | 16,430 | 15,556 | 30,848 |
| 5 | 5.14M | 16,461 | 15,306 | 32,123 |
+-------------+-----------+-----------+-------------+-------------+
RandWrite workload:
+-------------+-----------+-----------+-------------+-------------+
| poll_weight | #samples | Mean (ns) | 50th % (ns) | 90th % (ns) |
+-------------+-----------+-----------+-------------+-------------+
| 1 | 6.37M | 2,049 | 1,262 | 4,301 |
| 2 | 7.46M | 4,118 | 3,226 | 7,476 |
| 3 | 7.97M | 7,034 | 5,984 | 11,645 |
| 4 | 7.96M | 12,789 | 11,362 | 20,040 |
| 5 | 7.82M | 22,992 | 20,644 | 32,768 |
+-------------+-----------+-----------+-------------+-------------+
Signed-off-by: Jaehoon Kim <jhkim@linux.ibm.com>
Message-ID: <20260423195918.661299-3-jhkim@linux.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
include/qemu/aio.h | 3 +-
util/aio-posix.h | 2 +-
util/aio-posix.c | 128 ++++++++++++++++++++++++++++++---------------
util/async.c | 1 +
4 files changed, 89 insertions(+), 45 deletions(-)
diff --git a/include/qemu/aio.h b/include/qemu/aio.h
index 8cca2360d1..6c22064a28 100644
--- a/include/qemu/aio.h
+++ b/include/qemu/aio.h
@@ -195,7 +195,7 @@ struct BHListSlice {
typedef QSLIST_HEAD(, AioHandler) AioHandlerSList;
typedef struct AioPolledEvent {
- int64_t ns; /* current polling time in nanoseconds */
+ int64_t ns; /* estimated block time in nanoseconds */
} AioPolledEvent;
struct AioContext {
@@ -306,6 +306,7 @@ struct AioContext {
int poll_disable_cnt;
/* Polling mode parameters */
+ int64_t poll_ns; /* current polling time in nanoseconds */
int64_t poll_max_ns; /* maximum polling time in nanoseconds */
int64_t poll_grow; /* polling time growth factor */
int64_t poll_shrink; /* polling time shrink factor */
diff --git a/util/aio-posix.h b/util/aio-posix.h
index ab894a3c0f..cd459bbbae 100644
--- a/util/aio-posix.h
+++ b/util/aio-posix.h
@@ -38,7 +38,7 @@ struct AioHandler {
unsigned flags; /* see fdmon-io_uring.c */
CqeHandler internal_cqe_handler; /* used for POLL_ADD/POLL_REMOVE */
#endif
- int64_t poll_idle_timeout; /* when to stop userspace polling */
+ int64_t last_dispatch_timestamp; /* when last handler was dispatched */
bool poll_ready; /* has polling detected an event? */
AioPolledEvent poll;
};
diff --git a/util/aio-posix.c b/util/aio-posix.c
index 351847c6fb..8e9e9e5d8f 100644
--- a/util/aio-posix.c
+++ b/util/aio-posix.c
@@ -29,9 +29,11 @@
/* Stop userspace polling on a handler if it isn't active for some time */
#define POLL_IDLE_INTERVAL_NS (7 * NANOSECONDS_PER_SECOND)
+#define POLL_WEIGHT_SHIFT (3)
-static void adjust_polling_time(AioContext *ctx, AioPolledEvent *poll,
- int64_t block_ns);
+static void update_handler_poll_times(AioContext *ctx, int64_t block_ns,
+ int64_t dispatch_time);
+static void adjust_polling_time(AioContext *ctx, int64_t block_ns);
bool aio_poll_disabled(AioContext *ctx)
{
@@ -359,7 +361,7 @@ static bool aio_dispatch_handler(AioContext *ctx, AioHandler *node)
static bool aio_dispatch_ready_handlers(AioContext *ctx,
AioHandlerList *ready_list,
- int64_t block_ns)
+ int64_t dispatch_time)
{
bool progress = false;
AioHandler *node;
@@ -369,11 +371,11 @@ static bool aio_dispatch_ready_handlers(AioContext *ctx,
progress = aio_dispatch_handler(ctx, node) || progress;
/*
- * Adjust polling time only after aio_dispatch_handler(), which can
- * add the handler to ctx->poll_aio_handlers.
+ * Update last_dispatch_timestamp to mark this as an active
+ * handler for polling time adjustment and prevent idle removal.
*/
if (ctx->poll_max_ns && QLIST_IS_INSERTED(node, node_poll)) {
- adjust_polling_time(ctx, &node->poll, block_ns);
+ node->last_dispatch_timestamp = dispatch_time;
}
}
@@ -394,7 +396,7 @@ void aio_dispatch(AioContext *ctx)
ctx->fdmon_ops->dispatch(ctx);
}
- /* block_ns is 0 because polling is disabled in the glib event loop */
+ /* Set now to 0 as polling is disabled in the glib event loop */
aio_dispatch_ready_handlers(ctx, &ready_list, 0);
aio_free_deleted_handlers(ctx);
@@ -415,9 +417,6 @@ static bool run_poll_handlers_once(AioContext *ctx,
QLIST_FOREACH_SAFE(node, &ctx->poll_aio_handlers, node_poll, tmp) {
if (node->io_poll(node->opaque)) {
aio_add_poll_ready_handler(ready_list, node);
-
- node->poll_idle_timeout = now + POLL_IDLE_INTERVAL_NS;
-
/*
* Polling was successful, exit try_poll_mode immediately
* to adjust the next polling time.
@@ -458,11 +457,10 @@ static bool remove_idle_poll_handlers(AioContext *ctx,
}
QLIST_FOREACH_SAFE(node, &ctx->poll_aio_handlers, node_poll, tmp) {
- if (node->poll_idle_timeout == 0LL) {
- node->poll_idle_timeout = now + POLL_IDLE_INTERVAL_NS;
- } else if (now >= node->poll_idle_timeout) {
+ if (node->poll_ready == false &&
+ now >= node->last_dispatch_timestamp + POLL_IDLE_INTERVAL_NS) {
trace_poll_remove(ctx, node, node->pfd.fd);
- node->poll_idle_timeout = 0LL;
+ node->last_dispatch_timestamp = 0LL;
QLIST_SAFE_REMOVE(node, node_poll);
if (ctx->poll_started && node->io_poll_end) {
node->io_poll_end(node->opaque);
@@ -560,18 +558,13 @@ static bool run_poll_handlers(AioContext *ctx, AioHandlerList *ready_list,
static bool try_poll_mode(AioContext *ctx, AioHandlerList *ready_list,
int64_t *timeout)
{
- AioHandler *node;
int64_t max_ns;
if (QLIST_EMPTY_RCU(&ctx->poll_aio_handlers)) {
return false;
}
- max_ns = 0;
- QLIST_FOREACH(node, &ctx->poll_aio_handlers, node_poll) {
- max_ns = MAX(max_ns, node->poll.ns);
- }
- max_ns = qemu_soonest_timeout(*timeout, max_ns);
+ max_ns = qemu_soonest_timeout(*timeout, ctx->poll_ns);
if (max_ns && !ctx->fdmon_ops->need_wait(ctx)) {
/*
@@ -587,43 +580,85 @@ static bool try_poll_mode(AioContext *ctx, AioHandlerList *ready_list,
return false;
}
-static void adjust_polling_time(AioContext *ctx, AioPolledEvent *poll,
- int64_t block_ns)
+static void adjust_polling_time(AioContext *ctx, int64_t block_ns)
{
- if (block_ns <= poll->ns) {
- /* This is the sweet spot, no adjustment needed */
- } else if (block_ns > ctx->poll_max_ns) {
- /* We'd have to poll for too long, poll less */
- int64_t old = poll->ns;
+ if (block_ns < ctx->poll_ns) {
+ int64_t old = ctx->poll_ns;
+ int64_t shrink = ctx->poll_shrink;
- if (ctx->poll_shrink) {
- poll->ns /= ctx->poll_shrink;
- } else {
- poll->ns = 0;
+ if (shrink == 0) {
+ shrink = 2;
}
- trace_poll_shrink(ctx, old, poll->ns);
- } else if (poll->ns < ctx->poll_max_ns &&
- block_ns < ctx->poll_max_ns) {
+ if (block_ns < (ctx->poll_ns / shrink)) {
+ ctx->poll_ns /= shrink;
+ }
+
+ trace_poll_shrink(ctx, old, ctx->poll_ns);
+ } else if (block_ns > ctx->poll_ns) {
/* There is room to grow, poll longer */
- int64_t old = poll->ns;
+ int64_t old = ctx->poll_ns;
int64_t grow = ctx->poll_grow;
if (grow == 0) {
grow = 2;
}
- if (poll->ns) {
- poll->ns *= grow;
+ if (block_ns > ctx->poll_ns * grow) {
+ ctx->poll_ns = block_ns;
} else {
- poll->ns = 4000; /* start polling at 4 microseconds */
+ ctx->poll_ns *= grow;
}
- if (poll->ns > ctx->poll_max_ns) {
- poll->ns = ctx->poll_max_ns;
+ if (ctx->poll_ns > ctx->poll_max_ns) {
+ ctx->poll_ns = ctx->poll_max_ns;
}
- trace_poll_grow(ctx, old, poll->ns);
+ trace_poll_grow(ctx, old, ctx->poll_ns);
+ }
+}
+
+static void update_handler_poll_times(AioContext *ctx, int64_t block_ns,
+ int64_t dispatch_time)
+{
+ AioHandler *node;
+ int64_t max_poll_ns = -1;
+
+ QLIST_FOREACH(node, &ctx->poll_aio_handlers, node_poll) {
+ if (node->last_dispatch_timestamp == dispatch_time) {
+ /*
+ * Active handler: had an event in this aio_poll() call.
+ * Update poll.ns using a weighted average of the current
+ * block_ns and previous poll.ns to smooth adjustments.
+ */
+ node->poll.ns = node->poll.ns
+ ? (node->poll.ns - (node->poll.ns >> POLL_WEIGHT_SHIFT))
+ + (block_ns >> POLL_WEIGHT_SHIFT) : block_ns;
+
+ if (node->poll.ns > ctx->poll_max_ns) {
+ node->poll.ns = 0;
+ }
+ /*
+ * Track the maximum poll.ns among active handlers to
+ * calculate the next polling time.
+ */
+ max_poll_ns = MAX(max_poll_ns, node->poll.ns);
+ } else {
+ /*
+ * Inactive handler: no event in this aio_poll() call but
+ * was active before. Increase poll.ns by block_ns. If it
+ * exceeds poll_max_ns, reset to 0 until next event.
+ */
+ if (node->poll.ns != 0) {
+ node->poll.ns += block_ns;
+ if (node->poll.ns > ctx->poll_max_ns) {
+ node->poll.ns = 0;
+ }
+ }
+ }
+ }
+ if (max_poll_ns >= 0) {
+ adjust_polling_time(ctx, max_poll_ns);
}
}
@@ -635,6 +670,7 @@ bool aio_poll(AioContext *ctx, bool blocking)
int64_t timeout;
int64_t start = 0;
int64_t block_ns = 0;
+ int64_t dispatch_ns = 0;
/*
* There cannot be two concurrent aio_poll calls for the same AioContext (or
@@ -711,7 +747,8 @@ bool aio_poll(AioContext *ctx, bool blocking)
/* Calculate blocked time for adaptive polling */
if (ctx->poll_max_ns) {
- block_ns = qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - start;
+ dispatch_ns = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
+ block_ns = dispatch_ns - start;
}
if (ctx->fdmon_ops->dispatch) {
@@ -719,10 +756,14 @@ bool aio_poll(AioContext *ctx, bool blocking)
}
progress |= aio_bh_poll(ctx);
- progress |= aio_dispatch_ready_handlers(ctx, &ready_list, block_ns);
+ progress |= aio_dispatch_ready_handlers(ctx, &ready_list, dispatch_ns);
aio_free_deleted_handlers(ctx);
+ if (ctx->poll_max_ns) {
+ update_handler_poll_times(ctx, block_ns, dispatch_ns);
+ }
+
qemu_lockcnt_dec(&ctx->list_lock);
progress |= timerlistgroup_run_timers(&ctx->tlg);
@@ -794,6 +835,7 @@ void aio_context_set_poll_params(AioContext *ctx, int64_t max_ns,
ctx->poll_max_ns = max_ns;
ctx->poll_grow = grow;
ctx->poll_shrink = shrink;
+ ctx->poll_ns = 0;
aio_notify(ctx);
}
diff --git a/util/async.c b/util/async.c
index 80d6b01a8a..9d3627566f 100644
--- a/util/async.c
+++ b/util/async.c
@@ -606,6 +606,7 @@ AioContext *aio_context_new(Error **errp)
timerlistgroup_init(&ctx->tlg, aio_timerlist_notify, ctx);
ctx->poll_max_ns = 0;
+ ctx->poll_ns = 0;
ctx->poll_grow = 0;
ctx->poll_shrink = 0;
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 3/3] qapi/iothread: introduce poll-weight parameter for aio-poll
2026-04-29 18:21 [PULL 0/3] Block patches Stefan Hajnoczi
2026-04-29 18:21 ` [PULL 1/3] aio-poll: avoid unnecessary polling time computation Stefan Hajnoczi
2026-04-29 18:21 ` [PULL 2/3] aio-poll: refine iothread polling using weighted handler intervals Stefan Hajnoczi
@ 2026-04-29 18:21 ` Stefan Hajnoczi
2026-04-30 17:35 ` [PULL 0/3] Block patches Stefan Hajnoczi
3 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2026-04-29 18:21 UTC (permalink / raw)
To: qemu-devel
Cc: Stefan Weil, Hanna Reitz, Peter Maydell, Kevin Wolf,
Markus Armbruster, Stefan Hajnoczi, qemu-block,
Dr. David Alan Gilbert, Paolo Bonzini, Fam Zheng,
Michael S. Tsirkin, Daniel P. Berrangé, Eric Blake,
Jaehoon Kim
From: Jaehoon Kim <jhkim@linux.ibm.com>
Introduce a configurable poll-weight parameter for adaptive polling
in IOThread. This parameter replaces the hardcoded POLL_WEIGHT_SHIFT
constant, allowing runtime control over how much the most recent
event interval affects the next polling duration calculation.
The poll-weight parameter uses a shift value where larger values
decrease the weight of the current interval, enabling more gradual
adjustments. When set to 0, a default value of 3 is used (meaning
the current interval contributes approximately 1/8 to the weighted
average).
This patch also removes the hardcoded default value checks from
adjust_polling_time(). Instead, poll-grow, poll-shrink, and
poll-weight now use default values initialized in iothread.c
during IOThread creation.
Signed-off-by: Jaehoon Kim <jhkim@linux.ibm.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-ID: <20260423195918.661299-4-jhkim@linux.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
qapi/misc.json | 6 ++++
qapi/qom.json | 10 ++++++-
include/qemu/aio.h | 4 ++-
include/system/iothread.h | 18 ++++++++++++
iothread.c | 47 ++++++++++++++++++++++---------
monitor/hmp-cmds.c | 1 +
tests/unit/test-nested-aio-poll.c | 2 +-
util/aio-posix.c | 37 +++++++++---------------
util/aio-win32.c | 3 +-
util/async.c | 1 +
qemu-options.hx | 8 +++++-
11 files changed, 95 insertions(+), 42 deletions(-)
diff --git a/qapi/misc.json b/qapi/misc.json
index 28c641fe2f..22b7afed9f 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -85,6 +85,11 @@
# @poll-shrink: how many ns will be removed from polling time, 0 means
# that it's not configured (since 2.9)
#
+# @poll-weight: the weight factor for adaptive polling.
+# Determines how much the current event interval contributes to
+# the next polling time calculation. Valid values are 1 or
+# greater (since 11.1)
+#
# @aio-max-batch: maximum number of requests in a batch for the AIO
# engine, 0 means that the engine will use its default (since 6.1)
#
@@ -96,6 +101,7 @@
'poll-max-ns': 'int',
'poll-grow': 'int',
'poll-shrink': 'int',
+ 'poll-weight': 'int',
'aio-max-batch': 'int' } }
##
diff --git a/qapi/qom.json b/qapi/qom.json
index c653248f85..dd45ac1087 100644
--- a/qapi/qom.json
+++ b/qapi/qom.json
@@ -606,6 +606,13 @@
# algorithm detects it is spending too long polling without
# encountering events. 0 selects a default behaviour (default: 0)
#
+# @poll-weight: the weight factor for adaptive polling. Determines
+# how much the most recent event interval affects the next
+# polling duration calculation. If set to 0, the system default
+# value of 3 is used. Typical values: 1 (high weight on recent
+# interval), 2-4 (moderate weight on recent interval).
+# (default: 0) (since 11.1)
+#
# The @aio-max-batch option is available since 6.1.
#
# Since: 2.0
@@ -614,7 +621,8 @@
'base': 'EventLoopBaseProperties',
'data': { '*poll-max-ns': 'int',
'*poll-grow': 'int',
- '*poll-shrink': 'int' } }
+ '*poll-shrink': 'int',
+ '*poll-weight': 'int' } }
##
# @MainLoopProperties:
diff --git a/include/qemu/aio.h b/include/qemu/aio.h
index 6c22064a28..e65e90093a 100644
--- a/include/qemu/aio.h
+++ b/include/qemu/aio.h
@@ -310,6 +310,7 @@ struct AioContext {
int64_t poll_max_ns; /* maximum polling time in nanoseconds */
int64_t poll_grow; /* polling time growth factor */
int64_t poll_shrink; /* polling time shrink factor */
+ int64_t poll_weight; /* weight of current interval in calculation */
/* AIO engine parameters */
int64_t aio_max_batch; /* maximum number of requests in a batch */
@@ -791,12 +792,13 @@ void aio_context_destroy(AioContext *ctx);
* @max_ns: how long to busy poll for, in nanoseconds
* @grow: polling time growth factor
* @shrink: polling time shrink factor
+ * @weight: weight factor applied to the current polling interval
*
* Poll mode can be disabled by setting poll_max_ns to 0.
*/
void aio_context_set_poll_params(AioContext *ctx, int64_t max_ns,
int64_t grow, int64_t shrink,
- Error **errp);
+ int64_t weight, Error **errp);
/**
* aio_context_set_aio_params:
diff --git a/include/system/iothread.h b/include/system/iothread.h
index e26d13c6c7..a1ef7696cb 100644
--- a/include/system/iothread.h
+++ b/include/system/iothread.h
@@ -21,6 +21,23 @@
#define TYPE_IOTHREAD "iothread"
+#ifdef CONFIG_POSIX
+/*
+ * Benchmark results from 2016 on NVMe SSD drives show max polling times around
+ * 16-32 microseconds yield IOPS improvements for both iodepth=1 and iodepth=32
+ * workloads.
+ */
+#define IOTHREAD_POLL_MAX_NS_DEFAULT 32768ULL
+#define IOTHREAD_POLL_GROW_DEFAULT 2ULL
+#define IOTHREAD_POLL_SHRINK_DEFAULT 2ULL
+#define IOTHREAD_POLL_WEIGHT_DEFAULT 3ULL
+#else
+#define IOTHREAD_POLL_MAX_NS_DEFAULT 0ULL
+#define IOTHREAD_POLL_GROW_DEFAULT 0ULL
+#define IOTHREAD_POLL_SHRINK_DEFAULT 0ULL
+#define IOTHREAD_POLL_WEIGHT_DEFAULT 0ULL
+#endif
+
struct IOThread {
EventLoopBase parent_obj;
@@ -38,6 +55,7 @@ struct IOThread {
int64_t poll_max_ns;
int64_t poll_grow;
int64_t poll_shrink;
+ int64_t poll_weight;
};
typedef struct IOThread IOThread;
diff --git a/iothread.c b/iothread.c
index caf68e0764..3558535b40 100644
--- a/iothread.c
+++ b/iothread.c
@@ -25,17 +25,6 @@
#include "qemu/rcu.h"
#include "qemu/main-loop.h"
-
-#ifdef CONFIG_POSIX
-/* Benchmark results from 2016 on NVMe SSD drives show max polling times around
- * 16-32 microseconds yield IOPS improvements for both iodepth=1 and iodepth=32
- * workloads.
- */
-#define IOTHREAD_POLL_MAX_NS_DEFAULT 32768ULL
-#else
-#define IOTHREAD_POLL_MAX_NS_DEFAULT 0ULL
-#endif
-
static void *iothread_run(void *opaque)
{
IOThread *iothread = opaque;
@@ -103,6 +92,10 @@ static void iothread_instance_init(Object *obj)
IOThread *iothread = IOTHREAD(obj);
iothread->poll_max_ns = IOTHREAD_POLL_MAX_NS_DEFAULT;
+ iothread->poll_grow = IOTHREAD_POLL_GROW_DEFAULT;
+ iothread->poll_shrink = IOTHREAD_POLL_SHRINK_DEFAULT;
+ iothread->poll_weight = IOTHREAD_POLL_WEIGHT_DEFAULT;
+
iothread->thread_id = -1;
qemu_sem_init(&iothread->init_done_sem, 0);
/* By default, we don't run gcontext */
@@ -164,6 +157,7 @@ static void iothread_set_aio_context_params(EventLoopBase *base, Error **errp)
iothread->poll_max_ns,
iothread->poll_grow,
iothread->poll_shrink,
+ iothread->poll_weight,
errp);
if (*errp) {
return;
@@ -233,6 +227,9 @@ static IOThreadParamInfo poll_grow_info = {
static IOThreadParamInfo poll_shrink_info = {
"poll-shrink", offsetof(IOThread, poll_shrink),
};
+static IOThreadParamInfo poll_weight_info = {
+ "poll-weight", offsetof(IOThread, poll_weight),
+};
static void iothread_get_param(Object *obj, Visitor *v,
const char *name, IOThreadParamInfo *info, Error **errp)
@@ -254,13 +251,31 @@ static bool iothread_set_param(Object *obj, Visitor *v,
return false;
}
- if (value < 0) {
+ if (info->offset == offsetof(IOThread, poll_weight)) {
+ if (value < 0 || value > 63) {
+ error_setg(errp, "%s value must be in range [0, 63]",
+ info->name);
+ return false;
+ }
+ } else if (value < 0) {
error_setg(errp, "%s value must be in range [0, %" PRId64 "]",
info->name, INT64_MAX);
return false;
}
- *field = value;
+ if (value == 0) {
+ if (info->offset == offsetof(IOThread, poll_grow)) {
+ *field = IOTHREAD_POLL_GROW_DEFAULT;
+ } else if (info->offset == offsetof(IOThread, poll_shrink)) {
+ *field = IOTHREAD_POLL_SHRINK_DEFAULT;
+ } else if (info->offset == offsetof(IOThread, poll_weight)) {
+ *field = IOTHREAD_POLL_WEIGHT_DEFAULT;
+ } else {
+ *field = value;
+ }
+ } else {
+ *field = value;
+ }
return true;
}
@@ -288,6 +303,7 @@ static void iothread_set_poll_param(Object *obj, Visitor *v,
iothread->poll_max_ns,
iothread->poll_grow,
iothread->poll_shrink,
+ iothread->poll_weight,
errp);
}
}
@@ -311,6 +327,10 @@ static void iothread_class_init(ObjectClass *klass, const void *class_data)
iothread_get_poll_param,
iothread_set_poll_param,
NULL, &poll_shrink_info);
+ object_class_property_add(klass, "poll-weight", "int",
+ iothread_get_poll_param,
+ iothread_set_poll_param,
+ NULL, &poll_weight_info);
}
static const TypeInfo iothread_info = {
@@ -356,6 +376,7 @@ static int query_one_iothread(Object *object, void *opaque)
info->poll_max_ns = iothread->poll_max_ns;
info->poll_grow = iothread->poll_grow;
info->poll_shrink = iothread->poll_shrink;
+ info->poll_weight = iothread->poll_weight;
info->aio_max_batch = iothread->parent_obj.aio_max_batch;
QAPI_LIST_APPEND(*tail, info);
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index bc26b39d70..afa7b709a6 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -206,6 +206,7 @@ void hmp_info_iothreads(Monitor *mon, const QDict *qdict)
monitor_printf(mon, " poll-max-ns=%" PRId64 "\n", value->poll_max_ns);
monitor_printf(mon, " poll-grow=%" PRId64 "\n", value->poll_grow);
monitor_printf(mon, " poll-shrink=%" PRId64 "\n", value->poll_shrink);
+ monitor_printf(mon, " poll-weight=%" PRId64 "\n", value->poll_weight);
monitor_printf(mon, " aio-max-batch=%" PRId64 "\n",
value->aio_max_batch);
}
diff --git a/tests/unit/test-nested-aio-poll.c b/tests/unit/test-nested-aio-poll.c
index 9ab1ad08a7..4c38f36fd4 100644
--- a/tests/unit/test-nested-aio-poll.c
+++ b/tests/unit/test-nested-aio-poll.c
@@ -81,7 +81,7 @@ static void test(void)
qemu_set_current_aio_context(td.ctx);
/* Enable polling */
- aio_context_set_poll_params(td.ctx, 1000000, 2, 2, &error_abort);
+ aio_context_set_poll_params(td.ctx, 1000000, 2, 2, 3, &error_abort);
/* Make the event notifier active (set) right away */
event_notifier_init(&td.poll_notifier, 1);
diff --git a/util/aio-posix.c b/util/aio-posix.c
index 8e9e9e5d8f..df1c213ce5 100644
--- a/util/aio-posix.c
+++ b/util/aio-posix.c
@@ -29,7 +29,6 @@
/* Stop userspace polling on a handler if it isn't active for some time */
#define POLL_IDLE_INTERVAL_NS (7 * NANOSECONDS_PER_SECOND)
-#define POLL_WEIGHT_SHIFT (3)
static void update_handler_poll_times(AioContext *ctx, int64_t block_ns,
int64_t dispatch_time);
@@ -582,28 +581,11 @@ static bool try_poll_mode(AioContext *ctx, AioHandlerList *ready_list,
static void adjust_polling_time(AioContext *ctx, int64_t block_ns)
{
- if (block_ns < ctx->poll_ns) {
- int64_t old = ctx->poll_ns;
- int64_t shrink = ctx->poll_shrink;
-
- if (shrink == 0) {
- shrink = 2;
- }
-
- if (block_ns < (ctx->poll_ns / shrink)) {
- ctx->poll_ns /= shrink;
- }
-
- trace_poll_shrink(ctx, old, ctx->poll_ns);
- } else if (block_ns > ctx->poll_ns) {
+ if (block_ns > ctx->poll_ns) {
/* There is room to grow, poll longer */
int64_t old = ctx->poll_ns;
int64_t grow = ctx->poll_grow;
- if (grow == 0) {
- grow = 2;
- }
-
if (block_ns > ctx->poll_ns * grow) {
ctx->poll_ns = block_ns;
} else {
@@ -615,6 +597,11 @@ static void adjust_polling_time(AioContext *ctx, int64_t block_ns)
}
trace_poll_grow(ctx, old, ctx->poll_ns);
+ } else if (block_ns < (ctx->poll_ns / ctx->poll_shrink)) {
+ int64_t old = ctx->poll_ns;
+ ctx->poll_ns /= ctx->poll_shrink;
+
+ trace_poll_shrink(ctx, old, ctx->poll_ns);
}
}
@@ -632,8 +619,8 @@ static void update_handler_poll_times(AioContext *ctx, int64_t block_ns,
* block_ns and previous poll.ns to smooth adjustments.
*/
node->poll.ns = node->poll.ns
- ? (node->poll.ns - (node->poll.ns >> POLL_WEIGHT_SHIFT))
- + (block_ns >> POLL_WEIGHT_SHIFT) : block_ns;
+ ? (node->poll.ns - (node->poll.ns >> ctx->poll_weight))
+ + (block_ns >> ctx->poll_weight) : block_ns;
if (node->poll.ns > ctx->poll_max_ns) {
node->poll.ns = 0;
@@ -819,7 +806,8 @@ void aio_context_destroy(AioContext *ctx)
}
void aio_context_set_poll_params(AioContext *ctx, int64_t max_ns,
- int64_t grow, int64_t shrink, Error **errp)
+ int64_t grow, int64_t shrink,
+ int64_t weight, Error **errp)
{
AioHandler *node;
@@ -833,8 +821,9 @@ void aio_context_set_poll_params(AioContext *ctx, int64_t max_ns,
* is used once.
*/
ctx->poll_max_ns = max_ns;
- ctx->poll_grow = grow;
- ctx->poll_shrink = shrink;
+ ctx->poll_grow = (grow ? grow : IOTHREAD_POLL_GROW_DEFAULT);
+ ctx->poll_shrink = (shrink ? shrink : IOTHREAD_POLL_SHRINK_DEFAULT);
+ ctx->poll_weight = (weight ? weight : IOTHREAD_POLL_WEIGHT_DEFAULT);
ctx->poll_ns = 0;
aio_notify(ctx);
diff --git a/util/aio-win32.c b/util/aio-win32.c
index 6e6f699e4b..1985843233 100644
--- a/util/aio-win32.c
+++ b/util/aio-win32.c
@@ -429,7 +429,8 @@ void aio_context_destroy(AioContext *ctx)
}
void aio_context_set_poll_params(AioContext *ctx, int64_t max_ns,
- int64_t grow, int64_t shrink, Error **errp)
+ int64_t grow, int64_t shrink,
+ int64_t weight, Error **errp)
{
if (max_ns) {
error_setg(errp, "AioContext polling is not implemented on Windows");
diff --git a/util/async.c b/util/async.c
index 9d3627566f..741fcfd6a7 100644
--- a/util/async.c
+++ b/util/async.c
@@ -609,6 +609,7 @@ AioContext *aio_context_new(Error **errp)
ctx->poll_ns = 0;
ctx->poll_grow = 0;
ctx->poll_shrink = 0;
+ ctx->poll_weight = 0;
ctx->aio_max_batch = 0;
diff --git a/qemu-options.hx b/qemu-options.hx
index 21972f8326..29c09415c1 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -6443,7 +6443,7 @@ SRST
CN=laptop.example.com,O=Example Home,L=London,ST=London,C=GB
- ``-object iothread,id=id,poll-max-ns=poll-max-ns,poll-grow=poll-grow,poll-shrink=poll-shrink,aio-max-batch=aio-max-batch``
+ ``-object iothread,id=id,poll-max-ns=poll-max-ns,poll-grow=poll-grow,poll-shrink=poll-shrink,poll-weight=poll-weight,aio-max-batch=aio-max-batch``
Creates a dedicated event loop thread that devices can be
assigned to. This is known as an IOThread. By default device
emulation happens in vCPU threads or the main event loop thread.
@@ -6479,6 +6479,12 @@ SRST
the polling time when the algorithm detects it is spending too
long polling without encountering events.
+ The ``poll-weight`` parameter is the weight factor for adaptive
+ polling. It determines how much the most recent event interval
+ affects the next polling duration calculation. If set to 0, the
+ system default value of 3 is used. Typical values: 1 (high weight
+ on recent interval), 2-4 (moderate weight on recent interval).
+
The ``aio-max-batch`` parameter is the maximum number of requests
in a batch for the AIO engine, 0 means that the engine will use
its default.
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PULL 0/3] Block patches
2026-04-29 18:21 [PULL 0/3] Block patches Stefan Hajnoczi
` (2 preceding siblings ...)
2026-04-29 18:21 ` [PULL 3/3] qapi/iothread: introduce poll-weight parameter for aio-poll Stefan Hajnoczi
@ 2026-04-30 17:35 ` Stefan Hajnoczi
3 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2026-04-30 17:35 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: qemu-devel, Stefan Weil, Hanna Reitz, Peter Maydell, Kevin Wolf,
Markus Armbruster, Stefan Hajnoczi, qemu-block,
Dr. David Alan Gilbert, Paolo Bonzini, Fam Zheng,
Michael S. Tsirkin, Daniel P. Berrangé, Eric Blake
[-- Attachment #1: Type: text/plain, Size: 116 bytes --]
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/11.1 for any user-visible changes.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 31+ messages in thread
end of thread, other threads:[~2026-04-30 17:36 UTC | newest]
Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-29 18:21 [PULL 0/3] Block patches Stefan Hajnoczi
2026-04-29 18:21 ` [PULL 1/3] aio-poll: avoid unnecessary polling time computation Stefan Hajnoczi
2026-04-29 18:21 ` [PULL 2/3] aio-poll: refine iothread polling using weighted handler intervals Stefan Hajnoczi
2026-04-29 18:21 ` [PULL 3/3] qapi/iothread: introduce poll-weight parameter for aio-poll Stefan Hajnoczi
2026-04-30 17:35 ` [PULL 0/3] Block patches Stefan Hajnoczi
-- strict thread matches above, loose matches on Subject: below --
2025-05-08 14:22 Stefan Hajnoczi
2025-05-10 18:36 ` Stefan Hajnoczi
2023-11-06 17:10 Hanna Czenczek
2023-11-07 3:03 ` Stefan Hajnoczi
2023-01-23 20:04 Stefan Hajnoczi
2023-01-24 12:24 ` Peter Maydell
2022-10-31 18:51 Stefan Hajnoczi
2022-11-01 20:04 ` Stefan Hajnoczi
2022-05-05 8:42 Stefan Hajnoczi
2022-05-05 16:29 ` Richard Henderson
2022-05-09 10:34 ` Stefan Hajnoczi
2022-05-09 12:45 ` Stefan Hajnoczi
2022-04-25 8:48 Stefan Hajnoczi
2022-04-25 20:35 ` Richard Henderson
2022-02-14 17:15 Stefan Hajnoczi
2022-02-15 22:40 ` Peter Maydell
2021-12-22 16:52 Hanna Reitz
2021-12-23 2:33 ` Richard Henderson
2021-11-23 15:59 Hanna Reitz
2021-11-23 17:58 ` Richard Henderson
2020-08-17 15:16 Stefan Hajnoczi
2020-08-21 19:08 ` Peter Maydell
2020-03-06 14:23 Stefan Hajnoczi
2020-03-06 17:02 ` Peter Maydell
2019-12-20 10:25 Stefan Hajnoczi
2020-01-03 18:50 ` Peter Maydell
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.