2장. 컨트롤 그룹 사용하기

cgroup를 사용하여 작업하는 가장 간단한 방법은 libcgroup 패키지를 설치하는 것입니다. 이 패키지에는 여러 cgroup 관련 명령행 유틸리티와 man 페이지가 포함되어 있습니다. 모든 시스템에서 사용 가능한 쉘 명령어와 유틸리티를 사용하여 계층을 마운트하고 cgroup 매개 변수를 (비 영구적으로) 설정하는 것도 가능하지만, libcgroup 제공 유틸리티를 사용하면 프로세스를 단순화하고 기능을 확장할 수 있습니다. 따라서 이 문서에서는 libcgroup 명령에 중점을 두어 설명하겠습니다. 대부분의 경우 기본 구조를 설명하기 위해 해당 쉘 명령을 포함시키지만 실제로 libcgroup 명령을 사용하는 것이 좋습니다.

참고

cgroup을 사용하려면 root로 다음 명령을 실행하여 libcgroup 패키지가 설치되어 있는지 확인합니다:
~]# yum install libcgroup

2.1. cgconfig 서비스

libcgroup 패키지와 함께 설치되는 cgconfig 서비스는 계층 구조를 생성하여 서브시스템을 연결하고 계층 내에서 cgroup을 관리하기 위한 편리한 방법을 제공합니다. 시스템에서 계층과 cgroup을 관리하기 위해 cgconfig를 사용하는 것이 좋습니다.
cgconfig 서비스는 Red Hat Enterprise Linux 6에서 기본값으로 시작되지 않습니다. chkconfig로 서비스를 시작할 때, 이는 cgroup 설정 파일 — /etc/cgconfig.conf을 읽습니다. 따라서 Cgroup은 시스템 시작 시 마다 다시 생성되어 영구적으로 됩니다. 설정 파일의 내용에 따라 cgconfig는 계층 구조를 생성하고 필요한 파일 시스템을 마운트하여 cgroup을 만들고 각 그룹에 대해 서브시스템 매개 변수를 설정합니다.
libcgroup 패키지로 설치된 디폴트 /etc/cgconfig.conf 파일은 각 서브시스템에 대해 개별적 계층 구조를 생성하여 마운트하고 이 계층구조에 서브시스템을 연결합니다.
cgconfig 서비스를 중지 (service cgconfig stop 명령을 사용)하면, 마운트된 모든 계층을 마운트 해제합니다.

2.1.1. cgconfig.conf 파일

/etc/cgconfig.conf 파일에는 두 가지 주요한 항목 mountgroup이 있습니다. 마운트 항목은 가상 파일 시스템으로 계층구조를 생성하고 마운트하며 이러한 계층 구조에 서브시스템을 연결합니다. 마운트 항목은 다음과 같은 구문을 사용하여 정의됩니다:
mount {
    <controller> = <path>;
    …
}
사용 예제는 예 2.1. “마운트 항목 생성하기 ”에서 참조하십시오.

예 2.1. 마운트 항목 생성하기

다음의 예에서는 cpuset 서브시스템에 대한 계층 구조를 생성하고 있습니다:
mount {
    cpuset = /cgroup/cpu;
}
이에 해당하는 쉘 명령은 다음과 같습니다:
~]# mkdir /cgroup/cpu
~]# mount -t cgroup -o cpu cpu /cgroup/cpu
그룹 항목은 cgroup을 생성하고 서브시스템 매개 변수를 설정합니다. 그룹 항목은 다음과 같은 구문을 사용하여 정의됩니다:
group <name> {
    [<permissions>]
    <controller> {
        <param name> = <param value>;
        …
    }
    …
}
permissions 섹션은 옵션이라는 점에 유의하십시오. 그룹 항목의 권한을 정의하려면 다음과 같은 구문을 사용합니다:
perm {
    task {
        uid = <task user>;
        gid = <task group>;
    }
    admin {
       uid = <admin name>;
       gid = <admin group>;
    }
}
사용 예제는 예 2.2. “그룹 항목 생성하기 ”에서 참조하십시오.

예 2.2. 그룹 항목 생성하기

다음 예에서는 sql 데몬에 대한 cgroup을 생성하고 sqladmin 그룹의 사용자에게 cgroup에 작업을 추가할 수 있는 권한을 부여하며 root 사용자에게 서브시스템 매개 변수를 변경할 수 있는 권한을 부여합니다:
group daemons/sql {
    perm {
        task {
            uid = root;
            gid = sqladmin;
        } admin {
            uid = root;
            gid = root;
        }
    } cpu {
        cpu.shares = 100;
    }
}
예 2.1. “마운트 항목 생성하기 ”에 있는 마운트 항목의 예제와 조합할 때 해당하는 쉘 명령은 다음과 같습니다:
~]# mkdir -p /cgroup/cpu/daemons/sql
~]# chown root:root /cgroup/cpu/daemons/sql/*
~]# chown root:sqladmin /cgroup/cpu/daemons/sql/tasks
~]# echo 100 > /cgroup/cpu/daemons/sql/cpu.shares

참고

/etc/cgconfig.conf에 있는 변경 사항을 활성화하려면 cgconfig 서비스를 다시 시작해야 합니다:
~]# service cgconfig restart
libcgroup 패키지를 설치할 때, 예제 설정 파일은 /etc/cgconfig.conf에 작성됩니다. 각 줄의 맨 앞에 해시 기호 ('#')가 있는 경우 그 행은 주석처리되어 cgconfig 서비스가 해석되지 않도록 합니다.