내 컴퓨터에 cgroup v2가 설치되어 있는지 어떻게 확인할 수 있나요?

내 컴퓨터에 cgroup v2가 설치되어 있는지 어떻게 확인할 수 있나요?

cgroup v2를 사용해 보고 싶지만 내 Linux 시스템에 설치되어 있는지 확실하지 않습니다.

>> uname -r
4.14.66-041466-generic

cgroup v2는 4.12.0-rc5에서 사용할 수 있으므로 내가 사용 중인 커널 버전에서도 사용할 수 있어야 한다고 생각했습니다.

https://www.infradead.org/~mchehab/kernel_docs/unsorted/cgroup-v2.html

그러나 문서에 언급된 메모리 인터페이스 파일을 내 시스템에서 사용할 수 없기 때문에 내 시스템에는 cgroup v2가 없는 것 같습니다.

https://www.kernel.org/doc/Documentation/cgroup-v2.txt

아직 cgroup v1이 있는 것 같습니다.

/sys/fs/cgroup/memory# ls
cgroup.clone_children  memory.kmem.failcnt                 memory.kmem.tcp.usage_in_bytes   memory.memsw.usage_in_bytes      memory.swappiness
cgroup.event_control   memory.kmem.limit_in_bytes          memory.kmem.usage_in_bytes       memory.move_charge_at_immigrate  memory.usage_in_bytes
cgroup.procs           memory.kmem.max_usage_in_bytes      memory.limit_in_bytes            memory.numa_stat                 memory.use_hierarchy
cgroup.sane_behavior   memory.kmem.slabinfo                memory.max_usage_in_bytes        memory.oom_control               notify_on_release
docker                 memory.kmem.tcp.failcnt             memory.memsw.failcnt             memory.pressure_level            release_agent
memory.failcnt         memory.kmem.tcp.limit_in_bytes      memory.memsw.limit_in_bytes      memory.soft_limit_in_bytes       tasks
memory.force_empty     memory.kmem.tcp.max_usage_in_bytes  memory.memsw.max_usage_in_bytes  memory.stat 

후속 질문 도움을 주신 브라이언에게 감사드립니다. 새로운 질문을 만들어야 하는지 알려주시기 바랍니다. 다만 여기에 질문을 하면 다른 사람들에게 도움이 될 것이라고 생각했습니다.

1) 설명서의 명령에 따라 cgroup 컨트롤러를 추가할 수 없습니다.

>> echo "+cpu +memory -io" > cgroup.subtree_control

그러나 "에코: 쓰기 오류: 잘못된 인수"라는 메시지가 나타납니다. 이 단계의 전제 조건이 누락되었나요?

2) 도커 컨테이너를 실행했지만 도커 데몬 로그에서 "/sys/fs/cgroup/cpuset/docker/cpuset.cpus"를 찾을 수 없다고 불평했습니다. docker가 여전히 cgroupv1을 기대하고 있는 것 같습니다. 내 docker 데몬에서 cgroupv2 지원을 활성화하는 가장 좋은 방법은 무엇입니까?

docker -v
Docker version 17.09.1-ce, build aedabb7

답변1

다음 명령을 실행할 수 있습니다.

grep cgroup /proc/filesystems

시스템이 cgroupv2를 지원하는 경우 다음이 표시됩니다.

nodev   cgroup
nodev   cgroup2

cgroupv1만 있는 시스템에서는 다음만 표시됩니다.

nodev   cgroup

답변2

가장 쉬운 방법은 가짜 파일 시스템을 마운트하는 것입니다. 어딘가에 설치할 수 있으면 다음 인터페이스를 사용하여 프로세스를 관리해 볼 수 있습니다.

mount -t cgroup2 none $MOUNT_POINT

위의 문서를 인용하신 것을 확인했습니다. 당신이 간과했을 수도 있는 것은 여전히 ​​경로를 만들어야 한다는 것입니다. 아니요이유~ 해야 하다특정 위치에 대한 cgroup 리소스를 관리합니다. 이것은 단지 관례입니다.

procfs예를 들어, 디렉토리가 존재하는 한...에 정확히 나타날 수 있습니다 ./usr/monkeys/usr/monkeys

$ sudo mkdir /usr/monkeys
$ sudo mount -t proc none /usr/monkeys
$ ls -l /usr/monkeys
...
...
-r--r--r--.  1 root        root                      0 Sep 25 19:00 uptime
-r--r--r--.  1 root        root                      0 Sep 25 23:17 version
-r--------.  1 root        root                      0 Sep 25 23:17 vmallocinfo
-r--r--r--.  1 root        root                      0 Sep 25 18:57 vmstat
-r--r--r--.  1 root        root                      0 Sep 25 23:17 zoneinfo
$ sudo umount /usr/monkeys

같은 방법으로 cgroup v2 의사 파일 시스템을 사용하여 이 작업을 수행할 수 있습니다.

$ sudo mount -t cgroup2 none /usr/monkeys
$ ls -l /usr/monkeys
total 0
-r--r--r--.  1 root root 0 Sep 23 16:58 cgroup.controllers
-rw-r--r--.  1 root root 0 Sep 23 16:58 cgroup.max.depth
-rw-r--r--.  1 root root 0 Sep 23 16:58 cgroup.max.descendants
-rw-r--r--.  1 root root 0 Sep 23 16:58 cgroup.procs
-r--r--r--.  1 root root 0 Sep 23 16:58 cgroup.stat
-rw-r--r--.  1 root root 0 Sep 23 16:58 cgroup.subtree_control
-rw-r--r--.  1 root root 0 Sep 23 16:58 cgroup.threads
drwxr-xr-x.  2 root root 0 Sep 23 16:58 init.scope
drwxr-xr-x.  2 root root 0 Sep 23 16:58 machine.slice
drwxr-xr-x. 59 root root 0 Sep 23 16:58 system.slice
drwxr-xr-x.  4 root root 0 Sep 23 16:58 user.slice
$ sudo umount /usr/monkeys

답변3

cgroups v2가 지원되는지 여부뿐만 아니라 다음을 사용하여 활성화 및 사용 가능한지 여부를 확인하는 것은 관련이 없을 수 있습니다.

stat -fc %T /sys/fs/cgroup/

출력 상태 cgroup2fs가 cgroup v2 tmpfs이면 cgroup v1입니다. 시스템이 cgroups v2를 지원하지만 기본적으로 활성화되지 않은 경우 systemd.unified_cgroup_hierarchy=1커널 매개변수를 설정하여 활성화할 수 있습니다(예: GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=1"GRUB를 사용하는 시스템).

답변4

일부 시스템은 기본적으로 cgroup v1 및 cgroup v2를 마운트하지만 위치는 다릅니다. 다음 사항이 어디에 있는지 확인하는 데 도움이 됩니다.

grep ^cgroup /etc/mtab

출력 예(Ubuntu 20.04 LTS):

cgroup2 /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/rdma cgroup rw,nosuid,nodev,noexec,relatime,rdma 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0

그러나 이것이 귀하의 시스템이 다음과 같은지 여부를 엄격하게 알려주지는 않습니다.지원하다cgroup v2.0 또 다른 답변에서 언급했듯이 grep cgroup /proc/filesystems이것은 매우 유용합니다.

관련 정보