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://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/6/html/resource_management_guide/ch01

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

+ Recent posts