Skip to content

Cgroup

cgroup(Control Groups)은 리눅스 커널 기능 중 하나로, 시스템 자원(CPU, 메모리, 디스크 I/O, 네트워크 등)을 프로세스 그룹 단위로 할당하고 제한하며 모니터링할 수 있도록 합니다. 이를 통해 컨테이너 환경, 가상화, 시스템 리소스 분배 및 성능 최적화에 유용하게 사용됩니다.

주요 기능

리소스 제한(Resource Limiting)
CPU, 메모리, 디스크 I/O 등의 사용량을 제한할 수 있음.
리소스 계층화(Hierarchical Organization)
부모-자식 관계로 그룹을 생성해 하위 그룹이 상위 그룹의 정책을 상속 가능.
리소스 계량(Resource Accounting)
특정 프로세스 그룹이 사용한 자원을 모니터링하고 통계를 수집.
리소스 격리(Resource Isolation)
서로 다른 프로세스 그룹이 독립적으로 리소스를 사용하도록 격리.

주요 서브시스템 (Controller)

  • cpu - CPU 사용량 제어 (우선순위, 스케줄링)
  • cpuacct - CPU 사용량 추적 및 보고
  • memory - 메모리 사용량 제한 및 스왑 제어
  • blkio - 블록 디바이스(I/O) 리소스 관리
  • net_cls/net_prio - 네트워크 대역폭 할당 및 우선순위 조정
  • pids - 프로세스 수 제한
  • devices - 특정 디바이스 접근 권한 관리

cgroup 버전

  • cgroup v1 - 컨트롤러마다 개별적으로 관리, 유연하지만 복잡함.
  • cgroup v2 - 단일 계층 구조, 일관된 리소스 관리 방식 제공.

주요 명령어

  • cgcreate - 새로운 cgroup 생성
  • cgset - 특정 리소스 할당 및 설정
  • cgexec - 특정 cgroup에서 프로세스 실행
  • cgdelete - cgroup 삭제
  • /sys/fs/cgroup/ - cgroup 설정 및 모니터링 파일 시스템

사용 예시

새로운 cgroup 생성 및 메모리 제한:

sudo cgcreate -g memory:/mygroup
echo 500M | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
sudo cgexec -g memory:mygroup ./my_program

CPU 사용 제한:

sudo cgcreate -g cpu:/cpulimited
echo 50000 | sudo tee /sys/fs/cgroup/cpu/cpulimited/cpu.cfs_quota_us
sudo cgexec -g cpu:cpulimited my_program

활용 사례

  • Docker 및 Kubernetes 컨테이너 리소스 관리
  • 멀티 테넌트 환경에서 자원 격리
  • 특정 작업의 CPU 및 메모리 사용량 제한
  • 성능 분석 및 자원 분배 최적화

See also

Favorite site