3장. 서브시스템 및 조정 가능한 매개 변수

서브시스템 (Subsystems)은 cgroup을 인식하는 커널 모듈입니다. 일반적으로 서브시스템은 다른 cgroup에게 다양한 수준의 시스템 자원을 할당할 수 있는 자원 컨트롤러입니다. 하지만 서브시스템은 서로 다른 그룹의 프로세스를 각각 다르게 다뤄야 할 필요가 있을 경우, 커널과 다른 형태의 상호작용을 하도록 프로그램될 수 있습니다. 새로운 서브시스템을 개발하기 위한 어플리케이션 프로그래밍 인터페이스(application programming interface)(API)는 시스템의 /usr/share/doc/kernel-doc-kernel-version/Documentation/cgroups/에 설치된 (kernel-doc 패키지로 제공) 커널 문서의 cgroups.txt에 기재되어 있습니다. cgroup 문서의 최신 버전은 온라인 http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt에서 보실 수 있습니다. 하지만 최신 버전의 문서에 설명된 기능은 사용자의 시스템에 설치된 커널에서 사용할 수 있는 기능과 일치하지 않을 수 있다는 점에 유의하십시오.
cgroup의 서브시스템 매개 변수를 포함하는 상태 객체(State objects)는 cgroup의 가상 파일 시스템에서 가상파일(pseudofiles)로 표시됩니다. 이러한 가상파일은 셀 명령이나 시스템 호출로 조작할 수 있습니다. 예를 들어, cpuset.cpus는 cgroup에 액세스를 허용하는 CPU를 지정하는 가상 파일입니다. 시스템에서 실행되는 웹 서버의 cgroup이 /cgroup/cpuset/webserver인 경우 다음 명령을 실행합니다:
~]# echo 0,2 > /cgroup/cpuset/webserver/cpuset.cpus
위의 명령은 0,2 값을 cpuset.cpus 가상 파일에 작성하여 /cgroup/cpuset/webserver/tasks에 기재된 PID 작업이 시스템의 CPU 0과 CPU 2만을 사용하도록 제한합니다.

3.1. blkio

블록 I/O (blkio) 서브시스템은 cgroup의 작업을 사용하여 블록 장치의 I/O에 대한 액세스를 제어 및 모니터링합니다. 이러한 가상 파일에 값을 기록하면 액세스 또는 대역폭이 제한되며 이러한 가상 파일에서 값을 읽을 때 I/O 작업에 대한 정보가 제공됩니다.
blkio.weight
기본적으로 cgroup에 제공되는 블록 I/O 액세스의 상대적인 비율 (가중치)을 100에서 1000으로 지정합니다. 이 값은 특정 장치에 대해 blkio.weight_device 매개 변수에 의해 덮어쓰기됩니다. 예를 들어, 블록 장치에 액세스하기 위해 기본값 가중치 500을 cgroup에 할당하려면 다음 명령을 실행합니다:
echo 500 > blkio.weight
blkio.weight_device
특정 장치에서 cgroup에 제공되는 I/O 액세스의 상대적 비율 (가중치)을 100에서 1000 이내로 지정합니다. 이 매개 변수 값은 지정된 장치의 blkio.weight 매개 변수의 값을 덮어쓰기합니다. 이 값은 major:minor weight 형식을 취하며 여기서 majorminorhttp://www.kernel.org/doc/Documentation/devices.txt에서 사용 가능한 Linux 할당 장치 (Linux 장치 목록이라고도 알려짐)에서 지정된 장치 유형과 노드 번호입니다. 예를 들어 /dev/sda로 액세스하기 위해 cgroup에 500의 가중치를 할당하려면 다음 명령을 실행합니다:
echo 8:0 500 > blkio.weight_device
Linux 할당 장치 표기에서 8:0/dev/sda를 나타냅니다.
blkio.time
cgroup이 특정 장치로의 I/O 액세스 시간을 보고합니다. 항목은 major, minor, time의 3 개의 필드로 구성됩니다. MajorminorLinux 할당 장치에 지정된 장치 유형과 노드 번호이며 time은 밀리 초 (ms) 단위의 시간입니다.
blkio.sectors
cgroup에 의해 특정 장치 간에 전송되는 섹터 수를 보고합니다. 항목은 major, minor, sectors의 3 개 필드로 구성됩니다. MajorminorLinux 할당 장치에 지정된 장치 유형과 노드 번호이며 sectors는 디스크 섹터 수입니다.
blkio.io_service_bytes
cgroup에 의해 특정 장치 간에 전송되는 바이트 수를 보고합니다. 항목은 major, minor, operation, bytes의 4개 필드로 구성됩니다. MajorminorLinux 할당 장치에 지정된 장치 유형과 노드 번호입니다. operation은 작업 유형 read, write, sync, async)을 나타내며, bytes는 전송된 바이트 수를 나타냅니다.
blkio.io_serviced
특정 장치에서 cgroup에 의해 실행된 I/O 작업의 수를 보고합니다. 항목은 major, minor, operation, bytes의 4 개 필드로 구성됩니다. MajorminorLinux 할당 장치에서 지정된 장치 유형 및 노드 수입니다. operation은 작업 유형 (read, write, sync, async)을 나타내며 number는 작업 수를 나타냅니다.
blkio.io_service_time
cgroup에 의한 특정 장치에서 발생하는 I/O 작업 요청의 발송에서 완료 까지의 총 시간을 보고합니다. 항목은 major, minor, operation, bytes의 네 개의 필드로 구성됩니다. MajorminorLinux 할당 장치에 지정된 장치 유형과 노드 번호입니다. operation은 작업 유형 (read, write, sync, async)을 나타내고 time은 나노초 (ns) 단위로 표시됩니다. 시간은 큰 단위가 아닌 나노초 단위로 보고되기 때문에 이러한 보고서는 솔리드 스테이트 장치의 경우에도 의미가 있습니다.
blkio.io_wait_time
스케줄러 대기열에서 서비스를 기다리는 데 소요된 cgroup에 의한 특정 장치의 총 I/O 작업 시간을 보고합니다. 이 보고서를 분석할 때 다음 사항에 유의하십시오:
  • 보고되는 시간은 cgroup 자체가 I/O 작업을 기다리는데 소요된 시간이 아니라 cgroup 의 모든 I/O 작업의 누계이기 때문에 총 경과 시간 보다 길 수 있습니다. 그룹 전체로 소요된 대기 시간을 확인하려면 blkio.group_wait_time을 사용합니다.
  • 장치가 queue_depth > 1을 갖는 경우, 보고되는 시간은 장치가 요청을 다시 정렬하는 동안 소요된 대기 시간이 아닌 요청이 장치에 발송될 때 까지의 시간 만을 포함합니다.
