#1 개념
1-1. 배경
Cgroups는 2006년 Google의 "Process Containers" 프로젝트를 통해 만들어졌으며, 프로젝트는 다음과 같은 목적으로 시작되었다.
- 리소스 격리: 다수의 프로세스가 동시에 실행되는 환경에서 각 프로세스가 시스템 자원을 공유하고 사용할 때 발생하는 리소스 경합으로 인한 성능 저하를 방지하기 위한 프로세스 격리 및 자원 사용량 제한
- 보안: 악성 코드나 악의적인 프로그램이 시스템에 액세스 하여 피해를 입히는 것을 방지하기 위해, 프로세스를 격리된 환경에서 실행
- 자원 관리의 최적화: 프로세스 간의 자원 사용을 효율적으로 관리하고 최적화하기 위해 자원 모니터링 및 사용량 제한
1-2. 정의
Cgroups는 작업셋의 집약/파티셔닝을 제공하는 메커니즘으로 하나 또는 그 이상의 서브 시스템을 파라미터 셋으로 연관시키는 역할을 한다. 서브 시스템은 작업 그룹의 사용을 효과적으로 만들어주는 모듈로, 일반적으로 자원을 스케쥴링하고 그룹 별 제한을 적용하는 등의 작업을 수행하는 "resource controller"이다. 계층은 트리에 배열된 cgroup의 집합으로, 시스템의 모든 작업이 cgroup의 집합 중 하나에 포함되도록 한다. 각 서브 시스템은 해당 cgroup의 system-specific state와 cgroup 가상 파일 시스템의 인스턴스를 가지고 있다.
#2 사용법
2-1. Basic Usage
Cgroup과 서브시스템은 기본적으로 쉘 명령어를 사용하여 조작할 수 있으며, 가상 파일시스템을 통해 동작한다.
# To mount a cgroup hierarchy with all available subsystems
mount -t cgroup {group_name} /sys/fs/cgroup
# mount tmpfs on /sys/fs/cgroup
# create direcotries for each cgroup resource
mount -t tmpfs cgroup_root /sys/fs/cgroup
mkdir /sys/fs/cgroup/rg1
# mount a hierarchy with cpuset and memory subsystem
mount -t cgroup -o cpuset,memory hier1 /sys/fs/cgroup/rg1
2-2. Attaching process
echo PID > tasks
참고 자료
- 커널 문서: https://docs.kernel.org/admin-guide/cgroup-v1/cgroups.html
- API: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/resource_management_guide/ch-using_control_groups
- 서브 시스템 관련: https://sonseungha.tistory.com/535
'컴퓨터 과학 > 운영체제' 카테고리의 다른 글
Docker Script (0) | 2024.05.17 |
---|---|
Kernel DMA API (0) | 2024.04.24 |