Currently, bhyve does not support neither memory ballooning nor
reporting guest memory usage. So the following information can be
obtained:
- RSS of the running process
- Memory available to the guest (that is, guest total memory)
Signed-off-by: Roman Bogorodskiy <bogorodskiy(a)gmail.com>
---
src/bhyve/bhyve_driver.c | 50 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
index e4698b71bf..70e28c7e0b 100644
--- a/src/bhyve/bhyve_driver.c
+++ b/src/bhyve/bhyve_driver.c
@@ -3,6 +3,7 @@
*
* Copyright (C) 2014 Roman Bogorodskiy
* Copyright (C) 2014-2015 Red Hat, Inc.
+ * Copyright (C) 2025 The FreeBSD Foundation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -1658,6 +1659,54 @@ bhyveDomainInterfaceStats(virDomainPtr domain,
return ret;
}
+#define BHYVE_SET_MEMSTAT(TAG, VAL) \
+ if (i < nr_stats) { \
+ stats[i].tag = TAG; \
+ stats[i].val = VAL; \
+ i++; \
+ }
+
+static int
+bhyveDomainMemoryStats(virDomainPtr domain,
+ virDomainMemoryStatPtr stats,
+ unsigned int nr_stats,
+ unsigned int flags)
+{
+ virDomainObj *vm;
+ unsigned maxmem;
+ unsigned long long rss;
+ size_t i = 0;
+ int ret = -1;
+
+ virCheckFlags(0, -1);
+
+ if (!(vm = bhyveDomObjFromDomain(domain)))
+ goto cleanup;
+
+ if (virDomainObjCheckActive(vm) < 0)
+ goto cleanup;
+
+ if (virDomainMemoryStatsEnsureACL(domain->conn, vm->def) < 0)
+ goto cleanup;
+
+ if (virProcessGetStatInfo(NULL, NULL, NULL, NULL, &rss, vm->pid, 0) < 0)
+ virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+ _("cannot get RSS for domain"));
+ else
+ BHYVE_SET_MEMSTAT(VIR_DOMAIN_MEMORY_STAT_RSS, rss);
+
+ maxmem = virDomainDefGetMemoryTotal(vm->def);
+ BHYVE_SET_MEMSTAT(VIR_DOMAIN_MEMORY_STAT_AVAILABLE, maxmem);
+
+ ret = i;
+
+ cleanup:
+ virDomainObjEndAPI(&vm);
+ return ret;
+}
+
+#undef BHYVE_SET_MEMSTAT
+
static virHypervisorDriver bhyveHypervisorDriver = {
.name = "bhyve",
.connectURIProbe = bhyveConnectURIProbe,
@@ -1719,6 +1768,7 @@ static virHypervisorDriver bhyveHypervisorDriver = {
.connectDomainXMLFromNative = bhyveConnectDomainXMLFromNative, /* 2.1.0 */
.connectGetDomainCapabilities = bhyveConnectGetDomainCapabilities, /* 2.1.0 */
.domainInterfaceStats = bhyveDomainInterfaceStats, /* 11.5.0 */
+ .domainMemoryStats = bhyveDomainMemoryStats, /* 11.5.0 */
};
--
2.49.0