항목은 major, minor, operation, bytes의 네 개의 필드로 구성됩니다. MajorminorLinux 할당 장치에 지정된 장치 유형과 노드 번호입니다. operation은 작업 유형 (read, write, sync, async)을 나타내고 time은 나노초 (ns) 단위로 표시됩니다. 시간은 큰 단위가 아닌 나노초 단위로 보고되기 때문에 이러한 보고서는 솔리드 스테이트 장치의 경우에도 의미가 있습니다.
blkio.io_merged
cgroup에 의해 I/O 작업에 대한 요청으로 병합된 BIOS 요청 수를 보고합니다. 항목은 numberoperation의 두 개의 필드로 구성됩니다. Number는 요청 수 이고 operation은 작업 유형 (read, write, sync, async)을 나타냅니다.
blkio.io_queued
cgroup에 의한 I/O 작업 대기열의 요청 수를 보고합니다. 항목은 numberoperation의 두 개의 필드로 구성됩니다. Number는 요청 수이며, operation은 작업 유형 (read, write, sync, async)을 나타냅니다.
blkio.avg_queue_size
전체 그룹 존재 시간에 걸쳐 cgroup에 의한 I/O 작업의 평균 대기열 크기를 보고합니다. 대기열 크기는 cgroup의 대기열이 타임 슬라이스를 얻을 때마다 샘플링됩니다. 이 보고서는 시스템에서 CONFIG_DEBUG_BLK_CGROUP=y가 설정되어 있는 경우에만 사용할 수 있다는 점에 유의하십시오.
blkio.group_wait_time
cgroup 하나의 대기열의 타임 슬라이스에 대해 cgroup이 소요한 대기 시간의 합계를 (나노 초단위 - ns) 보고합니다. 보고서는 cgroup의 대기열이 타임 슬라이스를 얻을 때 마다 업데이트되므로 cgroup이 타임 슬라이스를 기다리는 동안 가상 파일을 읽는 경우 보고서에는 현재 대기열에 있는 작업을 기다리는 데 소비한 시간은 포함되지 않습니다. 이 보고서는 시스템에서 CONFIG_DEBUG_BLK_CGROUP=y가 설정되어 있는 경우에만 사용할 수 있는 점에 유의하십시오.
blkio.empty_time
보류 중인 요청 없이 cgroup이 소요한 총 시간을 (나노 초단위 - ns) 보고합니다. 보고서는 보류 중이 요청이 cgroup 대기열에 들어갈 때 마다 업데이트되므로 cgroup이 보류 중인 요청이 없이 가상 파일을 읽을 경우, 현재 빈 상태에서 소비한 시간은 보고서에 포함되지 않게 됩니다. 이 보고서는 시스템에서 CONFIG_DEBUG_BLK_CGROUP=y가 설정된 경우에만 사용 가능하다는 점에 유의하십시오.
blkio.idle_time
이미 대기열 또는 다른 그룹에 있는 요청 보다 상위의 요청을 예상하여 cgroup에 대해 스케줄러가 유휴 상태에 소비된 총 시간을 (나노초 단위 — ns) 보고합니다. 보고서는 그룹이 더이상 유휴 상태에 있지 않을 때 마다 업데이트되므로 cgroup이 유휴 상태에 있는 동안 가상 파일을 읽을 경우, 현재 유휴 상태에서 소요된 시간은 보고서에 포함되지 않습니다. 이 보고서는 시스템에서 CONFIG_DEBUG_BLK_CGROUP=y가 설정되어 있는 경우에만 사용할 수 있다는 점에 유의하십시오.
blkio.dequeue
특정 장치의 대기열에서 삭제된 cgroup에 의해 요청된 I/O 작업의 수를 보고합니다. 항목은 major, minor, number의 3개의 필드로 구성됩니다. MajorminorLinux 할당 장치에 지정된 장치 유형 및 노드 번호입니다. number는 그룹이 대기열에서 삭제 요청된 횟수입니다. 이 보고서는 시스템에서 CONFIG_DEBUG_BLK_CGROUP=y가 설정되어 있는 경우에만 사용할 수 있다는 점에 유의하십시오.
blkio.reset_stats
기타 다른 가상 파일에 기록되는 통계를 재설정합니다. 이 cgroup에 대한 통계를 다시 설정하려면 이 파일에 정수를 씁니다.