On 10/02/2018 10:44 AM, Pavel Hrdina wrote:
> Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
> ---
> 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@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list