return 0;
}
+
+static int
+qemuDomainGetStatsVm(virQEMUDriver *driver G_GNUC_UNUSED,
+ virDomainObj *dom,
+ virTypedParamList *params,
+ unsigned int privflags)
+{
+ qemuDomainObjPrivate *priv = dom->privateData;
+ g_autoptr(virJSONValue) queried_stats = NULL;
+ g_autoptr(GHashTable) stats = NULL;
+ virJSONValue *stats_obj = NULL;
+
+ if (!HAVE_JOB(privflags) || !virDomainObjIsActive(dom))
+ return 0;
+
+ if (qemuDomainRefreshStatsSchema(dom) < 0)
+ return 0;
+
+ qemuDomainObjEnterMonitor(dom);
+ queried_stats = qemuMonitorQueryStats(priv->mon,
+ QEMU_MONITOR_QUERY_STATS_TARGET_VM,
+ NULL, NULL);
+ qemuDomainObjExitMonitor(dom);
+
+ if (!queried_stats || virJSONValueArraySize(queried_stats) != 1)
+ return 0;
+
+ stats_obj = virJSONValueArrayGet(queried_stats, 0);
+ stats = qemuMonitorExtractQueryStats(stats_obj);
+
+ qemuDomainAddStatsFromHashTable(stats, priv->statsSchema, "vm", params);
+
+ return 0;
+}
+
typedef int
(*qemuDomainGetStatsFunc)(virQEMUDriver *driver,
virDomainObj *dom,
QEMU_CAPS_LAST
};
+static virQEMUCapsFlags queryVmRequired[] = {
+ QEMU_CAPS_QUERY_STATS,
+ QEMU_CAPS_LAST
+};
+
static struct qemuDomainGetStatsWorker qemuDomainGetStatsWorkers[] = {
{ qemuDomainGetStatsState, VIR_DOMAIN_STATS_STATE, false, NULL },
{ qemuDomainGetStatsCpu, VIR_DOMAIN_STATS_CPU_TOTAL, true, NULL },
{ qemuDomainGetStatsIOThread, VIR_DOMAIN_STATS_IOTHREAD, true, queryIOThreadRequired },
{ qemuDomainGetStatsMemory, VIR_DOMAIN_STATS_MEMORY, false, NULL },
{ qemuDomainGetStatsDirtyRate, VIR_DOMAIN_STATS_DIRTYRATE, true, queryDirtyRateRequired },
+ { qemuDomainGetStatsVm, VIR_DOMAIN_STATS_VM, true, queryVmRequired },
{ NULL, 0, false, NULL }
};
.type = VSH_OT_BOOL,
.help = N_("report domain dirty rate information"),
},
+ {.name = "vm",
+ .type = VSH_OT_BOOL,
+ .help = N_("report fd-based VM statistics by KVM"),
+ },
{.name = "list-active",
.type = VSH_OT_BOOL,
.help = N_("list only active domains"),
if (vshCommandOptBool(cmd, "dirtyrate"))
stats |= VIR_DOMAIN_STATS_DIRTYRATE;
+ if (vshCommandOptBool(cmd, "vm"))
+ stats |= VIR_DOMAIN_STATS_VM;
+
if (vshCommandOptBool(cmd, "list-active"))
flags |= VIR_CONNECT_GET_ALL_DOMAINS_STATS_ACTIVE;