24.4. CPU 가중치를 조정하여 애플리케이션의 CPU 시간 분배 제어
CPU 시간을 특정 cgroup 트리의 애플리케이션에 분산하기 위해 CPU 컨트롤러
의 관련 파일에 값을 할당해야 합니다.
사전 요구 사항
- 루트 권한이 있습니다.
- CPU 시간 배포를 제어하려는 애플리케이션이 있습니다.
- CPU 시간 배포를 위해 cgroup 준비에 설명된 것과 동일한 CPU에서 관련 애플리케이션을 경쟁하게 되었습니다.
-
cgroups-v2
마운트에 설명된 대로 cgroups-v2 파일 시스템을 마운트 했습니다. 다음 예와 같이
/sys/fs/cgroup/
root 제어 그룹 내에 하위 제어 그룹의 두 가지 수준 계층 구조를 생성했습니다.… ├── Example │ ├── g1 │ ├── g2 │ └── g3 …
-
CPU 시간 분산을 위해 cgroup 준비에 설명된 대로 상위 제어 그룹 및 하위 제어 그룹에서
cpu 및 cpu
set
절차
제어 그룹 내에서 리소스 제한을 달성하도록 원하는 CPU 가중치를 구성합니다.
# echo "150" > /sys/fs/cgroup/Example/g1/cpu.weight # echo "100" > /sys/fs/cgroup/Example/g2/cpu.weight # echo "50" > /sys/fs/cgroup/Example/g3/cpu.weight
애플리케이션의 PID를
g1, g
2 및 g
3
하위 그룹에 추가합니다.# echo "33373" > /sys/fs/cgroup/Example/g1/cgroup.procs # echo "33374" > /sys/fs/cgroup/Example/g2/cgroup.procs # echo "33377" > /sys/fs/cgroup/Example/g3/cgroup.procs
예제 명령을 사용하면 원하는 애플리케이션이
예제/g*/
하위 cgroups의 멤버가 되고 해당 cgroups의 구성에 따라 CPU 시간이 배포됩니다.프로세스가 실행 중인 하위 cgroup(g
1
,
수준에서 요약됩니다. 그런 다음 CPU 리소스는 해당 가중치에 비례하여 배포됩니다.g2
, g3)의 가중치는 상위 cgroup(Example
)결과적으로 모든 프로세스가 동시에 실행되면 커널은 해당 cgroup의
cpu.weight 파일에 따라 각 CPU 시간을 비례합니다.
하위 cgroup cpu.weight
fileCPU 시간 할당 g1
150
~50% (150/300)
g2
100
~33% (100/300)
g3
50
~16% (50/300)
cpu.weight
컨트롤러 파일의 값은 백분율이 아닙니다.한 프로세스가 중단되어 cgroup
g2
에 실행 중인 프로세스가 없으면 계산에서는 cgroupg2
가 생략되고 cgroup g1 및 g
3
의 가중치만 줄어듭니다:하위 cgroup cpu.weight
fileCPU 시간 할당 g1
150
~75% (150/200)
g3
50
~25% (50/200)
중요하위 cgroup에 여러 개의 실행 중인 프로세스가 있는 경우 해당 cgroup에 할당된 CPU 시간이 해당 cgroup의 멤버 프로세스에 동일하게 배포됩니다.
검증
애플리케이션이 지정된 제어 그룹에서 실행되는지 확인합니다.
# cat /proc/33373/cgroup /proc/33374/cgroup /proc/33377/cgroup 0::/Example/g1 0::/Example/g2 0::/Example/g3
명령 출력에는
Example/g*/
하위 cgroup에서 실행되는 지정된 애플리케이션의 프로세스가 표시됩니다.제한된 애플리케이션의 현재 CPU 사용량을 검사합니다.
# top top - 05:17:18 up 1 day, 18:25, 1 user, load average: 3.03, 3.03, 3.00 Tasks: 95 total, 4 running, 91 sleeping, 0 stopped, 0 zombie %Cpu(s): 18.1 us, 81.6 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st MiB Mem : 3737.0 total, 3233.7 free, 132.8 used, 370.5 buff/cache MiB Swap: 4060.0 total, 4060.0 free, 0.0 used. 3373.1 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 33373 root 20 0 18720 1748 1460 R 49.5 0.0 415:05.87 sha1sum 33374 root 20 0 18720 1756 1464 R 32.9 0.0 412:58.33 sha1sum 33377 root 20 0 18720 1860 1568 R 16.3 0.0 411:03.12 sha1sum 760 root 20 0 416620 28540 15296 S 0.3 0.7 0:10.23 tuned 1 root 20 0 186328 14108 9484 S 0.0 0.4 0:02.00 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthread ...
참고명확한 설명을 위해 모든 예제 프로세스를 단일 CPU에서 실행하도록 했습니다. CPU 가중치는 여러 CPU에서 사용되는 경우에도 동일한 원칙을 적용합니다.
PID 33373, PID
33374 및
의 CPU 리소스가 해당 하위 cgroup에 할당된 가중치 150, 100, 50에 따라 할당되었습니다. 가중치는 각 애플리케이션의 CPU 시간을 약 50%, 33%, 16%에 해당합니다.PID 33
377
추가 리소스
- 제어 그룹 이해
- 커널 리소스 컨트롤러란
- cgroups-v2 마운트
- CPU 시간 분배를 위해 cgroup 준비
- 리소스 배포 모델
-
cgroups(7)
,sysfs(5)
도움말 페이지