이것이 점프 투 공작소

cgroup에 대해 알아보자 본문

리눅스

cgroup에 대해 알아보자

겅겅겅 2023. 1. 16. 14:41

cgroup이란?

리눅스에서 컨테이너를 구성하는 3가지 주요 기술 중 하나로,

프로세스들이 사용하는 시스템 자원의 사용정보를 수집 및 제한 시키는 커널의 기능입니다.

 

cgroup 사용 가능한 서브시스템

  • CPU        - 스케줄러를 이용해 cgroup에 속한 프로세스의 CPU 사용시간을 제어
  • Memory  - cgroup에 속한 프로세스의 메모리 사용량 제어
  • freezer    - cgroup의 작업을 일시 중지하거나 다시 시작
  • blkio        - cgroup에 블록 장치에 대한 I/O 제한을 설정
  • net_cls    - 트래픽 컨트롤러(tc)가 특정 cgroup 적업에서 발생하는 패킷을 식별하게 하는 네트워크 패킷 태그를 지정
  • cpuset     - 개별 CPU 메모리 노드를 cgroup에 할당
  • cpuacct   - cgoup이 사용한 CPU자원 보고서 생성
  • devices   - cgroup의 작업 단위로, 장치에 대한 엑세스를 허용하거나 거부
  • ns           - namespace 서브시스템

 

cgroup으로 cpu사용 제한하기

 

cgroup은 /sys/fs/cgroup폴더에 가상파일로 존재하고 있으며,

해당 파일들에 설정들을 변경해가면서 사용 가능합니다.

 

/sys/fs/cgroup/cpu 폴더에 들어가 cpu관련 cgroup설정을 변경 및 사용가능합니다.

 

/sys/fs/cgroup/cpu 내에 컨트롤 그룹 폴더를 만들고 해당 폴더에 들어가면

cgroup관련 각종 값들이 자동으로 만들어집니다.

(utils라는 이름으로 폴더를 만들었습니다.)

 

해당 컨트롤 그룹에 프로세스를 등록하려면 task파일에 프로세스ID를 등록하면 됩니다.

현재 프로세스를 tasks에 등록합니다.

 

cpu의 사용량을 10%로 제한하기 위해 2가지 설정값을 변경해야합니다.

 

cpu.cfs_period_us : CFS가 다음 작업을 수행하도록 하는 사이클시간, 기본값 100ms입니다.

cpu.cfs_quota_us : CPU를 사용할 수 있는 시간

 

CFS Quota

cpu.cfs_quota_us를 10ms으로 설정한다면 해당 cgroup은 10ms만큼 CPU를 사용 가능합니다.

하지만 cpu.cfs_quota_us를 통해 설정된 시간은 특정 주기로 복구됩니다.  이 때 특정 주기를 cpu.cfs_period_us 라고 합니다.

 

cpu.cfs_period_us : 100000us

cpu.cfs_quota_us : 10000us

 

상기 설정대로 두 값을 변경한다면 cgroup의 cpu사용시간이 100ms 주기로 초기화 되고,

cgroup은 100ms 동안 10ms 까지 CPU를 사용하게 됩니다

즉 0.1CPU를 사용하게 됩니다.

 

 

상기 두 설정을 100ms, 10ms으로 설정해주었습니다.

 

 

자식 컨트롤 그룹은 부모 컨트롤을 상속 받아가기에 해당 쉘에서 stress 명령어를 실행합니다

 

다른 터미널에서 확인해보면 10프로까지만 CPU를 사용하는것을 확인 할 수 있습니다.

추가로 cfs_quota_us 값을 변경하여 사용량을 동적으로 변경 할 수 있습니다.

 

감사합니다.