Skip to content

Commit 42ca737

Browse files
ap4yahesford
authored andcommitted
Support pure v2 cgroup mounts
Some of the tooling that rely on cgroups (notably podman, runc and crun) enable cgroup2 mode only if /sys/fs/cgroup has a v2 magic number. This commit introduces configuration option that controls the way cgroup is mounted, 3 modes are supported: - hybrid: current mode with v1 and v2 mounted - unified: v2 only mode - legacy: v1 only mode This is modeled after OpenRC: https://github.com/OpenRC/openrc/blob/72df51e17ba0e1a0f94451b4bbfb338288c4625c/init.d/cgroups.in#L121-L129
1 parent 288f526 commit 42ca737

2 files changed

Lines changed: 37 additions & 4 deletions

File tree

core-services/00-pseudofs.sh

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,36 @@ mountpoint -q /dev/shm || mount -o mode=1777,nosuid,nodev -n -t tmpfs shm /dev/s
1111
mountpoint -q /sys/kernel/security || mount -n -t securityfs securityfs /sys/kernel/security
1212

1313
if [ -z "$VIRTUALIZATION" ]; then
14+
_cgroupv1=""
15+
_cgroupv2=""
16+
17+
case "${CGROUP_MODE:-hybrid}" in
18+
legacy)
19+
_cgroupv1="/sys/fs/cgroup"
20+
;;
21+
hybrid)
22+
_cgroupv1="/sys/fs/cgroup"
23+
_cgroupv2="${_cgroupv1}/unified"
24+
;;
25+
unified)
26+
_cgroupv2="/sys/fs/cgroup"
27+
;;
28+
esac
29+
1430
# cgroup v1
15-
mountpoint -q /sys/fs/cgroup || mount -o mode=0755 -t tmpfs cgroup /sys/fs/cgroup
16-
awk '$4 == 1 { system("mountpoint -q /sys/fs/cgroup/" $1 " || { mkdir -p /sys/fs/cgroup/" $1 " && mount -t cgroup -o " $1 " cgroup /sys/fs/cgroup/" $1 " ;}" ) }' /proc/cgroups
31+
if [ -n "$_cgroupv1" ]; then
32+
mountpoint -q "$_cgroupv1" || mount -o mode=0755 -t tmpfs cgroup "$_cgroupv1"
33+
while read -r _subsys_name _hierarchy _num_cgroups _enabled; do
34+
[ "$_enabled" = "1" ] || continue
35+
_controller="${_cgroupv1}/${_subsys_name}"
36+
mkdir -p "$_controller"
37+
mountpoint -q "$_controller" || mount -t cgroup -o "$_subsys_name" cgroup "$_controller"
38+
done < /proc/cgroups
39+
fi
40+
1741
# cgroup v2
18-
mkdir -p /sys/fs/cgroup/unified
19-
mountpoint -q /sys/fs/cgroup/unified || mount -t cgroup2 -o nsdelegate cgroup2 /sys/fs/cgroup/unified
42+
if [ -n "$_cgroupv2" ]; then
43+
mkdir -p "$_cgroupv2"
44+
mountpoint -q "$_cgroupv2" || mount -t cgroup2 -o nsdelegate cgroup2 "$_cgroupv2"
45+
fi
2046
fi

rc.conf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,10 @@
3333

3434
# Amount of ttys which should be setup.
3535
#TTYS=
36+
37+
# Set the mode for cgroup mounts.
38+
# hybrid: mount cgroup v1 under /sys/fs/cgroup and
39+
# cgroup v2 under /sys/fs/cgroup/unified
40+
# legacy: mount cgroup v1 /sys/fs/cgroup
41+
# unified: mount cgroup v2 under /sys/fs/cgroup
42+
#CGROUP_MODE=hybrid

0 commit comments

Comments
 (0)