| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 알고리즘
- 코딩테스트
- CSV
- gpdb
- spring boot
- JavaScript
- Trie
- Data Structure
- boj
- BFS
- 코테
- SWEA
- Bruth Force
- Vue.js
- 시뮬레이션
- SQL
- GitHub
- aws
- Python
- Back tracking
- Algorithm
- programmers
- 모의SW역량테스트
- Priority Queue
- django
- hash table
- DFS
- Linked list
- 구현
- 알고리듬
- Today
- Total
hotamul의 개발 이야기
cgroup으로 CPU 제한하기 본문
cgroup이란?
cgroup은 Linux 운영 체제에서 프로세스 그룹을 관리하는 기능이다. cgroup은 Control Group의 줄임말로, 다수의 프로세스 그룹을 묶어서 리소스 제한, 우선순위 설정 등을 할 수 있도록 한다.
예를 들어, 여러 개의 웹 서버 프로세스가 있을 때, cgroup을 사용하면 CPU, 메모리, 디스크 등 리소스를 공정하게 분배하거나 우선순위를 지정하여 특정 프로세스 그룹이 우선적으로 리소스를 할당 받도록 설정할 수 있다.
또한, cgroup은 서버 가상화 기술인 컨테이너에서도 사용된다. 컨테이너는 cgroup을 사용하여 호스트 운영 체제에서 가상화된 환경에서 독립된 프로세스 그룹을 생성하고 리소스를 관리하여, 컨테이너 간의 Resource Contention을 방지하고, 각각의 컨테이너가 안정적으로 동작할 수 있도록 한다.
stress tool 설치
cgroup을 이용해서 CPU 사용량을 제한해보자.
stress는 리눅스에서 시스템의 안정성과 성능을 테스트하기 위한 도구로, 다양한 리소스 요구 사항을 시뮬레이션하여 리소스 사용량의 한계를 테스트할 수 있다.
테스트 하고자 하는 Linux OS는 Ubuntu이다.
$ cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.5 LTS"
NAME="Ubuntu"
...
먼저 stress tool을 설치해보자
$ sudo apt install -y stress
root 계정으로 전환
$ sudo su
test용 cgroup 생성
$ cd /sys/fs/cgroup/cpu && mkdir utils $$ cd utils
$ ll
total 0
drwxr-xr-x 2 root root 0 Mar 13 14:45 ./
dr-xr-xr-x 7 root root 0 Mar 9 14:51 ../
-rw-r--r-- 1 root root 0 Mar 13 14:45 cgroup.clone_children
-rw-r--r-- 1 root root 0 Mar 13 14:45 cgroup.procs
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.cfs_burst_us
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.cfs_period_us
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.cfs_quota_us
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.idle
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.shares
-r--r--r-- 1 root root 0 Mar 13 14:45 cpu.stat
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.uclamp.max
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.uclamp.min
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.stat
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage_all
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage_percpu
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage_percpu_sys
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage_percpu_user
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage_sys
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage_user
-rw-r--r-- 1 root root 0 Mar 13 14:45 notify_on_release
-rw-r--r-- 1 root root 0 Mar 13 14:45 tasks
/sys/fs/cgroup/cpu에 디렉토리를 생성하면 자동으로 위와 같은 sudo file이 생성되는데 크기는 모두 0이다.
현재 process 생성한 cgroup에 등록
echo $$
50249
$ echo $$ > tasks
CPU 10%로 제한
cpu.cfs_perios_us: 100000 (default로 100ms)cpu.cfs_quota_us: 10000 (10ms로 변경)
$ echo 10000 > cpu.cfs_quota_us
stress test 설정
$ stress -c 1
top으로 CPU 사용량 확인
$ top
top - 15:08:00 up 4 days, 16 min, 0 users, load average:
Tasks: 117 total, 3 running, 114 sleeping, 0 stopped,
%Cpu(s): 17.9 us, 3.0 sy, 0.0 ni, 78.7 id, 0.3 wa, 0.0
MiB Mem : 966.2 total, 70.4 free, 372.3 used,
MiB Swap: 0.0 total, 0.0 free, 0.0 used.
PID USER PR NI VIRT RES SHR S %CPU
51291 root 20 0 3864 100 0 R 10.0
...
CPU 5%로 변경
cpu.cfs_perios_us: 100000 (default로 100ms)cpu.cfs_quota_us: 5000 (5ms로 변경)
$ echo 5000 > cpu.cfs_quota_us
top으로 CPU 사용량 확인
$ top
top - 15:11:03 up 4 days, 19 min, 0 users, load average:
Tasks: 124 total, 2 running, 122 sleeping, 0 stopped,
%Cpu(s): 8.0 us, 1.7 sy, 0.0 ni, 90.0 id, 0.3 wa, 0.0
MiB Mem : 966.2 total, 65.0 free, 377.1 used,
MiB Swap: 0.0 total, 0.0 free, 0.0 used.
PID USER PR NI VIRT RES SHR S %CPU
51291 root 20 0 3864 100 0 R 5.0
...'etc.' 카테고리의 다른 글
| tmpfs란 무엇일까? (0) | 2023.03.14 |
|---|---|
| cgroup으로 pids.max 제한하기 (0) | 2023.03.14 |
| python으로 sar 명령 실행하기 (0) | 2023.03.12 |
| sysstat, sar을 이용한 resource 모니터링 (0) | 2023.03.12 |
| cgroups을 이용한 메모리 동적 할당 (Facebook 사례 분석) (0) | 2023.03.11 |