render / rpms / libvirt

Forked from rpms/libvirt a year ago
Clone
c313de
From 04bdbfa106768447822f3e8eeb2946e1f7bfb2b5 Mon Sep 17 00:00:00 2001
c313de
Message-Id: <04bdbfa106768447822f3e8eeb2946e1f7bfb2b5@dist-git>
c313de
From: Pavel Hrdina <phrdina@redhat.com>
c313de
Date: Mon, 1 Jul 2019 17:07:12 +0200
c313de
Subject: [PATCH] util: introduce cgroup v2 files
c313de
MIME-Version: 1.0
c313de
Content-Type: text/plain; charset=UTF-8
c313de
Content-Transfer-Encoding: 8bit
c313de
c313de
Place cgroup v2 backend type before cgroup v1 to make it obvious
c313de
that cgroup v2 is preferred implementation.
c313de
c313de
Following patches will introduce support for hybrid configuration
c313de
which will allow us to use both at the same time, but we should
c313de
prefer cgroup v2 regardless.
c313de
c313de
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
c313de
(cherry picked from commit b4ddf5ae62ee3a50c7ead1e00914a141e5798096)
c313de
c313de
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1689297
c313de
c313de
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
c313de
Message-Id: <fcbffeda541380f2e11e42f192b80276153bc84f.1561993100.git.phrdina@redhat.com>
c313de
Reviewed-by: Ján Tomko <jtomko@redhat.com>
c313de
---
c313de
 src/Makefile.am             |  1 +
c313de
 src/libvirt_private.syms    |  3 ++
c313de
 src/util/Makefile.inc.am    |  2 ++
c313de
 src/util/vircgroup.c        |  3 ++
c313de
 src/util/vircgroupbackend.c |  2 ++
c313de
 src/util/vircgroupbackend.h |  3 +-
c313de
 src/util/vircgrouppriv.h    |  9 ++++++
c313de
 src/util/vircgroupv2.c      | 63 +++++++++++++++++++++++++++++++++++++
c313de
 src/util/vircgroupv2.h      | 27 ++++++++++++++++
c313de
 9 files changed, 112 insertions(+), 1 deletion(-)
c313de
 create mode 100644 src/util/vircgroupv2.c
c313de
 create mode 100644 src/util/vircgroupv2.h
c313de
c313de
diff --git a/src/Makefile.am b/src/Makefile.am
c313de
index 0def0a3b19..cc8e29a45a 100644
c313de
--- a/src/Makefile.am
c313de
+++ b/src/Makefile.am
c313de
@@ -680,6 +680,7 @@ libvirt_setuid_rpc_client_la_SOURCES = \
c313de
 		util/vircgroup.c \
c313de
 		util/vircgroupbackend.c \
c313de
 		util/vircgroupv1.c \
c313de
+		util/vircgroupv2.c \
c313de
 		util/vircommand.c \
c313de
 		util/virconf.c \
c313de
 		util/virdbus.c \
c313de
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
c313de
index b144955154..8132f9664b 100644
c313de
--- a/src/libvirt_private.syms
c313de
+++ b/src/libvirt_private.syms
c313de
@@ -1598,6 +1598,9 @@ virCgroupBackendRegister;
c313de
 # util/vircgroupv1.h
c313de
 virCgroupV1Register;
c313de
 
c313de
+# util/vircgroupv2.h
c313de
+virCgroupV2Register;
c313de
+
c313de
 # util/virclosecallbacks.h
c313de
 virCloseCallbacksGet;
c313de
 virCloseCallbacksGetConn;
c313de
diff --git a/src/util/Makefile.inc.am b/src/util/Makefile.inc.am
c313de
index 725ece98e9..24a98632a3 100644
c313de
--- a/src/util/Makefile.inc.am
c313de
+++ b/src/util/Makefile.inc.am
c313de
@@ -27,6 +27,8 @@ UTIL_SOURCES = \
c313de
 	util/vircgroupbackend.h \
c313de
 	util/vircgroupv1.c \
c313de
 	util/vircgroupv1.h \
c313de
+	util/vircgroupv2.c \
c313de
+	util/vircgroupv2.h \
c313de
 	util/virclosecallbacks.c \
