提交 b4ddf5ae 编写于 作者: P Pavel Hrdina

util: introduce cgroup v2 files

Place cgroup v2 backend type before cgroup v1 to make it obvious
that cgroup v2 is preferred implementation.

Following patches will introduce support for hybrid configuration
which will allow us to use both at the same time, but we should
prefer cgroup v2 regardless.
Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
上级 87f71398
...@@ -675,6 +675,7 @@ libvirt_setuid_rpc_client_la_SOURCES = \ ...@@ -675,6 +675,7 @@ libvirt_setuid_rpc_client_la_SOURCES = \
util/vircgroup.c \ util/vircgroup.c \
util/vircgroupbackend.c \ util/vircgroupbackend.c \
util/vircgroupv1.c \ util/vircgroupv1.c \
util/vircgroupv2.c \
util/vircommand.c \ util/vircommand.c \
util/virconf.c \ util/virconf.c \
util/virdbus.c \ util/virdbus.c \
......
...@@ -1583,6 +1583,9 @@ virCgroupBackendRegister; ...@@ -1583,6 +1583,9 @@ virCgroupBackendRegister;
# util/vircgroupv1.h # util/vircgroupv1.h
virCgroupV1Register; virCgroupV1Register;
# util/vircgroupv2.h
virCgroupV2Register;
# util/virclosecallbacks.h # util/virclosecallbacks.h
virCloseCallbacksGet; virCloseCallbacksGet;
virCloseCallbacksGetConn; virCloseCallbacksGetConn;
......
...@@ -27,6 +27,8 @@ UTIL_SOURCES = \ ...@@ -27,6 +27,8 @@ UTIL_SOURCES = \
util/vircgroupbackend.h \ util/vircgroupbackend.h \
util/vircgroupv1.c \ util/vircgroupv1.c \
util/vircgroupv1.h \ util/vircgroupv1.h \
util/vircgroupv2.c \
util/vircgroupv2.h \
util/virclosecallbacks.c \ util/virclosecallbacks.c \
util/virclosecallbacks.h \ util/virclosecallbacks.h \
util/vircommand.c \ util/vircommand.c \
......
...@@ -1236,6 +1236,9 @@ virCgroupFree(virCgroupPtr *group) ...@@ -1236,6 +1236,9 @@ virCgroupFree(virCgroupPtr *group)
VIR_FREE((*group)->legacy[i].placement); VIR_FREE((*group)->legacy[i].placement);
} }
VIR_FREE((*group)->unified.mountPoint);
VIR_FREE((*group)->unified.placement);
VIR_FREE((*group)->path); VIR_FREE((*group)->path);
VIR_FREE(*group); VIR_FREE(*group);
} }
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "vircgroupbackend.h" #include "vircgroupbackend.h"
#include "vircgroupv1.h" #include "vircgroupv1.h"
#include "vircgroupv2.h"
#include "virerror.h" #include "virerror.h"
#include "virthread.h" #include "virthread.h"
...@@ -28,6 +29,7 @@ ...@@ -28,6 +29,7 @@
VIR_ENUM_DECL(virCgroupBackend); VIR_ENUM_DECL(virCgroupBackend);
VIR_ENUM_IMPL(virCgroupBackend, VIR_CGROUP_BACKEND_TYPE_LAST, VIR_ENUM_IMPL(virCgroupBackend, VIR_CGROUP_BACKEND_TYPE_LAST,
"cgroup V2",
"cgroup V1"); "cgroup V1");
static virOnceControl virCgroupBackendOnce = VIR_ONCE_CONTROL_INITIALIZER; static virOnceControl virCgroupBackendOnce = VIR_ONCE_CONTROL_INITIALIZER;
......
...@@ -50,7 +50,8 @@ typedef enum { ...@@ -50,7 +50,8 @@ typedef enum {
} virCgroupBackendTaskFlags; } virCgroupBackendTaskFlags;
typedef enum { typedef enum {
VIR_CGROUP_BACKEND_TYPE_V1 = 0, VIR_CGROUP_BACKEND_TYPE_V2 = 0,
VIR_CGROUP_BACKEND_TYPE_V1,
VIR_CGROUP_BACKEND_TYPE_LAST, VIR_CGROUP_BACKEND_TYPE_LAST,
} virCgroupBackendType; } virCgroupBackendType;
......
...@@ -45,12 +45,21 @@ struct _virCgroupV1Controller { ...@@ -45,12 +45,21 @@ struct _virCgroupV1Controller {
typedef struct _virCgroupV1Controller virCgroupV1Controller; typedef struct _virCgroupV1Controller virCgroupV1Controller;
typedef virCgroupV1Controller *virCgroupV1ControllerPtr; typedef virCgroupV1Controller *virCgroupV1ControllerPtr;
struct _virCgroupV2Controller {
int controllers;
char *mountPoint;
char *placement;
};
typedef struct _virCgroupV2Controller virCgroupV2Controller;
typedef virCgroupV2Controller *virCgroupV2ControllerPtr;
struct _virCgroup { struct _virCgroup {
char *path; char *path;
virCgroupBackendPtr backend; virCgroupBackendPtr backend;
virCgroupV1Controller legacy[VIR_CGROUP_CONTROLLER_LAST]; virCgroupV1Controller legacy[VIR_CGROUP_CONTROLLER_LAST];
virCgroupV2Controller unified;
}; };
int virCgroupSetValueStr(virCgroupPtr group, int virCgroupSetValueStr(virCgroupPtr group,
......
/*
* vircgroupv2.c: methods for cgroups v2 backend
*
* Copyright (C) 2018 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*/
#include <config.h>
#include "internal.h"
#define __VIR_CGROUP_ALLOW_INCLUDE_PRIV_H__
#include "vircgrouppriv.h"
#undef __VIR_CGROUP_ALLOW_INCLUDE_PRIV_H__
#include "vircgroup.h"
#include "vircgroupbackend.h"
#include "vircgroupv2.h"
#include "virlog.h"
VIR_LOG_INIT("util.cgroup");
#define VIR_FROM_THIS VIR_FROM_CGROUP
VIR_ENUM_DECL(virCgroupV2Controller);
VIR_ENUM_IMPL(virCgroupV2Controller, VIR_CGROUP_CONTROLLER_LAST,
"cpu", "cpuacct", "cpuset", "memory", "devices",
"freezer", "io", "net_cls", "perf_event", "name=systemd");
#ifdef __linux__
virCgroupBackend virCgroupV2Backend = {
.type = VIR_CGROUP_BACKEND_TYPE_V2,
};
void
virCgroupV2Register(void)
{
virCgroupBackendRegister(&virCgroupV2Backend);
}
#else /* !__linux__ */
void
virCgroupV2Register(void)
{
VIR_INFO("Control groups not supported on this platform");
}
#endif /* !__linux__ */
/*
* vircgroupv2.h: methods for cgroups v2 backend
*
* Copyright (C) 2018 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*/
#ifndef __VIR_CGROUP_V2_H__
# define __VIR_CGROUP_V2_H__
void
virCgroupV2Register(void);
#endif /* __VIR_CGROUP_V2_H__ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册