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 및 메모리 사용량 제한
- 성능 분석 및 자원 분배 최적화