35.2. CPU 가중치를 조정하여 애플리케이션의 CPU 시간 분배 제어
특정 cgroup 트리의 애플리케이션에 CPU 시간 배포를 규제하려면 cpu
컨트롤러의 관련 파일에 값을 할당해야 합니다.
사전 요구 사항
- 루트 권한이 있어야 합니다.
- CPU 시간 분배를 제어하려는 애플리케이션이 있습니다.
다음 예제와 같이
/sys/fs/cgroup/
root 제어 그룹 내에 하위 제어 그룹 의 두 가지 수준 계층을 생성했습니다.… ├── Example │ ├── g1 │ ├── g2 │ └── g3 …
-
cgroup 생성에 설명된 대로 상위 제어 그룹 및 하위 제어 그룹에서
cpu
컨트롤러를 활성화하여 cgroups-v2 파일 시스템에서 컨트롤러를 활성화합니다.
절차
제어 그룹 내에서 리소스 제한을 달성하도록 원하는 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
,g2
,g3
하위 그룹에 추가합니다.# 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
예제 명령을 사용하면 원하는 애플리케이션이
Example/g*/
하위 cgroup의 멤버가 되고 해당 cgroups의 구성에 따라 CPU 시간을 분산시킵니다.프로세스를 실행 중인 하위 cgroup(
g1
,g2
,g3
)의 가중치는 상위 cgroup 수준(예
)으로 요약됩니다. 그런 다음 CPU 리소스는 각각의 가중치에 따라 비례분산됩니다.결과적으로 모든 프로세스가 동시에 실행될 때 커널은 각각의 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
및g3
의 계정 가중치만 생략됩니다.하위 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*/
하위 cgroups에서 실행되는 지정된 애플리케이션의 프로세스가 표시됩니다.스로틀된 애플리케이션의 현재 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 weight는 여러 CPU에서 사용되는 경우에도 동일한 원칙을 적용합니다.
PID 33373
,PID 33374
,PID 33377
의 CPU 리소스가 각 하위 cgroup에 할당한 가중치인 150, 100, 50을 기반으로 할당되었습니다. 가중치는 약 50%, 33%, 각 애플리케이션에 대한 CPU 시간이 16%에 해당합니다.
추가 리소스
- 제어 그룹 이해
- 커널 리소스 컨트롤러란?
- cgroup 생성 및 cgroups-v2 파일 시스템에서 컨트롤러 활성화
- 리소스 배포 모델
-
cgroups ImageCon
,sysfs(5)
매뉴얼 페이지