From: Zhang Chen <zhangckid@gmail.com>
To: qemu-devel <qemu-devel@nongnu.org>,
"Eric Blake" <eblake@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"'Daniel P . Berrangé'" <berrange@redhat.com>,
"Jason Wang" <jasowang@redhat.com>
Cc: Zhang Chen <zhangckid@gmail.com>
Subject: [PATCH V11 00/15] iothread: Support tracking and querying IOThread holders
Date: Fri, 7 Aug 2026 04:25:09 +0800 [thread overview]
Message-ID: <20260806202531.243806-1-zhangckid@gmail.com> (raw)
### Motivation
Currently, the relationship between IOThreads and the resources using them is
opaque. From a management perspective, it is difficult to determine which
devices or block exports are currently associated with a specific IOThread
via QMP or HMP.
This series introduces a "holder" tracking mechanism based on QOM paths or
block exports to significantly improve IOThread observability.
In high-performance virtualization environments, users often pre-allocate
a set of IOThreads to serve as a persistent thread pool. During device
hotplug/unplug cycles, while IOThread objects remain persistent,
their attachment state changes dynamically.
By tracking these "holders," administrators can use `query-iothreads` to
monitor the real-time load distribution of the thread pool and identify which
specific devices (e.g., virtio-blk, BlockExport) are attached to which thread.
### Technical Overview
* Holder tracking
Add a QAPI holder list to each IOThread. A holder identifies either
a QOM object by its canonical path or a block export by its unique
BlockExportOptions ID.
* Explicit reference lifecycle
Add iothread_ref_and_get_aio_context() and the matching
iothread_put_aio_context(). Acquiring an AioContext registers a
holder and keeps the IOThread alive until the matching put.
Legacy callers without a matching lifecycle use the explicitly named
iothread_unsafe_get_aio_context(). The ambiguous legacy
iothread_get_aio_context() is removed after all production callers
are migrated.
* Subsystem integration
Track holders for block exports, monitors, virtio-blk, virtio-scsi,
virtio queue mappings, virtio balloon thread pinning, COLO compare,
vfio-user proxy, and xen-block.
* Introspection
Extend IOThreadInfo with a holders array returned by
query-iothreads. Display the same information with info iothreads,
while omitting the holders line when the list is empty.
### V11 -> V10 Changelog
- Keep iothread_ref_and_get_aio_context() as an explicit acquiring API
instead of merging it into iothread_get_aio_context().
- Retain iothread_get_aio_context() during the caller migration so
every intermediate patch builds, then remove it in patch 14.
- Update patch 15 to use the holder-aware get/put API in unit-test
stubs and callers.
- Rework patch 2 documentation to describe holders as QOM objects or
block exports, simplify the ref/unref descriptions, and use
imperative function comments.
- Identify block export holders with BlockExportOptions member id and
rename the QAPI field to export-id.
- Fix monitor cleanup so it only releases an AioContext acquired by
that monitor, preventing an iothread_unref() assertion at shutdown.
- Rebase the series onto the current upstream tree.
### V10 -> V9 Changelog
- Rebase this series on the Daniel P. Berrangé's series:
[PATCH v7 00/35] monitor: turn QMP and HMP into QOM objects
https://lore.kernel.org/qemu-devel/20260706135824.2623960-1-berrange@redhat.com/
- Remove the monitor type of IOThreadHolder, make the monitor as a QOM object.
- Remove GList related code and stays within QAPI instead of mixing GList and QAPI.
- Fix missed comments in the patch 2.
- Rewrite parts of commit log generated by AI.
- Keep Stefan's reviewed-by in patch 2 and addressed Markus's comments.
- Rewrite parts of code comments.
- Drop original patch 6/7/8 for monitor parts.
### V9 -> V8 Changelog
- Drop to assign unique default ID for monitor, and keep the NULL ID.
- Rewrite and split the monitor patch 7 and 8.
- Add the [PATCH 17/17]tests/unit/iothread: Update the iothread_get_aio_context
to keep the API same in the unit tests.
- Refactorcode according comments.
- Update the example.
- Fix other comments issues.
### V7 -> V8 Changelog
- Drop the assumption of the Monitor QOM, add the new type
IO_THREAD_HOLDER_KIND_MONITOR_NAME.
- Drop the assumption of the string '/' as QOM path.
- Introduce new patch for Monitor:
[PATCH 06/15] assign unique default ID to anonymous monitors
- Fixed Monitor ID for the IOThread.
- Refactorcode according comments.
- Update QMP example.
- Rebased patches on upstream code.
- Fixed comments issues.
- Removed redundant code.
### V6 -> V7 Changelog
- Fixed comments issues in patch 02/14 (Thanks Markus).
- Removed redundant code.
- Rebased patches on upstream code.
- Fixed code conflict with latest patches.
- Added detailed description in git log and code.
- Added comments for patch 06/14 assuming the monitor is a QOM object,
Depends on Daniel Berrange's RFC patch:
[PATCH RFC 00/17] monitor: turn QMP and HMP into QOM objects
### V5 -> V6 Changelog
* API Refactoring (Breaking Change):
- Implement the 'union': 'IoThreadHolder' for combine the QOM objects
and the block-node.
- Completely merged iothread_get_aio_context variants.
- The iothread_get_aio_context function now strictly requires a 'holder'
argument to ensure every context retrieval is accounted for.
* Expanded Module Coverage:
- Added holder tracking for the monitor subsystem (tracking threads used
by QMP/HMP).
- Added support for the virtio-scsi dataplane.
* Code Cleanup:
- Removed redundant and obsolete API declarations.
- Standardized the use of object_get_canonical_path() across all callers
to provide consistent and unique holder names.
* Bug Fixes:
- Updated qapi/misc.json documentation to fix missing descriptions in
query-iothreads items.
* Build System:
- Improved header inclusion logic to avoid redundant declaration errors
in unit tests.
* QAPI part:
- Sorry to drop the "Acked-by: Markus Armbruster <armbru@redhat.com>",
because this version have lots of changes in the:
[PATCH V6 13/14]qapi: examine IOThread attachment status via query-iothreads
Zhang Chen (15):
qapi/misc: Fix missed query-iothreads items
iothread: introduce holder tracking
iothread: track users with holder name
iothread: introduce iothread_unsafe_get_aio_context()
block/export: track IOThread references
monitor: track IOThread users with QOM paths
virtio-vq-mapping: track iothread-vq-mapping references using device
path
virtio: track IOThread references for thread pinning
net/colo: track IOThread references using path-based holder
virtio-balloon: Update tracking iothread users with holder
vfio-user/proxy: Update tracking iothread users with holder name
xen-block: Update tracking iothread users with holder name
monitor/hmp: display IOThread holders
iothread: remove legacy iothread_get_aio_context()
tests/unit/iothread: update AioContext ref/put helpers
block/export/export.c | 79 +++++++++++++++++++---
blockdev.c | 2 +-
hw/block/dataplane/xen-block.c | 19 +++++-
hw/block/virtio-blk.c | 21 ++++--
hw/scsi/virtio-scsi-dataplane.c | 22 +++++--
hw/vfio-user/proxy.c | 16 ++++-
hw/virtio/iothread-vq-mapping.c | 20 ++++--
hw/virtio/virtio-balloon.c | 22 +++++--
include/block/export.h | 6 ++
include/hw/virtio/iothread-vq-mapping.h | 6 +-
include/system/iothread.h | 37 ++++++++++-
iothread.c | 88 ++++++++++++++++++++++++-
monitor/hmp-cmds.c | 22 +++++++
monitor/monitor-internal.h | 3 +
monitor/monitor.c | 26 ++++++--
monitor/qmp.c | 16 ++++-
net/colo-compare.c | 29 +++++---
qapi/misc.json | 86 ++++++++++++++++++++++--
tests/unit/iothread.c | 17 +++--
tests/unit/iothread.h | 6 +-
tests/unit/test-aio-multithread.c | 5 +-
tests/unit/test-bdrv-drain.c | 18 +++--
tests/unit/test-block-iothread.c | 21 ++++--
23 files changed, 505 insertions(+), 82 deletions(-)
--
2.53.0
next reply other threads:[~2026-08-06 20:27 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-06 20:25 Zhang Chen [this message]
2026-08-06 20:25 ` [PATCH V11 01/15] qapi/misc: Fix missed query-iothreads items Zhang Chen
2026-08-06 20:25 ` [PATCH V11 02/15] iothread: introduce holder tracking Zhang Chen
2026-08-07 13:36 ` Markus Armbruster
2026-08-06 20:25 ` [PATCH V11 03/15] iothread: track users with holder name Zhang Chen
2026-08-07 13:41 ` Markus Armbruster
2026-08-11 8:51 ` Zhang Chen
2026-08-06 20:25 ` [PATCH V11 04/15] iothread: introduce iothread_unsafe_get_aio_context() Zhang Chen
2026-08-06 20:25 ` [PATCH V11 05/15] block/export: track IOThread references Zhang Chen
2026-08-06 20:25 ` [PATCH V11 06/15] monitor: track IOThread users with QOM paths Zhang Chen
2026-08-07 14:03 ` Markus Armbruster
2026-08-06 20:25 ` [PATCH V11 07/15] virtio-vq-mapping: track iothread-vq-mapping references using device path Zhang Chen
2026-08-06 20:25 ` [PATCH V11 08/15] virtio: track IOThread references for thread pinning Zhang Chen
2026-08-06 20:25 ` [PATCH V11 09/15] net/colo: track IOThread references using path-based holder Zhang Chen
2026-08-06 20:25 ` [PATCH V11 10/15] virtio-balloon: Update tracking iothread users with holder Zhang Chen
2026-08-06 20:25 ` [PATCH V11 11/15] vfio-user/proxy: Update tracking iothread users with holder name Zhang Chen
2026-08-06 20:25 ` [PATCH V11 12/15] xen-block: " Zhang Chen
2026-08-06 20:25 ` [PATCH V11 13/15] monitor/hmp: display IOThread holders Zhang Chen
2026-08-07 13:44 ` Markus Armbruster
2026-08-11 8:44 ` Zhang Chen
2026-08-06 20:25 ` [PATCH V11 14/15] iothread: remove legacy iothread_get_aio_context() Zhang Chen
2026-08-06 20:25 ` [PATCH V11 15/15] tests/unit/iothread: update AioContext ref/put helpers Zhang Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260806202531.243806-1-zhangckid@gmail.com \
--to=zhangckid@gmail.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=eblake@redhat.com \
--cc=jasowang@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.