OS/LINUX

cgroup(Control Group) 이해

투칼론 2016. 3. 2. 23:53
반응형

1. cgroup 개요

  • 자원 사용(CPU, Memory, I/O )을 프로세스 그룹단위로 제어할 수있는 리눅스 커널 기능

  • 성능면에서 자원 경합을 줄이고, 예측성을 높여 SLA를 만족시킴

  • 자원 제어는 CPU/CPUSET, Memory, Network, I/O 등을 포함


2. cgroup 사용

  • 방법1 : cgroup이라는 가상 파일 시스템을 수동으로 마운트해서 사용

  • 방법2 : libcgroup 과 같은 툴을 이용하여, 그룹을 생성하고 관리함. 명령어는 cgcreate, cgexec과 cgclassfy.

  • 방법3: cgroup을 이용하는 Docker, LXC 가상화, libvert 등 다른 소프트웨어 활용


 3. RHEL에서 사용 가능한 서브시스템(자원 컨트롤러)

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

 4. cgroup 설정 예 (libcgroup 툴 사용)

  1) libcgroup 설치 

   - yum install libcgroup

   - apt-get install cgroup-bin libcgroup

  2) 기본 구성 파일 - /etc/cgconfig.conf 

   mount {

         cpuset = /cgroup/cpuset;

         cpu = /cgroup/cpu;

         cpuacct = /cgroup/cpuacct;

         memory = /cgroup/memory;

   }

  3) cgroups 데몬 기동 

   - service config start

  4) 커맨드라인 툴 

   - cgexec :특정 그룹에 새로운 프로세스를 기동
   - cgclasfy :프로세스를 특정 그룹으로 이동
   - cgcreate/cgdelete :특정 그룹을 수동으로 생성하고 삭제
   - cgset :정의된 그룹을 수정

- End -