---
Notes to v4:
- check errors before filling param array
- UL->ULL change punted to separate patch
src/lxc/lxc_driver.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 56 insertions(+)
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index f735631..827d989 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -5197,6 +5197,61 @@ lxcNodeGetInfo(virConnectPtr conn,
static int
+lxcDomainMemoryStats(virDomainPtr dom,
+ struct _virDomainMemoryStat *stats,
+ unsigned int nr_stats,
+ unsigned int flags)
+{
+ virDomainObjPtr vm;
+ int ret = -1;
+ virLXCDomainObjPrivatePtr priv;
+ unsigned long long swap_usage;
+ unsigned long mem_usage;
+
+ virCheckFlags(0, -1);
+
+ if (!(vm = lxcDomObjFromDomain(dom)))
+ goto cleanup;
+
+ priv = vm->privateData;
+
+ if (virDomainMemoryStatsEnsureACL(dom->conn, vm->def) < 0)
+ goto cleanup;
+
+ if (!virCgroupGetMemSwapUsage(priv->cgroup, &swap_usage))
+ goto cleanup;
+
+ if (!virCgroupGetMemoryUsage(priv->cgroup, &mem_usage))
+ goto cleanup;
+
+ ret = 0;
+ if (!virDomainObjIsActive(vm))
+ goto cleanup;
+
+ if (ret < nr_stats) {
+ stats[ret].tag = VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON;
+ stats[ret].val = vm->def->mem.cur_balloon;
+ ret++;
+ }
+ if (ret < nr_stats) {
+ stats[ret].tag = VIR_DOMAIN_MEMORY_STAT_SWAP_IN;
+ stats[ret].val = swap_usage;
+ ret++;
+ }
+ if (ret < nr_stats) {
+ stats[ret].tag = VIR_DOMAIN_MEMORY_STAT_RSS;
+ stats[ret].val = mem_usage;
+ ret++;
+ }
+
+cleanup:
+ if (vm)
+ virObjectUnlock(vm);
+ return ret;
+}
+
+
+static int
lxcNodeGetCPUStats(virConnectPtr conn,
int cpuNum,
virNodeCPUStatsPtr params,
@@ -5426,6 +5481,7 @@ static virDriver lxcDriver = {
.domainSetSchedulerParameters = lxcDomainSetSchedulerParameters, /* 0.5.0 */
.domainSetSchedulerParametersFlags = lxcDomainSetSchedulerParametersFlags, /* 0.9.2
*/
.domainInterfaceStats = lxcDomainInterfaceStats, /* 0.7.3 */
+ .domainMemoryStats = lxcDomainMemoryStats, /* 1.2.2 */
.nodeGetCPUStats = lxcNodeGetCPUStats, /* 0.9.3 */
.nodeGetMemoryStats = lxcNodeGetMemoryStats, /* 0.9.3 */
.nodeGetCellsFreeMemory = lxcNodeGetCellsFreeMemory, /* 0.6.5 */
--
1.8.4.5