-
[Linux] cgroup cpu.max 설정 알아보기System 2024. 6. 20. 07:23반응형
- 목차
들어가며.
이번 글에서는 Docker 와 Container 가상화 기술의 근간이 되는 cgroup 과 cpu.max 설정에 대해서 알아보도록 하겠습니다.
cgroup 은 Control Group 의 약자로 리눅스 커널에서 프로세스들의 리소스 사용을 제한, 추적, 관리하는 기능을 제공합니다.
cgroup 을 사용하면 시스템의 CPU, 메모리, I/O 등을 프로세스 그룹 단위로 제한할 수 있으며, 이를 통해 서버 리소스를 효율적으로 분배하고 과도한 리소스 소비를 방지할 수 있습니다.
cgroup은 기본적으로 cgroup v1과 cgroup v2 두 가지 버전으로 나뉩니다.
cgroup v2는 구조가 단순하고 더 강력한 기능을 제공하는 방식으로 최신 리눅스 배포판에서 기본적으로 사용됩니다.
/sys/fs/cgroup 디렉토리에 대해서.
일반적으로 Linux 에서 mount 명령어를 실행하게 되면 아래와 같은 결과가 출력됩니다.
mount 명령어는 특정 파일 시스템과 파일 시스템이 마운트된 디렉토리의 위치를 확인할 수 있는 명령어입니다.
Linux 는 cgroup 을 제어하기 위해서 "cgroup2" 라는 이름의 파일시스템이 제공됩니다.
그리고 cgroup2 파일시스템은 /sys/fs/cgroup 디렉토리에 마운트됩니다.
cgroup on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
그래서 cgroup 과 관련된 정보 및 파일들은 /sys/fs/cgroup 하위에서 확인할 수 있습니다.
이번 글의 주제인 cpu.max 설정 또한 /sys/fs/cgroup/cpu.max 파일을 통해서 설정됩니다.
cgroup.procs
cgroup.procs 는 /sys/fs/cgroup 디렉토리 하위에 위치하는 파일입니다.
cgroup.procs 는 현재 실행 중인 Process 의 id 들이 기록됩니다.
일반적으로 아래와 같이 명령어가 사용되고, cgroup.procs 파일은 PID 를 저장하고 있습니다.
아래의 케이스는 1, 415, 456, 466, 517 인 5개의 Process 가 실행 중이며, 이 Process 들이 cgroup 의 제어를 받습니다.
cat /sys/fs/cgroup/cgroup.procs 1 415 456 466 517
일반적으로 단일 cgroup 이 존재합니다.
그래서 생성되는 모든 Process 들은 Root cgroup 의 제어를 받게 됩니다.
cpu.max 파일이란 ?
cpu.max 파일은 cgroup v2 에서 CPU 리소스를 관리하는 중요한 파일입니다.
이 파일을 통해 특정 cgroup 에 대해 CPU 시간의 최대 사용량을 제한할 수 있습니다.
즉, cpu.max 는 주어진 시간 동안 cgroup 이 사용할 수 있는 최대 CPU 시간을 설정합니다.
기본적으로 cpu.max 는 아래와 같이 max 100000 로 설정되어 있습니다.
이 설정의 의미는 모든 CPU 를 100% 사용함을 의미합니다.
cat /sys/fs/cgroup/cpu.max >> max 100000
cpu.max 의 파일 형식은 아래와 같습니다.
<max CPU time> <period>
- max CPU time: cgroup 이 사용할 수 있는 최대 CPU 시간. 이 값은 마이크로초 단위로 설정됩니다.
- period: 이 시간 내에서 CPU 사용을 제한할 주기. 보통 100ms(100,000 microseconds)로 설정되며, 기본적으로 100ms 주기가 적용됩니다.
만약 cpu.max 가 50000 100000 로 설정된다면 50% 만큼의 CPU 를 사용할 수 있게 됩니다.
cpu.max 제어해보기.
아래의 명령어를 통해서 cpu.max 를 설정할 수 있습니다.
echo "50000 100000" > /sys/fs/cgroup/cpu.max
그리고 아래의 명령어를 통해서 Stress Test 를 수행합니다.
start_time=$(date +%s); for i in {1..10000000}; do :; done; end_time=$(date +%s); execution_time=$((end_time - start_time)); echo "Execution Time: ${execution_time} seconds"
이 경우에 위 명령어를 실행한 415 Process 는 최대 50% CPU 만을 사용할 수 있습니다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 415 root 20 0 2816276 2.7g 2544 R 50.3 8.6 1:19.61 bash 1 root 20 0 3884 2952 2568 S 0.0 0.0 0:00.36 bash 456 root 20 0 2816276 2.7g 2584 S 0.0 8.6 0:29.48 bash 466 root 20 0 3752 2972 2588 S 0.0 0.0 0:00.01 bash 526 root 20 0 5720 2572 2188 R 0.0 0.0 0:00.00 top
cpu.max 25000 100000
또한 CPU 사용량을 25000 으로 변경하게 되면, 최대 CPU 사용량은 25% 로 낮아집니다.
echo "25000 100000" > /sys/fs/cgroup/cpu.max
cpu.max 25000 100000 & 2개의 Process
그리고 cpu.max 의 설정값이 25000, 100000 인 상태에서 2개의 Process 가 실행되면,
아래와 같이 각 Process 는 12.5% 의 CPU 를 사용할 수 있습니다.
반응형'System' 카테고리의 다른 글
[Linux] unshare 과 PID Namespace 격리 알아보기 (0) 2024.06.19 심볼릭 링크 알아보기 ( Symbolic Link ) (0) 2024.06.09 Standard Input (표준입력) 이해하기 (0) 2023.10.16 RPC (Remote Procedure Call) 알아보기 (0) 2023.10.14 IPC Signal 알아보기 (0) 2023.10.07