On 08/09/2018 03:44 PM, Pavel Hrdina wrote: > Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> > --- > src/libvirt_private.syms | 1 + > src/util/vircgroup.c | 88 ++++++++++++++++++++++++++++++++++++++++ > src/util/vircgroup.h | 7 ++++ > 3 files changed, 96 insertions(+) > > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > index 59d9bc380e..ee0dca6129 100644 > --- a/src/libvirt_private.syms > +++ b/src/libvirt_private.syms > @@ -1532,6 +1532,7 @@ virCgroupGetDomainTotalCpuStats; > virCgroupGetFreezerState; > virCgroupGetMemoryHardLimit; > virCgroupGetMemorySoftLimit; > +virCgroupGetMemoryStat; > virCgroupGetMemoryUsage; > virCgroupGetMemSwapHardLimit; > virCgroupGetMemSwapUsage; > diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c > index 37982a9607..b91acd13c7 100644 > --- a/src/util/vircgroup.c > +++ b/src/util/vircgroup.c > @@ -2427,6 +2427,94 @@ virCgroupSetMemory(virCgroupPtr group, unsigned long long kb) > } > > > +/** > + * virCgroupGetMemoryStat: > + * > + * @group: The cgroup to change memory for > + * @cache: page cache memory in KiB > + * @activeAnon: anonymous and swap cache memory in KiB > + * @inactiveAnon: anonymous and swap cache memory in KiB > + * @activeFile: file-backed memory in KiB > + * @inactiveFile: file-backed memory in KiB > + * @unevictable: memory that cannot be reclaimed KiB > + * > + * Returns: 0 on success, -1 on error > + */ > +int > +virCgroupGetMemoryStat(virCgroupPtr group, > + unsigned long long *cache, > + unsigned long long *activeAnon, > + unsigned long long *inactiveAnon, > + unsigned long long *activeFile, > + unsigned long long *inactiveFile, > + unsigned long long *unevictable) > +{ > + int ret = -1; > + char *stat = NULL; > + char *line = NULL; > + unsigned long long cacheVal = 0; > + unsigned long long activeAnonVal = 0; > + unsigned long long inactiveAnonVal = 0; > + unsigned long long activeFileVal = 0; > + unsigned long long inactiveFileVal = 0; > + unsigned long long unevictableVal = 0; > + > + if (virCgroupGetValueStr(group, > + VIR_CGROUP_CONTROLLER_MEMORY, > + "memory.stat", > + &stat) < 0) { > + return -1; > + } > + > + line = stat; > + > + while (line) { > + char *newLine = strchr(line, '\n'); > + char *valueStr = strchr(line, ' '); > + unsigned long long value; > + > + if (newLine) > + *newLine = '\0'; > + > + if (!valueStr) { > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > + _("Cannot parse 'memory.stat' cgroup file.")); > + goto cleanup; > + } > + *valueStr = '\0'; > + > + if (virStrToLong_ull(valueStr + 1, NULL, 10, &value) < 0) > + goto cleanup; > + > + if (STREQ(line, "cache")) > + cacheVal = value >> 10; Can't we assign directly to *cache? Sure, you'd need to initialize it before, just like you're initializing cacheVal. Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list