c313de
 	util/virclosecallbacks.h \
c313de
 	util/vircommand.c \
c313de
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
c313de
index 7ec1399bc6..42930582db 100644
c313de
--- a/src/util/vircgroup.c
c313de
+++ b/src/util/vircgroup.c
c313de
@@ -1240,6 +1240,9 @@ virCgroupFree(virCgroupPtr *group)
c313de
         VIR_FREE((*group)->legacy[i].placement);
c313de
     }
c313de
 
c313de
+    VIR_FREE((*group)->unified.mountPoint);
c313de
+    VIR_FREE((*group)->unified.placement);
c313de
+
c313de
     VIR_FREE((*group)->path);
c313de
     VIR_FREE(*group);
c313de
 }
c313de
diff --git a/src/util/vircgroupbackend.c b/src/util/vircgroupbackend.c
c313de
index d854c9711d..79fe6cb73d 100644
c313de
--- a/src/util/vircgroupbackend.c
c313de
+++ b/src/util/vircgroupbackend.c
c313de
@@ -21,6 +21,7 @@
c313de
 
c313de
 #include "vircgroupbackend.h"
c313de
 #include "vircgroupv1.h"
c313de
+#include "vircgroupv2.h"
c313de
 #include "virerror.h"
c313de
 #include "virthread.h"
c313de
 
c313de
@@ -28,6 +29,7 @@
c313de
 
c313de
 VIR_ENUM_DECL(virCgroupBackend);
c313de
 VIR_ENUM_IMPL(virCgroupBackend, VIR_CGROUP_BACKEND_TYPE_LAST,
c313de
+              "cgroup V2",
c313de
               "cgroup V1");
c313de
 
c313de
 static virOnceControl virCgroupBackendOnce = VIR_ONCE_CONTROL_INITIALIZER;
c313de
diff --git a/src/util/vircgroupbackend.h b/src/util/vircgroupbackend.h
c313de
index 1c5744ef76..b1f19233e4 100644
c313de
--- a/src/util/vircgroupbackend.h
c313de
+++ b/src/util/vircgroupbackend.h
c313de
@@ -50,7 +50,8 @@ typedef enum {
c313de
 } virCgroupBackendTaskFlags;
c313de
 
c313de
 typedef enum {
c313de
-    VIR_CGROUP_BACKEND_TYPE_V1 = 0,
c313de
+    VIR_CGROUP_BACKEND_TYPE_V2 = 0,
c313de
+    VIR_CGROUP_BACKEND_TYPE_V1,
c313de
     VIR_CGROUP_BACKEND_TYPE_LAST,
c313de
 } virCgroupBackendType;
c313de
 
