1장. 컨트롤 그룹 (Cgroups) 소개

Red Hat Enterprise Linux 6에서는 컨트롤 그룹 (control group)이라는 새로운 커널 기능을 제공합니다. 이 문서에서는 이 기능을 cgroup라는 약칭으로 기재하고 있습니다. Cgroup을 통해 사용자는 CPU 시간, 시스템 메모리, 네트워크 대역폭과 같은 자원이나 이러한 자원의 조합을 시스템에서 실행 중인 사용자 정의 작업 그룹 (프로세스) 간에 할당할 수 있습니다. 또한 설정한 cgroup을 모니터링하거나 특정 자원으로의 cgroup 액세스를 거부하는 것 이외에 실행 중인 시스템에서 cgroup을 동적으로 다시 구성할 수 있습니다. cgconfig (control group config ) 서비스는 부팅시 시작 및 사전 정의된 cgroup을 다시 구성하도록 설정하여 재부팅 후에도 구성된 사항이 지속되도록 설정할 수 있습니다.
cgroup을 사용하여 시스템 관리자는 시스템 자원 할당, 우선 순위 지정, 거부, 관리, 모니터링과 같은 세밀한 제어가 가능합니다. 하드웨어 자원은 작업 및 사용자 간을 신속하게 분배하여 전체적인 효율성을 향상시킬 수 있습니다.

1.1. 컨트롤 그룹의 구성 방법

프로세스와 마찬가지로 cgroup은 계층적으로 구성되어 있으며 하위 cgroup 부모 cgroup 속성의 일부를 상속하도록되어 있습니다. 그러나이 두 모델 사이에는 차이점이 있습니다.

Linux 프로세스 모델

Linux 시스템의 모든 프로세스는 일반적인 부모 프로세스의 자식 프로세스입니다. init 프로세스는 부팅시 커널에 의해 실행되어 다른 프로세스를 시작합니다 (그 결과 자식의 자식 프로세스를 시작하는 경우도 있습니다). 모든 프로세스는 하나의 부모 프로세스의 하위 프로세스이기 때문에 Linux 프로세스 모델은 단일 계층 또는 트리로 되어 있습니다.
또한 init을 제외한 모든 Linux 프로세스는 환경 (예: PATH 변수) [1] 및 부모 프로세스의 기타 다른 속성 (예: 파일 열기 설명자)을 상속합니다.

Cgroup 모델

Cgroup은 다음과 같은 점에서 프로세스와 유사합니다:
  • 계층적이다.
  • 자식 cgroup은 부모 cgroup에서 특정 속성을 상속한다.
근본적인 차이점은 여러 다른 cgroup 계층이 시스템에 동시에 존재할 수 있다는 것입니다. Linux 프로세스 모델이 단일 프로세스 트리일 경우, cgroup 모델은 하나의 또는 여러 다른 연결되지 않은 작업 트리 (즉 프로세스)라는 것입니다.
각 계층에는 하나 이상의 서브시스템에 연결되므로 cgroup에 대해 여러 분리된 계층이 필요합니다. 서브 시스템 [2]은 CPU 시간 또는 메모리와 같은 단일 자원을 말합니다. Red Hat Enterprise Linux 6는 9 개의 cgroup 서브시스템을 제공하고 있으며 그 이름과 기능은 다음과 같습니다.

Red Hat Enterprise Linux에서 사용 가능한 서브시스템

  • blkio — 이 서브시스템은 물리 드라이브 (예: 디스크, 솔리드 스테이트, USB 등)와 같은 블록 장치에 대한 입력/출력 액세스에 제한을 설정합니다.
  • cpu — 이 서브시스템은 CPU에 cgroup 작업 액세스를 제공하기 위해 스케줄러를 사용합니다.
  • cpuacct — 이 하위 시스템은 cgroup의 작업에 사용된 CPU 자원에 대한 보고서를 자동으로 생성합니다.
  • cpuset — 이 서브시스템은 개별 CPU (멀티코어 시스템에서) 및 메모리 노드를 cgroup의 작업에 할당합니다.
  • devices — 이 서브시스템은 cgroup의 작업 단위로 장치에 대한 액세스를 허용하거나 거부합니다.
  • freezer — 이 서브시스템은 cgroup의 작업을 일시 중지하거나 다시 시작합니다.
  • memory — 이 서브시스템은 cgroup의 작업에서 사용되는 메모리에 대한 제한을 설정하고 이러한 작업에서 사용되는 메모리 자원에 대한 보고서를 자동으로 생성합니다.
  • net_cls — 이 서브시스템은 Linux 트래픽 컨트롤러 (tc)가 특정 cgroup 작업에서 발생하는 패킷을 식별하게 하는 클래식 식별자 (classid)를 사용하여 네트워크 패킷에 태그를 지정합니다.
  • nsnamespace 서브시스템

참고

man 페이지와 커널 문서 와 같은 cgroup 관련 문서에서 자원 컨트롤러 또는 컨트롤러라는 용어가 사용되는 경우가 있습니다. 이러한 두 용어는 서브시스템 (subsystem)과 같은 의미로 서브시스템이 정상적으로 리소스를 스케줄하거나 연결된 계층에 있는 cgroup에 제한을 적용하는 이유에서 이렇게 불리고 있습니다.
서브시스템 (자원 컨트롤러)의 정의는 매우 일반적인 것으로 작업 그룹 (즉 프로세스)에 따라 동작하는 것입니다.


[1] 부모 프로세스는 자식 프로세스에게 전달하기 전 환경을 변경하는 것이 가능.
[2] 서브시스템은 libcgroup man 페이지 및 기타 다른 문서에서 자원 컨트롤러, 또는 단순히 컨트롤러라고도 부릅니다.