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
이것은 매우 유용합니다.