On 10/02/2018 10:44 AM, Pavel Hrdina wrote: > Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> > --- > src/util/vircgroupv2.c | 75 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 75 insertions(+) > > diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c > index 32d20f2ff6..da3b3a984c 100644 > --- a/src/util/vircgroupv2.c > +++ b/src/util/vircgroupv2.c > @@ -1044,6 +1044,80 @@ virCgroupV2SetMemory(virCgroupPtr group, > } > > > +static int > +virCgroupV2GetMemoryStat(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) > +{ > + VIR_AUTOFREE(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.")); > + return -1; > + } > + *valueStr = '\0'; > + > + if (virStrToLong_ull(valueStr + 1, NULL, 10, &value) < 0) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("Unable to parse '%s' as an integer"), > + valueStr + 1); > + return -1; > + } > + > + if (STREQ(line, "file")) > + cacheVal = value >> 10; > + else if (STREQ(line, "active_anon")) > + activeAnonVal = value >> 10; > + else if (STREQ(line, "inactive_anon")) > + inactiveAnonVal = value >> 10; > + else if (STREQ(line, "active_file")) > + activeFileVal = value >> 10; > + else if (STREQ(line, "inactive_file")) > + inactiveFileVal = value >> 10; > + else if (STREQ(line, "unevictable")) > + unevictableVal = value >> 10; Funny, in 22/53 you've created an array so that you don't need to do this. I couldn't care less TBH. > + } > + > + *cache = cacheVal; > + *activeAnon = activeAnonVal; > + *inactiveAnon = inactiveAnonVal; > + *activeFile = activeFileVal; > + *inactiveFile = inactiveFileVal; > + *unevictable = unevictableVal; > + > + return 0; > +} > + > + > virCgroupBackend virCgroupV2Backend = { > .type = VIR_CGROUP_BACKEND_TYPE_V2, > > @@ -1082,6 +1156,7 @@ virCgroupBackend virCgroupV2Backend = { > .getBlkioDeviceWriteBps = virCgroupV2GetBlkioDeviceWriteBps, > > .setMemory = virCgroupV2SetMemory, > + .getMemoryStat = virCgroupV2GetMemoryStat, > }; > > > ACK Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list