mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 11:35:19 +00:00
qemu: Parse current balloon value returned by query_balloon
Qemu once supported following memory stats which will returned by "query_balloon": stat_put(dict, "actual", actual); stat_put(dict, "mem_swapped_in", dev->stats[VIRTIO_BALLOON_S_SWAP_IN]); stat_put(dict, "mem_swapped_out", dev->stats[VIRTIO_BALLOON_S_SWAP_OUT]); stat_put(dict, "major_page_faults", dev->stats[VIRTIO_BALLOON_S_MAJFLT]); stat_put(dict, "minor_page_faults", dev->stats[VIRTIO_BALLOON_S_MINFLT]); stat_put(dict, "free_mem", dev->stats[VIRTIO_BALLOON_S_MEMFREE]); stat_put(dict, "total_mem", dev->stats[VIRTIO_BALLOON_S_MEMTOT]); But it later disabled all the stats except "actual" by commit 07b0403dfc2b2ac179ae5b48105096cc2d03375a. libvirt doesn't parse "actual", so user will always see a empty result with "virsh dommemstat $domain". Even qemu haven't disabled the stats, we should support parsing "actual".
This commit is contained in:
parent
d5f3320de7
commit
41514f7b3e
@ -467,11 +467,13 @@ typedef enum {
|
||||
*/
|
||||
VIR_DOMAIN_MEMORY_STAT_AVAILABLE = 5,
|
||||
|
||||
/* Current balloon value (in KB). */
|
||||
VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON = 6,
|
||||
/*
|
||||
* The number of statistics supported by this version of the interface.
|
||||
* To add new statistics, add them to the enum and increase this value.
|
||||
*/
|
||||
VIR_DOMAIN_MEMORY_STAT_NR = 6,
|
||||
VIR_DOMAIN_MEMORY_STAT_NR = 7,
|
||||
} virDomainMemoryStatTags;
|
||||
|
||||
typedef struct _virDomainMemoryStat virDomainMemoryStatStruct;
|
||||
|
@ -5750,6 +5750,8 @@ error:
|
||||
* The amount of memory which is not being used for any purpose (in kb).
|
||||
* VIR_DOMAIN_MEMORY_STAT_AVAILABLE:
|
||||
* The total amount of memory available to the domain's OS (in kb).
|
||||
* VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON:
|
||||
* Current balloon value (in kb).
|
||||
*
|
||||
* Returns: The number of stats provided or -1 in case of failure.
|
||||
*/
|
||||
|
@ -1119,6 +1119,18 @@ int qemuMonitorJSONGetMemoryStats(qemuMonitorPtr mon,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (virJSONValueObjectHasKey(data, "actual") && (got < nr_stats)) {
|
||||
if (virJSONValueObjectGetNumberUlong(data, "actual", &mem) < 0) {
|
||||
qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("info balloon reply was missing balloon actual"));
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
stats[got].tag = VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON;
|
||||
stats[got].val = (mem/1024);
|
||||
got++;
|
||||
}
|
||||
|
||||
if (virJSONValueObjectHasKey(data, "mem_swapped_in") && (got < nr_stats)) {
|
||||
if (virJSONValueObjectGetNumberUlong(data, "mem_swapped_in", &mem) < 0) {
|
||||
qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
|
@ -549,7 +549,9 @@ static int qemuMonitorParseExtraBalloonInfo(char *text,
|
||||
parseMemoryStat(&p, VIR_DOMAIN_MEMORY_STAT_UNUSED,
|
||||
",free_mem=", &stats[nr_stats_found]) ||
|
||||
parseMemoryStat(&p, VIR_DOMAIN_MEMORY_STAT_AVAILABLE,
|
||||
",total_mem=", &stats[nr_stats_found]))
|
||||
",total_mem=", &stats[nr_stats_found]) ||
|
||||
parseMemoryStat(&p, VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON,
|
||||
",actual=", &stats[nr_stats_found]))
|
||||
nr_stats_found++;
|
||||
|
||||
/* Skip to the next label. When *p is ',' the last match attempt
|
||||
|
@ -1147,6 +1147,8 @@ cmdDomMemStat(vshControl *ctl, const vshCmd *cmd)
|
||||
vshPrint (ctl, "unused %llu\n", stats[i].val);
|
||||
if (stats[i].tag == VIR_DOMAIN_MEMORY_STAT_AVAILABLE)
|
||||
vshPrint (ctl, "available %llu\n", stats[i].val);
|
||||
if (stats[i].tag == VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON)
|
||||
vshPrint (ctl, "actual %llu\n", stats[i].val);
|
||||
}
|
||||
|
||||
virDomainFree(dom);
|
||||
|
Loading…
Reference in New Issue
Block a user