Hi all, A gentle ping on v18. Could you please take a look at the remaining patches, particularly the COLO and vfio-user changes addressing the previous review comments?
Please let me know if anything else is needed to move this series forward. Thanks, Chen On Tue, Sep 29, 2026 at 4:44 PM Zhang Chen <[email protected]> wrote: > > ### 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. > > > ### V18 -> V17 Changelog > - Saved the COLO object's QOM path for finalization and guarded > holder cleanup against incomplete initialization. > - Used the owning PCI device's QOM path for vfio-user holders > and saved it for disconnect(). > - Simplified the monitor QOM path field name and clarified > PATCH 12's commit message. > - Rebased on upstream and collected Reviewed-by tags. > > ### V17 -> V16 Changelog > - Rebase code to resolve code conflicts for patch 8: > "virtio-balloon: Update tracking iothread users with holder". > This issue caused by latest merged patch "fdc3f9a83d". > > ### V16 -> V15 Changelog > - Unified per-monitor IOThread checks and accesses through > mon->iothread after initialization. > - Simplified PATCH 13's commit message and clarified why blockdev > cannot use the holder-aware get/put APIs. > - Dropped the v15 Patch 1 in this series, It will be taken away > independently by trivial-patches tree. > > ### 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. > > > Zhang Chen (13): > 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 device QOM paths > 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 | 9 ++- > hw/block/dataplane/xen-block.c | 19 ++++- > hw/block/virtio-blk.c | 21 ++++-- > hw/scsi/virtio-scsi-dataplane.c | 22 ++++-- > hw/vfio-user/pci.c | 2 +- > hw/vfio-user/proxy.c | 20 +++++- > hw/vfio-user/proxy.h | 4 +- > hw/virtio/iothread-vq-mapping.c | 20 ++++-- > hw/virtio/virtio-balloon.c | 21 ++++-- > include/block/export.h | 5 ++ > include/hw/virtio/iothread-vq-mapping.h | 6 +- > include/hw/virtio/virtio-balloon.h | 1 + > include/system/iothread.h | 38 +++++++++- > iothread.c | 89 ++++++++++++++++++++++- > monitor/hmp-cmds.c | 20 ++++++ > monitor/monitor-internal.h | 7 +- > monitor/monitor.c | 36 +++++++--- > monitor/qmp.c | 14 ++-- > net/colo-compare.c | 36 ++++++---- > qapi/misc.json | 94 +++++++++++++++++++++---- > 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 ++++-- > 26 files changed, 508 insertions(+), 107 deletions(-) > > -- > 2.43.0 >
