cgroup
방금 버전 1을 제거했습니다.cgroup2
, 내 시스템에 하나의 설치만 남겨 둡니다.
$ mount | grep -i cgroup
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,size=4096k,nr_inodes=1024,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
내 인상은 그 어느 것도 cgroup 1의 인공물이 /sys/fs/cgroup
아니라는 것입니다. 버전 1을 /sys/fs/cgroup/unified
제거한 후에도 이러한 항목이 여전히 존재하는 이유는 무엇입니까 ?cgroup
$ ls -lh
drwxr-xr-x 2 root root 40 Dec 25 18:57 blkio
lrwxrwxrwx 1 root root 11 Dec 25 18:57 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11 Dec 25 18:57 cpuacct -> cpu,cpuacct
drwxr-xr-x 2 root root 40 Dec 25 18:57 cpu,cpuacct
drwxr-xr-x 2 root root 40 Dec 25 18:57 cpuset
drwxr-xr-x 2 root root 40 Dec 25 18:57 devices
drwxr-xr-x 2 root root 40 Dec 25 18:57 freezer
drwxr-xr-x 2 root root 40 Dec 25 18:57 memory
lrwxrwxrwx 1 root root 16 Dec 25 18:57 net_cls -> net_cls,net_prio
drwxr-xr-x 2 root root 40 Dec 25 18:57 net_cls,net_prio
lrwxrwxrwx 1 root root 16 Dec 25 18:57 net_prio -> net_cls,net_prio
drwxr-xr-x 2 root root 40 Dec 25 18:57 perf_event
drwxr-xr-x 2 root root 40 Dec 25 18:57 pids
drwxr-xr-x 2 root root 40 Dec 25 18:57 rdma
drwxr-xr-x 2 root root 40 Dec 25 18:57 systemd
dr-xr-xr-x 13 root root 0 Dec 26 21:37 unified
나머지 임시 디렉토리는 커널 인터페이스가 아닌가요?
$ find . | grep -v unified
./freezer
./cpuset
./cpu
./cpuacct
./cpu,cpuacct
./rdma
./perf_event
./blkio
./memory
./devices
./net_prio
./net_cls
./net_cls,net_prio
./pids
./systemd
이 빈 디렉토리는 cgroups
v1에서 어떻게 작동합니까?
답변1
이는 자체 내부 기록을 위해 cgroup v2를 사용하지만 리소스 제어를 위해 여전히 cgroup v1을 사용하는 systemd의 "하이브리드" 모드에 있기 때문입니다. ~에서cgroup 위임 문서:
systemd는 세 가지 cgroup 설정 모드를 지원합니다. 구체적으로:
맞잡다— 이는 가장 간단한 모드이며 순수 cgroup v2 로직을 노출합니다. 이 모드에서는
/sys/fs/cgroup
cgroup API 파일 시스템이 유일하게 마운트되며 사용 가능한 모든 컨트롤러가 이를 통해 독점적으로 노출됩니다.유산— 이는 전통적인 cgroup v1 모드입니다. 이 모드에서 각 컨트롤러는 자체 cgroup 파일 시스템 을
/sys/fs/cgroup/<controller>/
./sys/fs/cgroup/systemd/
잡종- 통합 모드와 레거시 모드가 혼합되어 있습니다.
/sys/fs/cgroup/unified/
cgroup v2 계층 구조를 포함하는 추가 계층 구조 가 있다는 점을 제외하면 설정은 기본적으로 이전 버전과 유사합니다 . (이 모드에서는 통합 계층 구조에 컨트롤러가 연결되어 있지 않으며 컨트롤러는 모두 레거시 모드와 마찬가지로 별도의 계층 구조로 설치됩니다. 즉,/sys/fs/cgroup/unified/
리소스 관리가 아닌 순수하고 배타적으로 핵심 cgroup v2 기능과 관련됩니다.) 이 모드의 호환성 cgroup v1을 유지하면서 일부 cgroup v2 기능도 제공합니다. 이 모델은 임시방편일 뿐입니다. 자유 시간이 많지 않은 한 이것에 너무 많은 관심을 기울이지 마십시오.분명히 말하면 기존 모델과 하이브리드 모델에는 미래가 없습니다. 오늘 소프트웨어를 개발하고 통합 패턴에 초점을 맞추지 않는다면 내일이 아닌 어제를 위한 소프트웨어를 작성하는 것입니다. 주로 호환성 때문에 지원되며 새로운 기능은 제공되지 않습니다.
단순히 리소스 디렉터리를 삭제하면 systemd가 더 이상 필요한 디렉터리 계층 구조에 액세스할 수 없기 때문에 대부분의 리소스 제어 지시문을 실행할 수 없습니다.
systemd.unified_cgroup_hierarchy=1 cgroup_no_v1=all
대신, 내부 기록 및 리소스 제어를 위해 cgroup v2를 사용하는 "통합" 모드를 사용하여 systemd를 시작하려면 커널 명령줄에서 시스템을 시작할 수 있습니다(또는 cgroup_no_v1=all
v240+에서 참조).이번 패치).
cgroup_no_v1=all
모든 오래된 cgroup 계층을 비활성화하여 누구도 이를 캡처하여 인질로 삼을 수 없도록 커널에 지시하고, systemd.unified_group_hierarchy=1
배포판에서 기본적으로 구성된 혼합 계층이 아닌 통합 cgroup 계층을 사용하도록 systemd에 지시합니다.
일단 시작하면 예상한 대로 모든 것이 /sys/fs/cgroup 아래에 있음을 알 수 있습니다.
% ls -l /sys/fs/cgroup | head
total 0
drwxr-xr-x 2 root root 0 Feb 17 17:19 dev-hugepages.mount/
drwxr-xr-x 2 root root 0 Feb 17 17:19 dev-mqueue.mount/
drwxr-xr-x 2 root root 0 Feb 17 17:19 init.scope/
drwxr-xr-x 2 root root 0 Feb 17 17:19 sys-fs-fuse-connections.mount/
drwxr-xr-x 2 root root 0 Feb 17 17:19 sys-kernel-config.mount/
drwxr-xr-x 2 root root 0 Feb 17 17:19 sys-kernel-debug.mount/
drwxr-xr-x 2 root root 0 Feb 17 17:19 sys-kernel-tracing.mount/
drwxr-xr-x 21 root root 0 Feb 21 13:00 system.slice/
drwxr-xr-x 4 root root 0 Feb 17 17:19 user.slice/
답변2
사실 정말 쉽습니다. 모든 cgroup
설치는 디렉토리 상단에서 수행되어야 합니다.당신이 그것을 갖기 전에,
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
때를모두 제거했습니다, 기본 디렉터리를 거기에 그대로 둡니다. 아쉽게도 이러한 항목은 다시 설치 /sys/fs/cgroup
하고 rw
삭제하면 제거할 수 있습니다.
sudo mount -o remount,rw /sys/fs/cgroup
# Delete the symlinks
sudo find /sys/fs/cgroup -maxdepth 1 -type l -exec rm {} \;
# Delete the empty directories
sudo find /sys/fs/cgroup/ -links 2 -type d -not -path '/sys/fs/cgroup/unified/*' -exec rmdir -v {} \;
sudo mount -o remount,ro /sys/fs/cgroup
cgroup2
그러면 당신은 아름답고 깨끗한 당신의 모습을 볼 수 있을 것입니다 .
$ ls /sys/fs/cgroup
unified
답변3
어디서나 확인하는 시간을 절약하기 위해 Ubuntu 20.04에서 이를 수행하는 방법은 다음과 같습니다.
- 시스템 버전 확인:
systemd --version
버전 240+를 출력해야 하므로 다음을 기반으로 하는 짧은 버전을 사용할 수 있습니다.이 게시물 - 다음으로 시작하는 마지막 줄 뒤에 이것을 추가하세요.
GRUB_CMDLINE_LINUX
GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX} cgroup_no_v1=all"
cgroup_no_v1=all
이는 실제로 시작 매개변수에 추가됩니다 .
- 파일을 저장하고 실행
sudo update-grub
- 기계를 다시 시작하십시오.
cat /proc/cmdline
다시 시작한 후 확인하세요.cgroup_no_v1=all
출력에 이 내용이 표시 되면 cgroup v2가 활성 상태임을 의미합니다.