mirror of
https://git.proxmox.com/git/pve-qemu
synced 2025-08-18 16:18:57 +00:00

Many stable fixes came in since the last bump, a few of which were actually already present. Notable ones not yet present include a few guest-triggerable assert fixes, some AHCI/IDE fixes (including the fix for bug #2784), TGC fixes for i386 and ARM, VirtIO fixes, fix to avoid VNC clipboard denial-of-service. The reentrancy patches that landed upstream/stable were a newer version than the ones backported initially here, so it was necessary to explicitly drop them before rebase (which then picked up the upstream version). There were no other conflicts. Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
151 lines
5.7 KiB
Diff
151 lines
5.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
|
|
Date: Mon, 6 Apr 2020 12:16:43 +0200
|
|
Subject: [PATCH] PVE: virtio-balloon: improve query-balloon
|
|
|
|
Actually provide memory information via the query-balloon
|
|
command.
|
|
|
|
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
[FE: add BalloonInfo to member name exceptions list]
|
|
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
|
|
---
|
|
hw/virtio/virtio-balloon.c | 33 +++++++++++++++++++++++++++++++--
|
|
monitor/hmp-cmds.c | 30 +++++++++++++++++++++++++++++-
|
|
qapi/machine.json | 22 +++++++++++++++++++++-
|
|
qapi/pragma.json | 1 +
|
|
4 files changed, 82 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
|
|
index e4c4c2d3c8..49874569b1 100644
|
|
--- a/hw/virtio/virtio-balloon.c
|
|
+++ b/hw/virtio/virtio-balloon.c
|
|
@@ -806,8 +806,37 @@ static uint64_t virtio_balloon_get_features(VirtIODevice *vdev, uint64_t f,
|
|
static void virtio_balloon_stat(void *opaque, BalloonInfo *info)
|
|
{
|
|
VirtIOBalloon *dev = opaque;
|
|
- info->actual = get_current_ram_size() - ((uint64_t) dev->actual <<
|
|
- VIRTIO_BALLOON_PFN_SHIFT);
|
|
+ ram_addr_t ram_size = get_current_ram_size();
|
|
+ info->actual = ram_size - ((uint64_t) dev->actual <<
|
|
+ VIRTIO_BALLOON_PFN_SHIFT);
|
|
+
|
|
+ info->max_mem = ram_size;
|
|
+
|
|
+ if (!(balloon_stats_enabled(dev) && balloon_stats_supported(dev) &&
|
|
+ dev->stats_last_update)) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ info->last_update = dev->stats_last_update;
|
|
+ info->has_last_update = true;
|
|
+
|
|
+ info->mem_swapped_in = dev->stats[VIRTIO_BALLOON_S_SWAP_IN];
|
|
+ info->has_mem_swapped_in = info->mem_swapped_in >= 0 ? true : false;
|
|
+
|
|
+ info->mem_swapped_out = dev->stats[VIRTIO_BALLOON_S_SWAP_OUT];
|
|
+ info->has_mem_swapped_out = info->mem_swapped_out >= 0 ? true : false;
|
|
+
|
|
+ info->major_page_faults = dev->stats[VIRTIO_BALLOON_S_MAJFLT];
|
|
+ info->has_major_page_faults = info->major_page_faults >= 0 ? true : false;
|
|
+
|
|
+ info->minor_page_faults = dev->stats[VIRTIO_BALLOON_S_MINFLT];
|
|
+ info->has_minor_page_faults = info->minor_page_faults >= 0 ? true : false;
|
|
+
|
|
+ info->free_mem = dev->stats[VIRTIO_BALLOON_S_MEMFREE];
|
|
+ info->has_free_mem = info->free_mem >= 0 ? true : false;
|
|
+
|
|
+ info->total_mem = dev->stats[VIRTIO_BALLOON_S_MEMTOT];
|
|
+ info->has_total_mem = info->total_mem >= 0 ? true : false;
|
|
}
|
|
|
|
static void virtio_balloon_to_target(void *opaque, ram_addr_t target)
|
|
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
|
|
index 01b789a79e..480b798963 100644
|
|
--- a/monitor/hmp-cmds.c
|
|
+++ b/monitor/hmp-cmds.c
|
|
@@ -696,7 +696,35 @@ void hmp_info_balloon(Monitor *mon, const QDict *qdict)
|
|
return;
|
|
}
|
|
|
|
- monitor_printf(mon, "balloon: actual=%" PRId64 "\n", info->actual >> 20);
|
|
+ monitor_printf(mon, "balloon: actual=%" PRId64, info->actual >> 20);
|
|
+ monitor_printf(mon, " max_mem=%" PRId64, info->max_mem >> 20);
|
|
+ if (info->has_total_mem) {
|
|
+ monitor_printf(mon, " total_mem=%" PRId64, info->total_mem >> 20);
|
|
+ }
|
|
+ if (info->has_free_mem) {
|
|
+ monitor_printf(mon, " free_mem=%" PRId64, info->free_mem >> 20);
|
|
+ }
|
|
+
|
|
+ if (info->has_mem_swapped_in) {
|
|
+ monitor_printf(mon, " mem_swapped_in=%" PRId64, info->mem_swapped_in);
|
|
+ }
|
|
+ if (info->has_mem_swapped_out) {
|
|
+ monitor_printf(mon, " mem_swapped_out=%" PRId64, info->mem_swapped_out);
|
|
+ }
|
|
+ if (info->has_major_page_faults) {
|
|
+ monitor_printf(mon, " major_page_faults=%" PRId64,
|
|
+ info->major_page_faults);
|
|
+ }
|
|
+ if (info->has_minor_page_faults) {
|
|
+ monitor_printf(mon, " minor_page_faults=%" PRId64,
|
|
+ info->minor_page_faults);
|
|
+ }
|
|
+ if (info->has_last_update) {
|
|
+ monitor_printf(mon, " last_update=%" PRId64,
|
|
+ info->last_update);
|
|
+ }
|
|
+
|
|
+ monitor_printf(mon, "\n");
|
|
|
|
qapi_free_BalloonInfo(info);
|
|
}
|
|
diff --git a/qapi/machine.json b/qapi/machine.json
|
|
index b9228a5e46..10e77a9af3 100644
|
|
--- a/qapi/machine.json
|
|
+++ b/qapi/machine.json
|
|
@@ -1054,9 +1054,29 @@
|
|
# @actual: the logical size of the VM in bytes
|
|
# Formula used: logical_vm_size = vm_ram_size - balloon_size
|
|
#
|
|
+# @last_update: time when stats got updated from guest
|
|
+#
|
|
+# @mem_swapped_in: number of pages swapped in within the guest
|
|
+#
|
|
+# @mem_swapped_out: number of pages swapped out within the guest
|
|
+#
|
|
+# @major_page_faults: number of major page faults within the guest
|
|
+#
|
|
+# @minor_page_faults: number of minor page faults within the guest
|
|
+#
|
|
+# @free_mem: amount of memory (in bytes) free in the guest
|
|
+#
|
|
+# @total_mem: amount of memory (in bytes) visible to the guest
|
|
+#
|
|
+# @max_mem: amount of memory (in bytes) assigned to the guest
|
|
+#
|
|
# Since: 0.14
|
|
##
|
|
-{ 'struct': 'BalloonInfo', 'data': {'actual': 'int' } }
|
|
+{ 'struct': 'BalloonInfo',
|
|
+ 'data': {'actual': 'int', '*last_update': 'int', '*mem_swapped_in': 'int',
|
|
+ '*mem_swapped_out': 'int', '*major_page_faults': 'int',
|
|
+ '*minor_page_faults': 'int', '*free_mem': 'int',
|
|
+ '*total_mem': 'int', 'max_mem': 'int' } }
|
|
|
|
##
|
|
# @query-balloon:
|
|
diff --git a/qapi/pragma.json b/qapi/pragma.json
|
|
index 29233db825..f2097b9020 100644
|
|
--- a/qapi/pragma.json
|
|
+++ b/qapi/pragma.json
|
|
@@ -37,6 +37,7 @@
|
|
'member-name-exceptions': [ # visible in:
|
|
'ACPISlotType', # query-acpi-ospm-status
|
|
'AcpiTableOptions', # -acpitable
|
|
+ 'BalloonInfo', # query-balloon
|
|
'BlkdebugEvent', # blockdev-add, -blockdev
|
|
'BlkdebugSetStateOptions', # blockdev-add, -blockdev
|
|
'BlockDeviceInfo', # query-block
|