mirror of
https://git.proxmox.com/git/mirror_corosync
synced 2025-10-04 03:39:46 +00:00
main: Add support for cgroup v2
Support for cgroup v2 is very similar to cgroup v1 just checking (and writing) different file. Testing this feature is a bit harder than with cgroup v1 so it's probably worh noting in this commit message. 1. Copy some service file (I've used httpd service) and set CPUQuota=30% in the [service] section. 2. Check /sys/fs/cgroup/cgroup.subtree_control - there should be no "cpu" 3. Start modified service 4. Check /sys/fs/cgroup/cgroup.subtree_control - there should be "cpu" 5. Start corosync - It should be able to get rt priority When move_to_root_cgroup is disabled, behavior differs: - If corosync is started before modified service, so there is no "cpu" in /sys/fs/cgroup/cgroup.subtree_control corosync starts without problem and gets rt priority. Starting modified service later will never add "cpu" into /sys/fs/cgroup/cgroup.subtree_control (because corosync is holding rt priority and it is placed in the non-root cgroup by systemd). - When corosync is started after modified service, so "cpu" is in /sys/fs/cgroup/cgroup.subtree_control, corosync is not able to get RT priority. Signed-off-by: Jan Friesse <jfriesse@redhat.com> Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
This commit is contained in:
parent
27369481e5
commit
57e6b86b53
21
exec/main.c
21
exec/main.c
@ -1173,6 +1173,7 @@ error_close:
|
||||
static int corosync_move_to_root_cgroup(void) {
|
||||
FILE *f;
|
||||
int res = -1;
|
||||
const char *cgroup_task_fname = NULL;
|
||||
|
||||
/*
|
||||
* /sys/fs/cgroup is hardcoded, because most of Linux distributions are now
|
||||
@ -1183,15 +1184,25 @@ static int corosync_move_to_root_cgroup(void) {
|
||||
*/
|
||||
f = fopen("/sys/fs/cgroup/cpu/cpu.rt_runtime_us", "rt");
|
||||
if (f == NULL) {
|
||||
log_printf(LOGSYS_LEVEL_DEBUG, "cpu.rt_runtime_us doesn't exists -> "
|
||||
"system without cgroup or with disabled CONFIG_RT_GROUP_SCHED");
|
||||
/*
|
||||
* Try cgroup v2
|
||||
*/
|
||||
f = fopen("/sys/fs/cgroup/cgroup.procs", "rt");
|
||||
if (f == NULL) {
|
||||
log_printf(LOG_DEBUG, "cpu.rt_runtime_us or cgroup.procs doesn't exist -> "
|
||||
"system without cgroup or with disabled CONFIG_RT_GROUP_SCHED");
|
||||
|
||||
res = 0;
|
||||
goto exit_res;
|
||||
res = 0;
|
||||
goto exit_res;
|
||||
} else {
|
||||
cgroup_task_fname = "/sys/fs/cgroup/cgroup.procs";
|
||||
}
|
||||
} else {
|
||||
cgroup_task_fname = "/sys/fs/cgroup/cpu/tasks";
|
||||
}
|
||||
(void)fclose(f);
|
||||
|
||||
f = fopen("/sys/fs/cgroup/cpu/tasks", "w");
|
||||
f = fopen(cgroup_task_fname, "w");
|
||||
if (f == NULL) {
|
||||
log_printf(LOGSYS_LEVEL_WARNING, "Can't open cgroups tasks file for writing");
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\"/*
|
||||
.\" * Copyright (c) 2005 MontaVista Software, Inc.
|
||||
.\" * Copyright (c) 2006-2020 Red Hat, Inc.
|
||||
.\" * Copyright (c) 2006-2021 Red Hat, Inc.
|
||||
.\" *
|
||||
.\" * All rights reserved.
|
||||
.\" *
|
||||
@ -32,7 +32,7 @@
|
||||
.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
.\" * THE POSSIBILITY OF SUCH DAMAGE.
|
||||
.\" */
|
||||
.TH COROSYNC_CONF 5 2021-04-09 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual"
|
||||
.TH COROSYNC_CONF 5 2021-05-03 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual"
|
||||
.SH NAME
|
||||
corosync.conf - corosync executive configuration file
|
||||
|
||||
@ -800,8 +800,14 @@ meaning maximal / minimal priority (so minimal / maximal nice value).
|
||||
.TP
|
||||
move_to_root_cgroup
|
||||
Should be set to yes (default) if corosync should try to move itself to root
|
||||
cgroup. This feature is available only for systems with cgroups with RT
|
||||
sched enabled (Linux with CONFIG_RT_GROUP_SCHED kernel option).
|
||||
cgroup. This feature is available only for systems with cgroups v1 with RT
|
||||
sched enabled (Linux with CONFIG_RT_GROUP_SCHED kernel option) and cgroups v2.
|
||||
|
||||
It's worth noting that currently (May 3 2021) cgroup2 doesn’t yet
|
||||
support control of realtime processes and the cpu controller can only be
|
||||
enabled when all RT processes are in the root cgroup. So when move_to_root_cgroup
|
||||
is disabled and systemd is used, it may be impossible to make systemd options
|
||||
like CPUQuota working correctly until corosync is stopped.
|
||||
|
||||
.TP
|
||||
allow_knet_handle_fallback
|
||||
|
Loading…
Reference in New Issue
Block a user