c313de
diff --git a/src/util/vircgrouppriv.h b/src/util/vircgrouppriv.h
c313de
index c50a25f195..4a0d75ddbc 100644
c313de
--- a/src/util/vircgrouppriv.h
c313de
+++ b/src/util/vircgrouppriv.h
c313de
@@ -45,12 +45,21 @@ struct _virCgroupV1Controller {
c313de
 typedef struct _virCgroupV1Controller virCgroupV1Controller;
c313de
 typedef virCgroupV1Controller *virCgroupV1ControllerPtr;
c313de
 
c313de
+struct _virCgroupV2Controller {
c313de
+    int controllers;
c313de
+    char *mountPoint;
c313de
+    char *placement;
c313de
+};
c313de
+typedef struct _virCgroupV2Controller virCgroupV2Controller;
c313de
+typedef virCgroupV2Controller *virCgroupV2ControllerPtr;
c313de
+
c313de
 struct _virCgroup {
c313de
     char *path;
c313de
 
c313de
     virCgroupBackendPtr backend;
c313de
 
c313de
     virCgroupV1Controller legacy[VIR_CGROUP_CONTROLLER_LAST];
c313de
+    virCgroupV2Controller unified;
c313de
 };
c313de
 
c313de
 int virCgroupSetValueStr(virCgroupPtr group,
c313de
diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
c313de
new file mode 100644
c313de
index 0000000000..23bf81dae2
c313de
--- /dev/null
c313de
+++ b/src/util/vircgroupv2.c
c313de
@@ -0,0 +1,63 @@
c313de
+/*
c313de
+ * vircgroupv2.c: methods for cgroups v2 backend
c313de
+ *
c313de
+ * Copyright (C) 2018 Red Hat, Inc.
c313de
+ *
c313de
+ * This library is free software; you can redistribute it and/or
c313de
+ * modify it under the terms of the GNU Lesser General Public
c313de
+ * License as published by the Free Software Foundation; either
c313de
+ * version 2.1 of the License, or (at your option) any later version.
c313de
+ *
c313de
+ * This library is distributed in the hope that it will be useful,
c313de
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
c313de
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c313de
+ * Lesser General Public License for more details.
c313de
+ *
c313de
+ * You should have received a copy of the GNU Lesser General Public
c313de
+ * License along with this library.  If not, see
c313de
+ * <http://www.gnu.org/licenses/>.
c313de
+ */
c313de
+#include <config.h>
c313de
+
c313de
+#include "internal.h"
c313de
+
c313de
+#define __VIR_CGROUP_ALLOW_INCLUDE_PRIV_H__
c313de
+#include "vircgrouppriv.h"
c313de
+#undef __VIR_CGROUP_ALLOW_INCLUDE_PRIV_H__
c313de
+
c313de
+#include "vircgroup.h"
c313de
+#include "vircgroupbackend.h"
c313de
+#include "vircgroupv2.h"
c313de
+#include "virlog.h"
c313de
+
c313de
+VIR_LOG_INIT("util.cgroup");
c313de
+
c313de
+#define VIR_FROM_THIS VIR_FROM_CGROUP
c313de
+
c313de
+VIR_ENUM_DECL(virCgroupV2Controller);
c313de
+VIR_ENUM_IMPL(virCgroupV2Controller, VIR_CGROUP_CONTROLLER_LAST,
c313de
+              "cpu", "cpuacct", "cpuset", "memory", "devices",
c313de
+              "freezer", "io", "net_cls", "perf_event", "name=systemd");
c313de
+
c313de
+#ifdef __linux__
c313de
+
c313de
+virCgroupBackend virCgroupV2Backend = {
c313de
+    .type = VIR_CGROUP_BACKEND_TYPE_V2,
c313de
+};
c313de
+
c313de
+
c313de
+void
c313de
+virCgroupV2Register(void)
c313de
+{
c313de
+    virCgroupBackendRegister(&virCgroupV2Backend);
c313de
+}
c313de
+
c313de
+#else /* !__linux__ */
c313de
+
c313de
+void
c313de
+virCgroupV2Register(void)
c313de
+{
c313de
+    VIR_INFO("Control groups not supported on this platform");
c313de
+}
c313de
+
c313de
+#endif /* !__linux__ */
c313de
diff --git a/src/util/vircgroupv2.h b/src/util/vircgroupv2.h
c313de
new file mode 100644
c313de
index 0000000000..a5d0bd0978
c313de
--- /dev/null
c313de
+++ b/src/util/vircgroupv2.h
c313de
@@ -0,0 +1,27 @@
c313de
+/*
c313de
+ * vircgroupv2.h: methods for cgroups v2 backend
c313de
+ *
c313de
+ * Copyright (C) 2018 Red Hat, Inc.
c313de
+ *
c313de
+ * This library is free software; you can redistribute it and/or
c313de
+ * modify it under the terms of the GNU Lesser General Public
c313de
+ * License as published by the Free Software Foundation; either
c313de
+ * version 2.1 of the License, or (at your option) any later version.
c313de
+ *
c313de
+ * This library is distributed in the hope that it will be useful,
c313de
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
c313de
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c313de
+ * Lesser General Public License for more details.
c313de
+ *
c313de
+ * You should have received a copy of the GNU Lesser General Public
c313de
+ * License along with this library.  If not, see
c313de
+ * <http://www.gnu.org/licenses/>.
c313de
+ */
c313de
+
c313de
+#ifndef __VIR_CGROUP_V2_H__
c313de
+# define __VIR_CGROUP_V2_H__
c313de
+
c313de
+void
c313de
+virCgroupV2Register(void);
c313de
+
c313de
+#endif /* __VIR_CGROUP_V2_H__ */
c313de
-- 
c313de
2.22.0
c313de