Exposed the iothread holders via the Human Monitor Interface (HMP) command 'info iothreads' to assist with manual debugging and performance tuning.
Signed-off-by: Zhang Chen <[email protected]> --- monitor/hmp-cmds.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index e9fb8d827a..cd2d9c1d59 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -240,11 +240,33 @@ void hmp_info_iothreads(Monitor *mon, const QDict *qdict) IOThreadInfoList *info_list = qmp_query_iothreads(NULL); IOThreadInfoList *info; IOThreadInfo *value; + IOThreadHolderList *h; for (info = info_list; info; info = info->next) { value = info->value; monitor_printf(mon, "%s:\n", value->id); monitor_printf(mon, " thread_id=%" PRId64 "\n", value->thread_id); + monitor_printf(mon, " holders="); + if (value->holders) { + for (h = value->holders; h; h = h->next) { + IOThreadHolder *holder = h->value; + + switch (holder->type) { + case IO_THREAD_HOLDER_KIND_BLOCK_EXPORT: + monitor_printf(mon, "[block-export: %s]", + holder->u.block_export.export_name); + break; + case IO_THREAD_HOLDER_KIND_QOM_OBJECT: + monitor_printf(mon, "[qom-path: %s]", + holder->u.qom_object.qom_path); + break; + default: + monitor_printf(mon, "[unknown]"); + break; + } + } + monitor_printf(mon, "\n"); + } 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); -- 2.49.0
