cgroups v1 사용법

cgroup v1 하에서는 시스템 프로세스들에 대한 계층 구조를 각기 제공하는 별게 cgroup 파일시스템의 각 컨트롤러를 마운트 할 수 있다. 또한 같은 cgroup 파일시스템에 여러 (또는 모든) cgroup v1 컨트롤러들을 함께 마운트하는 것도 가능한데, 함께 마운트된 컨트롤러들이 같은 프로세스 계층 구조를 관리하는 것이다.

v1 컨트롤러

cgroups 사용을 위해서는 커널이 CONFIG_CGROUP=y 로 빌드되어 있어야 한다.

subsystemkconfig설명
cpuCONFIG_CGROUP_SCHEDDocumentation/scheduler/sched-design-CFS.rst
cpuacctCONFIG_CGROUP_CPUACCTDocumentation/admin-guide/cgroup-v1/cpuacct.rst
cpusetCONFIG_CPUSETSDocumentation/admin-guide/cgroup-v1/cpusets.rst
memoryCONFIG_MEMCGDocumentation/admin-guide/cgroup-v1/memory.rst
devicesCONFIG_CGROUP_DEVICEDocumentation/admin-guide/cgroup-v1/devices.rst
freezerCONFIG_CGROUP_FREEZERDocumentation/admin-guide/cgroup-v1/freezer-subsystem.rst
net_clsCONFIG_CGROUP_NET_CLASSIDDocumentation/admin-guide/cgroup-v1/net_cls.rst
blkioCONFIG_BLK_CGROUPDocumentation/admin-guide/cgroup-v1/blkio-controller.rst
net_prioCONFIG_CGROUP_NET_PRIODocumentation/admin-guide/cgroup-v1/net_prio.rst
hugetlbCONFIG_CGROUP_HUGETLBDocumentation/admin-guide/cgroup-v1/hugetlb.rst
pidsCONFIG_CGROUP_PIDSDocumentation/admin-guide/cgroup-v1/pids.rst
rdmaCONFIG_CGROUP_RDMADocumentation/admin-guide/cgroup-v1/rdma.rst

v1 컨트롤러 마운트

cgroup v1을 사용하기 위해서는 cgruop 파일 시스템으로 마운트 해야 한다. 보통은 /sys/fs/cgroup 에 마운트 된다.

mount -t cgroup -o cpu none /sys/fs/cgroup/cpu

같은 계층 구조에 여러 컨트롤러를 함께 마운트하는 것이 가능하다.

mount -t cgroup -o cpu,cpuacct none /sys/fs/cgroup/cpu,cpuacct

v1 모든 컨트롤러를 같은 계층 구조로 함께 마운트 할 경우는 “-o all” 옵션을 준다.

mount -t cgroup -o all cgroup /sys/fs/cgroup

cgroups v1 설정하기

cgroups v1을 사용하기 위해 다음 단계를 따른다.

cgroup 계층 생성하기

먼저, cgroup 계층을 생성해야 한다. 각 계층은 cgroup 디렉터리와 하위 디렉터리로 구성되며, 각 디렉터리는 프로세스 그룹에 대응된다. 계층을 생성하려면 다음과 같이 mkdir로 서브시스템에 해당하는 디렉터리를 생성하면 된다.

$ mkdir /sys/fs/cgroup/[subsystem_name]

여기서 [subsystem_name]은 해당 리소스를 제어하는 서브시스템의 이름이다. cpu, memory, diskio 등의 서브시스템이 올 수 있다.

cgroup에 프로세스 추가하기

생성한 cgroup 계층에 프로세스를 추가해야 합니다. 이를 위해 echo 명령어를 사용하여 프로세스 ID(PID)를 해당 cgroup 디렉터리의 tasks 파일에 추가합니다:

$ echo [PID] > /sys/fs/cgroup/[subsystem_name]/[cgroup_name]/tasks

여기서 [PID]는 추가하려는 프로세스의 PID이고, [cgroup_name]은 해당 cgroup의 이름이다.

리소스 제한 설정하기

리소스 제한을 위해서는 해당 cgroup 디렉터리의 limit 파일을 수정해야 한다. 리소스 제한은 각 서브시스템에 따라 다르다.

  • CPU 제한 설정
$ echo [limit] > /sys/fs/cgroup/cpu/[cgroup_name]/cpu.cfs_quota_us
  • 메모리 제한 설정
$ echo [limit] > /sys/fs/cgroup/memory/[cgroup_name]/memory.limit_in_bytes
  • 디스크 I/O 제한 설정
$ echo [limit] > /sys/fs/cgroup/blkio/[cgroup_name]/blkio.throttle.read_bps_device

우선순위 지정하기

우선순위를 지정하려면 priority 파일을 수정해야 한다. 우선순위 값은 높을수록 해당 cgroup에 더 많은 리소스가 할당된다. 우선순위를 지정하는 방법은 다음과 같다.

$ echo [priority] > /sys/fs/cgroup/[subsystem_name]/[cgroup_name]/[priority_file]

여기서 [priority]는 우선순위 값이고, [priority_file]은 우선순위를 지정할 파일 이름이다.

cgroups: 프로세스 그룹의 자원 관리
cgroup: cpu 서브시스템
cgroup: memory 서브시스템
cgroups: Memory Threshold Notifier 구현
cgruops v1 사용법

참고:

답글 남기기