All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V15 00/14] iothread: Support tracking and querying IOThread holder
@ 2026-09-07  6:37 Zhang Chen
  2026-09-07  6:37 ` [PATCH V15 01/14] qapi/misc: Fix missed query-iothreads items Zhang Chen
                   ` (13 more replies)
  0 siblings, 14 replies; 26+ messages in thread
From: Zhang Chen @ 2026-09-07  6:37 UTC (permalink / raw)
  To: qemu-devel, Eric Blake, Markus Armbruster,
	'Michael S . Tsirkin', Stefan Hajnoczi, Paolo Bonzini,
	'Daniel P . Berrangé', Jason Wang
  Cc: Zhang Chen

### 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_unref_and_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.


### V15 -> V14 Changelog
  - Moved monitor IOThread cleanup from unparent() to monitor_finalize(),
    pairing complete() with instance finalization.
  - Squashed V14 PATCH 04 and PATCH 14 into PATCH 13 and clarified the
    blockdev lifetime assumption. Since the additional changes are minimal,
    PATCH 13 retains Stefan's Reviewed-by from V14 PATCH 04.
  - Rebased and adapted info iothreads to the MonitorHMP interface.

### V14 -> V13 Changelog
  - Renamed patch 3 and clarified that it introduces holder-tracking
    infrastructure, with users converted in subsequent patches.
  - Documented that monitor holders are not visible to management
    applications, while retaining the tracking for a consistent holder
    and IOThread reference lifecycle.
  - Rebased on the latest upstream.

### V13 -> V12 Changelog
  - Refactored block export IOThread reference handling with shared
    init/cleanup helpers and preserved the existing single-IOThread
    driver arguments.
  - Moved monitor IOThread cleanup to the QOM unparent callback,
    where the canonical path is still available.
  - Kept internal IOThreads hidden from query-iothreads.
  - Made virtio queue-mapping holder arguments const.
  - Improved some detail comments.

### V12 -> V11 Changelog
  - Change the function name from the "iothread_put_aio_context()"
    to "iothread_unref_and_put_aio_context()" match the
    "iothread_unref_and_put_aio_context".
  - Fix unnecessary char * cast since the holder variable is
    declared const.
  - Add detailed commit msg in patch 06/15.
  - Optimize the HMP print in patch 13/15.
  - Rebase code on upstream.

### 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.



Zhang Chen (14):
  qapi/misc: Fix missed query-iothreads items
  iothread: introduce holder tracking
  iothread: add holder-aware AioContext accessors
  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: make legacy AioContext getter explicitly unsafe
  tests/unit/iothread: update AioContext ref/put helpers

 block/export/export.c                   | 62 ++++++++++++++---
 blockdev.c                              |  7 +-
 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                  |  5 ++
 include/hw/virtio/iothread-vq-mapping.h |  6 +-
 include/system/iothread.h               | 38 ++++++++++-
 iothread.c                              | 89 ++++++++++++++++++++++++-
 monitor/hmp-cmds.c                      | 20 ++++++
 monitor/monitor-internal.h              |  5 ++
 monitor/monitor.c                       | 26 ++++++--
 monitor/qmp.c                           |  5 +-
 net/colo-compare.c                      | 29 +++++---
 qapi/misc.json                          | 86 ++++++++++++++++++++++--
 tests/unit/iothread.c                   | 18 +++--
 tests/unit/iothread.h                   |  7 +-
 tests/unit/test-aio-multithread.c       |  5 +-
 tests/unit/test-bdrv-drain.c            | 18 +++--
 tests/unit/test-block-iothread.c        | 21 ++++--
 23 files changed, 485 insertions(+), 82 deletions(-)

-- 
2.43.0



^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2026-09-10  6:02 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-07  6:37 [PATCH V15 00/14] iothread: Support tracking and querying IOThread holder Zhang Chen
2026-09-07  6:37 ` [PATCH V15 01/14] qapi/misc: Fix missed query-iothreads items Zhang Chen
2026-09-07  7:24   ` Michael Tokarev
2026-09-10  5:28     ` Zhang Chen
2026-09-10  6:01       ` Markus Armbruster
2026-09-07  6:37 ` [PATCH V15 02/14] iothread: introduce holder tracking Zhang Chen
2026-09-07  6:37 ` [PATCH V15 03/14] iothread: add holder-aware AioContext accessors Zhang Chen
2026-09-07  6:37 ` [PATCH V15 04/14] block/export: track IOThread references Zhang Chen
2026-09-07  6:37 ` [PATCH V15 05/14] monitor: track IOThread users with QOM paths Zhang Chen
2026-09-07 12:44   ` Markus Armbruster
2026-09-09  7:57     ` Zhang Chen
2026-09-09 10:40       ` Markus Armbruster
2026-09-10  2:24         ` Zhang Chen
2026-09-10  4:42           ` Markus Armbruster
2026-09-07  6:37 ` [PATCH V15 06/14] virtio-vq-mapping: track iothread-vq-mapping references using device path Zhang Chen
2026-09-07  6:37 ` [PATCH V15 07/14] virtio: track IOThread references for thread pinning Zhang Chen
2026-09-07  6:37 ` [PATCH V15 08/14] net/colo: track IOThread references using path-based holder Zhang Chen
2026-09-07  6:37 ` [PATCH V15 09/14] virtio-balloon: Update tracking iothread users with holder Zhang Chen
2026-09-07  6:37 ` [PATCH V15 10/14] vfio-user/proxy: Update tracking iothread users with holder name Zhang Chen
2026-09-07  6:37 ` [PATCH V15 11/14] xen-block: " Zhang Chen
2026-09-07  6:37 ` [PATCH V15 12/14] monitor/hmp: display IOThread holders Zhang Chen
2026-09-07  6:37 ` [PATCH V15 13/14] iothread: make legacy AioContext getter explicitly unsafe Zhang Chen
2026-09-07 12:55   ` Markus Armbruster
2026-09-09  6:24     ` Zhang Chen
2026-09-09 10:41       ` Markus Armbruster
2026-09-07  6:37 ` [PATCH V15 14/14] tests/unit/iothread: update AioContext ref/put helpers Zhang Chen

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.