10장. cgroupfs를 사용하여 cgroup을 수동으로 관리
가상 파일 시스템에 디렉터리를 생성하여 시스템에서 cgroup 계층 구조를 관리할 수 있습니다. 파일 시스템은 기본적으로 cgroup
fs/sys/fs/cgroup/
디렉터리에 마운트되며 전용 제어 파일에서 원하는 구성을 지정할 수 있습니다.
일반적으로 Red Hat은 시스템 리소스 사용을 제어하는 데 systemd
를 사용하는 것이 좋습니다. 특별한 경우에만 cgroups
가상 파일 시스템을 수동으로 구성해야 합니다. 예를 들어 cgroup-v2
계층에 동등한 항목이 없는 cgroup-v1
컨트롤러를 사용해야 하는 경우입니다.
10.1. cgroup 생성 및 cgroups-v2 파일 시스템에서 컨트롤러 활성화
디렉터리를 생성하거나 제거하고cgroups
가상 파일 시스템의 파일에 작성하여 제어 그룹 ( cgroup
)을 관리할 수 있습니다. 파일 시스템은 기본적으로 /sys/fs/cgroup/
디렉터리에 마운트됩니다. cgroup 컨트롤러의 설정을 사용하려면 하위
에 대해 원하는 컨트롤러를 활성화해야 합니다. 기본적으로 root cgroup
cgroup
에는 하위 cgroup
에 대해 메모리
및 pid 컨트롤러가 활성화되어 있습니다. 따라서 Red Hat은
/sys/fs/cgroup/
루트 cgroup
내에 두 개 이상의 하위 cgroup
을 생성하는 것이 좋습니다. 이렇게 하면 선택적으로 하위 cgroup에서
파일을 보다 조직적으로 명확하게 유지할 수 있습니다. 메모리
및 pid 컨트롤러를 제거하고 cgroup
사전 요구 사항
- root 권한이 있습니다.
절차
/sys/fs/cgroup/Example/
디렉터리를 생성합니다.mkdir /sys/fs/cgroup/Example/
# mkdir /sys/fs/cgroup/Example/
Copy to Clipboard Copied! /sys/fs/cgroup/Example/
디렉터리는 하위 그룹을 정의합니다./sys/fs/cgroup/Example/
디렉터리를 생성하면 일부cgroups-v2
인터페이스 파일이 디렉터리에 자동으로 생성됩니다./sys/fs/cgroup/Example/
디렉터리에는메모리
및 pid 컨트롤러에 대한 컨트롤러별 파일도 포함되어 있습니다.선택 사항: 새로 생성된 하위 제어 그룹을 검사합니다.
ll /sys/fs/cgroup/Example/
# ll /sys/fs/cgroup/Example/ -r—r—r--. 1 root root 0 Jun 1 10:33 cgroup.controllers -r—r—r--. 1 root root 0 Jun 1 10:33 cgroup.events -rw-r—r--. 1 root root 0 Jun 1 10:33 cgroup.freeze -rw-r--r--. 1 root root 0 Jun 1 10:33 cgroup.procs … -rw-r—r--. 1 root root 0 Jun 1 10:33 cgroup.subtree_control -r—r—r--. 1 root root 0 Jun 1 10:33 memory.events.local -rw-r—r--. 1 root root 0 Jun 1 10:33 memory.high -rw-r—r--. 1 root root 0 Jun 1 10:33 memory.low … -r—r—r--. 1 root root 0 Jun 1 10:33 pids.current -r—r—r--. 1 root root 0 Jun 1 10:33 pids.events -rw-r—r--. 1 root root 0 Jun 1 10:33 pids.max
Copy to Clipboard Copied! 예제 출력은
cgroup.procs
또는cgroup
.controllersmemory.high
및pids.max
와 같은 파일은 루트 제어 그룹(/sys/fs/cgroup/
)에 있는메모리
및pids
컨트롤러와 관련이 있으며systemd
에 의해 기본적으로 활성화됩니다.기본적으로 새로 생성된 하위 그룹은 상위
cgroup
의 모든 설정을 상속합니다. 이 경우 루트cgroup
의 제한이 없습니다.원하는 컨트롤러를
/sys/fs/cgroup/cgroup.controllers
파일에서 사용할 수 있는지 확인합니다.cat /sys/fs/cgroup/cgroup.controllers cpuset cpu io memory hugetlb pids rdma
# cat /sys/fs/cgroup/cgroup.controllers cpuset cpu io memory hugetlb pids rdma
Copy to Clipboard Copied! 원하는 컨트롤러를 활성화합니다. 이 예에서는
cpu
및cpuset
컨트롤러입니다.echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_control
# echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control # echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_control
Copy to Clipboard Copied! 이러한 명령은
/sys/fs/cgroup/
root 제어 그룹의 즉시 하위 그룹에 대해cpu
및cpuset
컨트롤러를 활성화합니다. 새로 생성된예제
제어 그룹 포함. 하위 그룹은 기준을 기반으로 프로세스를 지정하고 각 프로세스에 제어 검사를 적용할 수 있는 위치입니다.사용자는 모든 수준에서
cgroup.subtree_control
파일의 내용을 읽고 즉시 하위 그룹에서 활성화에 사용할 수 있는 컨트롤러를 파악할 수 있습니다.참고기본적으로 루트 제어 그룹의
/sys/fs/cgroup/cgroup.subtree_control
파일에는메모리
및pids
컨트롤러가 포함되어 있습니다.예제
제어 그룹의 하위cgroup
에 대해 원하는 컨트롤러를 활성화합니다.echo "+cpu +cpuset" >> /sys/fs/cgroup/Example/cgroup.subtree_control
# echo "+cpu +cpuset" >> /sys/fs/cgroup/Example/cgroup.subtree_control
Copy to Clipboard Copied! 이 명령을 사용하면 즉시 하위 제어 그룹에
메모리
또는 pid 컨트롤러가 아닌 CPU 시간 분배를 규제하는 컨트롤러 만 사용할수
있습니다./sys/fs/cgroup/Example/tasks/
디렉터리를 생성합니다.mkdir /sys/fs/cgroup/Example/tasks/
# mkdir /sys/fs/cgroup/Example/tasks/
Copy to Clipboard Copied! /sys/fs/cgroup/Example/tasks/
디렉터리는cpu
및cpuset
컨트롤러와 순전히 관련된 파일이 있는 하위 그룹을 정의합니다. 이제 이 제어 그룹에 프로세스를 할당하고 프로세스에cpu
및cpuset
컨트롤러 옵션을 사용할 수 있습니다.선택 사항: 하위 제어 그룹을 검사합니다.
ll /sys/fs/cgroup/Example/tasks
# ll /sys/fs/cgroup/Example/tasks -r—r—r--. 1 root root 0 Jun 1 11:45 cgroup.controllers -r—r—r--. 1 root root 0 Jun 1 11:45 cgroup.events -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.freeze -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.max.depth -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.max.descendants -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.procs -r—r—r--. 1 root root 0 Jun 1 11:45 cgroup.stat -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.subtree_control -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.threads -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.type -rw-r—r--. 1 root root 0 Jun 1 11:45 cpu.max -rw-r—r--. 1 root root 0 Jun 1 11:45 cpu.pressure -rw-r—r--. 1 root root 0 Jun 1 11:45 cpuset.cpus -r—r—r--. 1 root root 0 Jun 1 11:45 cpuset.cpus.effective -rw-r—r--. 1 root root 0 Jun 1 11:45 cpuset.cpus.partition -rw-r—r--. 1 root root 0 Jun 1 11:45 cpuset.mems -r—r—r--. 1 root root 0 Jun 1 11:45 cpuset.mems.effective -r—r—r--. 1 root root 0 Jun 1 11:45 cpu.stat -rw-r—r--. 1 root root 0 Jun 1 11:45 cpu.weight -rw-r—r--. 1 root root 0 Jun 1 11:45 cpu.weight.nice -rw-r—r--. 1 root root 0 Jun 1 11:45 io.pressure -rw-r—r--. 1 root root 0 Jun 1 11:45 memory.pressure
Copy to Clipboard Copied!
cpu
컨트롤러는 관련 하위 제어 그룹에 단일 CPU에서 시간 동안 경쟁하는 프로세스가 2개 이상인 경우에만 활성화됩니다.
검증
선택 사항: 원하는 컨트롤러만 활성화된 새
cgroup
을 생성했는지 확인합니다.cat /sys/fs/cgroup/Example/tasks/cgroup.controllers cpuset cpu
# cat /sys/fs/cgroup/Example/tasks/cgroup.controllers cpuset cpu
Copy to Clipboard Copied!