cgroup
컨테이너를 구성하는 3가지 주요 리눅스 기술
- Control groups (cgroups)
- Namespaces
- Union mount filesystem
cgroups (Control Groups)
- cgroup은 프로세스들이 사용하는 시스템 자원의 사용정보를 수집및 제한 합니다. 제한을 하기 위해서 프로세스들 별로 사용하고 있는 리소스들의 정보를 수집하고, 수집된 정보를 기반으로 설정된만큼 제한을 진행합니다.
- 제한 가능한 자원 : CPU, Memory, Network, Device, Block I/O
- 활용 사례 : runc, YARN (Hadoop), Android 등
- 컨테이너에서 사용되는 OCI 런타임인 runc가 있습니다.
- 하드웨어 리소스를 관리하는 Yarn에서도 하드 작업을 내릴 때 작업에서 사용할 CPU와 메모리의 양들을 설정하게 되고 cgroup을 통해서 구현이 됩니다.
- 안드로이드는 크게 Foreground와 Background 컨트롤로 구성이 되어 있습니다.
- Foreground, Visible : 사용자가 원활하고 최대한의 성능을 쓸 수 있도록 하기 위해 Foreground용 컨트롤 그룹을 만들고 해당 그룹에 있는 작업들은 자원의 사용에 제한을 거의 받지 않습니다.
- Background : 백그라운드로 돌고있는 작업들의 경우 네트워크가 스토리지와 리소스 사용에 있어 제한을 걸게 됩니다.
- cgroups은 두가지 버전이 있습니다.
- cgroupsv1 : 컨트롤하는 대상이 되는 리소스를 기준으로 개별적으로 cgroups을 생성합니다. 현재 대부분 v1 기반으로 사용되고 있습니다.
- cgroupsv2 : 사용자가 쓰기 편하게 하는 목적이 있습니다.
cgroups 서브시스템
- CPU : 스케줄러를 이용해 해당 cgroup에 속한 프로세스 cpu 사용 시간을 제어합니다. 프로세스의 사용시간을 정하는게 스케줄러이기 때문에 CFS 스케줄러를 쓰고 있는데, CFS 스케줄러 코드에 맞게 cgroup과 관련된 설정들이 들어가 있습니다.
- memory : 해당 컨트롤 그룹에 속한 메모리의 사용량에 대해 제어합니다.
- freezer : cgroup의 작업을 일시 중지하거나 다시 시작합니다.
- blkio : cgroup에 블록 장치에 대한 입출력 제한을 설정합니다.
- net_cls : 이 서브시스템은 Linux 트래픽 컨트롤러 (tc)가 특정 cgroup 작업에서 발생하는 패킷을 식별하게 하는 클래식 식별자 (classid)를 사용하여 네트워크 패킷에 태그를 지정합니다
https://fastcampus.co.kr/dev_online_devopskit
DevOps 마스터 Kit with Linux, Kubernetes, Docker | 패스트캠퍼스
0부터 시작하는 DevOps의 모든 것! DevOps 엔지니어/SRE가 되기 위한 Linux 기초부터 Docker, Kubernetes의 활용과 이직을 위한 데브옵스 인터뷰 준비까지 이 강의 하나로 빠짐없이 학습해 보세요.
fastcampus.co.kr
'linux' 카테고리의 다른 글
[Linux] namespace (0) | 2023.01.17 |
---|---|
[Linux] cgroup으로 CPU 사용 제한하기 (0) | 2023.01.14 |