cgroups: 프로세스 그룹의 자원 관리

cgroups는 리눅스 운영 체제에서 프로세스 그룹에 대한 자원 할당과 제한을 관리하는 기능이다. 리눅스 커널에서 제공하는 컨트롤 그룹(Control Group)의 약어로도 알려져 있으며, cgroups를 활용하면 프로세스 그룹 간의 리소스 사용을 조정하여 시스템 전체의 성능과 안정성을 향상시킬 수 있다.

cgroups의 목적

자원 컨트롤러(resource controller)라고도 불리우는 cgroups는 다양한 목적을 가지고 개발되었다. 주요 목적은 다음과 같다.

1. 리소스 제한

cgroups는 CPU, 메모리, 디스크 I/O, 네트워크 등의 리소스를 프로세스 그룹에 제한할 수 있다. 이를 통해 리소스의 공정한 분배와 과다한 리소스 사용으로 인한 시스템 전체의 성능 저하를 방지할 수 있다.

2. 우선순위 지정

cgroups를 사용하면 프로세스 그룹 간에 우선순위를 지정할 수 있다. 이를 통해 우선순위가 높은 그룹이 리소스를 우선적으로 할당받게 된다. 우선순위 설정을 통해 시스템의 응답 시간을 개선하고 성능을 최적화할 수 있다.

3. 프로세스 그룹 관리

cgroups는 프로세스 그룹을 계층 구조로 관리할 수 있다. 상위 그룹은 하위 그룹의 리소스 사용을 제어하고 설정할 수 있다. 계층 구조를 통해 복잡한 시스템에서도 자원 관리를 효과적으로 구성할 수 있다.

cgroups의 구성 요소

cgroups는 다음과 같은 구성 요소는 다음과 같다.

1. 계층 구조

cgroups는 계층 구조로 이루어져 있으며, 각 계층은 프로세스 그룹을 그룹화하는 데 사용된다. 계층은 상속 관계를 가지며, 상위 그룹의 설정이 하위 그룹에 영향을 미친다.

2. 서브시스템

서브시스템은 cgroups에서 관리하는 리소스 유형이다. 각 서브시스템은 CPU, 메모리, 디스크 I/O 등 특정 리소스를 제어하는 역할을 담당한다. 주요 서브 시스템은 다음과 같다.

  • cpu – CPU에 cgroup 작업 액세스를 제공하기 위한 스케줄러를 제공
  • cpuacct – 그룹 별 CPU 자원 사용에 대한 통계치를 제공
  • cpuset – 개별 CPU 및 메모리 노드를 cgroup에 바인딩 하기 위해 사용
  • memory – 그룹 별 사용되는 메모리를 제한하고 리포팅을 제공
  • blkio – block device에 대한 IO 접근 제한을 설정
  • devices – 그룹 단위로 device에 대한 접근을 허용하거나 제한
  • freezer – 그룹 별 일시적으로 정지(suspend)하거나 다시 시작(restore)를 할 수 있음
  • net_cls – 특정 그룹에서 발생하는 패킷을 식별하기 위한 태그(classid)를 지정할 수 있음. (이 태그는 방화벽 규칙으로 사용되어 질 수 있음)

3. cgroupfs

cgroup 파일 시스템(cgroupfs)라는 유사 파일 시스템을 통해 커널의 cgroup 인터페이스가 제공된다. cgroupfs는 cgroups 계층 구조와 서브시스템 설정 등을 파일 시스템의 디렉터리와 파일로 표현하고, 이를 통해 cgroups를 쉽게 구성하고 제어할 수 있다. 아래와 같이 mount하여 사용한다.

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

cgroups v1과 v2

cgroups 은 리눅스 2.6.24에서 처음 도입되었으며, 점차 다양한 cgroup 컨트롤러들이 추가되어 다양한 종류의 자원들을 관리할 수 있게 됐다.  하지만 각 리소스마다 계층을 만들 수 있었기 때문에 비일관성이 발생하고 계층 구조가 복잡해 지게 되었다. 이에 리눅스 3.10부터 새로운 cgroup에 대해 검토가 시작되었고, 리눅스 4.5에서 cgroups v2가 출시 되었다. 비록 cgroups v2가 v1을 대체하기 위한 것이긴 하지만, 호환성 문제로 계속 존재하고 있다. 따라서, 현재 cgroups v2를 사용하면서도 v2에서 지원하지 않는 v1 기능은 사용 가능하다. 다만 한 서브시스템을 cgroups v1계층 구조와 v2 계층 구조 모두에서 동시에 사용할 수 없다는 제약이 있다.

cgroups v1과 v2에 대한 사용법은 아래 글에서 확인해 볼 수 있다.

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

참고

답글 남기기