From nobody Tue Feb 10 06:43:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=weirdnatto.in ARC-Seal: i=1; a=rsa-sha256; t=1662546906; cv=none; d=zohomail.com; s=zohoarc; b=d8R7M8lRe/YeIXMQIh87av+amv/XZEUtPZN4YhE6YAsjb4Ec9wHB5b0eXUZDHPbSCfVzcYFUot2Gxt3jzD9OcU3ES5pK7tYruWz5mMT7g1FpJ8d9lKMwMg+0TWf0JlFssNdlmKCyZoLgoBgxmJnIBfo9LJJMlNyr9oHwwwvbsI4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1662546906; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=D+uHqlvNUmhVrWc9kDgg+6nPSZSvDFO3rjqEZNyNrGM=; b=Q10l3wRYxSS0RpYhWbqJwb3cqFONIZoPqknY1t1vyBNyh/Ed836BWVEtqAxyT+Q3V6jMQkWHpLS34hRJM13+aaUvX5Afz7IWrvpgZEN3bkzyY1t25gV6HHZj/yUIX4o4US+djIZQ0ah0L44BcJl2ST6aKSyLHu4TFBszVgTX9qs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1662546906594108.65722022557861; Wed, 7 Sep 2022 03:35:06 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-515-ceOnpqTVMMyw4gToeYR3EA-1; Wed, 07 Sep 2022 06:34:59 -0400 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 9087680A0C2; Wed, 7 Sep 2022 10:34:55 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7ADD4492CA2; Wed, 7 Sep 2022 10:34:55 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 672D01946A5A; Wed, 7 Sep 2022 10:34:55 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 36F8F1946A49 for ; Wed, 7 Sep 2022 10:34:54 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 27DC5403162; Wed, 7 Sep 2022 10:34:54 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast05.extmail.prod.ext.rdu2.redhat.com [10.11.55.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2361E403167 for ; Wed, 7 Sep 2022 10:34:54 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id ED5EF8039CD for ; Wed, 7 Sep 2022 10:34:53 +0000 (UTC) Received: from mail.weirdnatto.in (140.238.225.67 [140.238.225.67]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-482--FjmsAP7N9Ojgytugu2jhw-1; Wed, 07 Sep 2022 06:34:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1662546904; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=D+uHqlvNUmhVrWc9kDgg+6nPSZSvDFO3rjqEZNyNrGM=; b=gk6gfdiKTsCRsp6gZFGbF4arIa/B9uNY6sPN0e0Mw98yZ+TRRKKfrsJClIAJheWtlX72Dj Bj6B2P3X1LHJWB2V01DF0yEZNQdxYNyQB7hIRa4RnQjY9yp3L6lP8xXQK2aqu/mKjWhlJ+ j4VNyzzqLyX1xXMVMS+RmAzXyCljy1E= X-MC-Unique: ceOnpqTVMMyw4gToeYR3EA-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: -FjmsAP7N9Ojgytugu2jhw-1 From: Amneesh Singh To: libvir-list@redhat.com Subject: [RFC PATCH 6/6] qemu_driver: add new stats worker qemuDomainGetStatsVm Date: Wed, 7 Sep 2022 16:04:23 +0530 Message-Id: <20220907103423.662344-7-natto@weirdnatto.in> In-Reply-To: <20220907103423.662344-1-natto@weirdnatto.in> References: <20220907103423.662344-1-natto@weirdnatto.in> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mkletzan@redhat.com, pbonzini@redhat.com, Amneesh Singh Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1662546908723100001 Content-Type: text/plain; charset="utf-8"; x-default="true" This patch adds a new worker qemuDomainGetStatsVm which reports the stats returned by "query-stats" via qemuMonitorQueryStats for the VM target. Signed-off-by: Amneesh Singh --- include/libvirt/libvirt-domain.h | 1 + src/libvirt-domain.c | 3 +++ src/qemu/qemu_driver.c | 41 ++++++++++++++++++++++++++++++++ tools/virsh-domain-monitor.c | 7 ++++++ 4 files changed, 52 insertions(+) diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-dom= ain.h index 7430a08619..3b25c8dd77 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -2706,6 +2706,7 @@ typedef enum { VIR_DOMAIN_STATS_IOTHREAD =3D (1 << 7), /* return iothread poll info (= Since: 4.10.0) */ VIR_DOMAIN_STATS_MEMORY =3D (1 << 8), /* return domain memory info (Si= nce: 6.0.0) */ VIR_DOMAIN_STATS_DIRTYRATE =3D (1 << 9), /* return domain dirty rate i= nfo (Since: 7.2.0) */ + VIR_DOMAIN_STATS_VM =3D (1 << 10), /* return vm info (Since: 8.6.0) */ } virDomainStatsTypes; =20 /** diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 80a6f0f269..52fa136186 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -12481,6 +12481,9 @@ virConnectGetDomainCapabilities(virConnectPtr conn, * rate for a virtual cp= u as * unsigned long long. * + * VIR_DOMAIN_STATS_VM: + * Return fd-based KVM statistics for the target VM + * * Note that entire stats groups or individual stat fields may be missing = from * the output in case they are not supported by the given hypervisor, are = not * applicable for the current state of the guest domain, or their retrieval diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 79146b6bb8..ce4d4a0f03 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -18727,6 +18727,41 @@ qemuDomainGetStatsDirtyRate(virQEMUDriver *driver = G_GNUC_UNUSED, return 0; } =20 + +static int +qemuDomainGetStatsVm(virQEMUDriver *driver G_GNUC_UNUSED, + virDomainObj *dom, + virTypedParamList *params, + unsigned int privflags) +{ + qemuDomainObjPrivate *priv =3D dom->privateData; + g_autoptr(virJSONValue) queried_stats =3D NULL; + g_autoptr(GHashTable) stats =3D NULL; + virJSONValue *stats_obj =3D NULL; + + if (!HAVE_JOB(privflags) || !virDomainObjIsActive(dom)) + return 0; + + if (qemuDomainRefreshStatsSchema(dom) < 0) + return 0; + + qemuDomainObjEnterMonitor(dom); + queried_stats =3D qemuMonitorQueryStats(priv->mon, + QEMU_MONITOR_QUERY_STATS_TARGET_= VM, + NULL, NULL); + qemuDomainObjExitMonitor(dom); + + if (!queried_stats || virJSONValueArraySize(queried_stats) !=3D 1) + return 0; + + stats_obj =3D virJSONValueArrayGet(queried_stats, 0); + stats =3D qemuMonitorExtractQueryStats(stats_obj); + + qemuDomainAddStatsFromHashTable(stats, priv->statsSchema, "vm", params= ); + + return 0; +} + typedef int (*qemuDomainGetStatsFunc)(virQEMUDriver *driver, virDomainObj *dom, @@ -18751,6 +18786,11 @@ static virQEMUCapsFlags queryDirtyRateRequired[] = =3D { QEMU_CAPS_LAST }; =20 +static virQEMUCapsFlags queryVmRequired[] =3D { + QEMU_CAPS_QUERY_STATS, + QEMU_CAPS_LAST +}; + static struct qemuDomainGetStatsWorker qemuDomainGetStatsWorkers[] =3D { { qemuDomainGetStatsState, VIR_DOMAIN_STATS_STATE, false, NULL }, { qemuDomainGetStatsCpu, VIR_DOMAIN_STATS_CPU_TOTAL, true, NULL }, @@ -18762,6 +18802,7 @@ static struct qemuDomainGetStatsWorker qemuDomainGe= tStatsWorkers[] =3D { { qemuDomainGetStatsIOThread, VIR_DOMAIN_STATS_IOTHREAD, true, queryIO= ThreadRequired }, { qemuDomainGetStatsMemory, VIR_DOMAIN_STATS_MEMORY, false, NULL }, { qemuDomainGetStatsDirtyRate, VIR_DOMAIN_STATS_DIRTYRATE, true, query= DirtyRateRequired }, + { qemuDomainGetStatsVm, VIR_DOMAIN_STATS_VM, true, queryVmRequired }, { NULL, 0, false, NULL } }; =20 diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c index dc5fe13e49..be8f827685 100644 --- a/tools/virsh-domain-monitor.c +++ b/tools/virsh-domain-monitor.c @@ -2065,6 +2065,10 @@ static const vshCmdOptDef opts_domstats[] =3D { .type =3D VSH_OT_BOOL, .help =3D N_("report domain dirty rate information"), }, + {.name =3D "vm", + .type =3D VSH_OT_BOOL, + .help =3D N_("report fd-based VM statistics by KVM"), + }, {.name =3D "list-active", .type =3D VSH_OT_BOOL, .help =3D N_("list only active domains"), @@ -2186,6 +2190,9 @@ cmdDomstats(vshControl *ctl, const vshCmd *cmd) if (vshCommandOptBool(cmd, "dirtyrate")) stats |=3D VIR_DOMAIN_STATS_DIRTYRATE; =20 + if (vshCommandOptBool(cmd, "vm")) + stats |=3D VIR_DOMAIN_STATS_VM; + if (vshCommandOptBool(cmd, "list-active")) flags |=3D VIR_CONNECT_GET_ALL_DOMAINS_STATS_ACTIVE; =20 --=20 2.37.1