27.2. CPU 가중치를 조정하여 애플리케이션의 CPU 시간 분배 제어
CPU 시간을 특정 cgroup 트리의 애플리케이션에 분산하기 위해 CPU 컨트롤러 의 관련 파일에 값을 할당해야 합니다.
사전 요구 사항
- 루트 권한이 있습니다.
- CPU 시간 배포를 제어하려는 애플리케이션이 있습니다.
다음 예와 같이
/sys/fs/cgroup/root 제어 그룹 내에 하위 제어 그룹의 두 가지 수준 계층 구조를 생성했습니다.… ├── Example │ ├── g1 │ ├── g2 │ └── g3 …-
상위 제어 그룹 및 하위 제어 그룹에서
cpu컨트롤러를 활성화하여 cgroup 생성 및 cgroup-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예제 명령을 사용하면 원하는 애플리케이션이
예제/g*/하위 cgroups의 멤버가 되고 해당 cgroups의 구성에 따라 CPU 시간이 배포됩니다.프로세스가 실행 중인 하위 cgroup(g
1,수준에서 요약됩니다. 그런 다음 CPU 리소스는 해당 가중치에 비례하여 배포됩니다.g2, g3)의 가중치는 상위 cgroup(Example)결과적으로 모든 프로세스가 동시에 실행되면 커널은 해당 cgroup의
cpu.weight 파일에 따라 각 CPU 시간을 비례합니다.Expand 하위 cgroup cpu.weightfileCPU 시간 할당 g1
150
~50% (150/300)
g2
100
~33% (100/300)
g3
50
~16% (50/300)
cpu.weight컨트롤러 파일의 값은 백분율이 아닙니다.한 프로세스가 중단되어 cgroup
g2에 실행 중인 프로세스가 없으면 계산에서는 cgroupg2가 생략되고 cgroup g1 및 g3의 가중치만 줄어듭니다:Expand 하위 cgroup cpu.weightfileCPU 시간 할당 g1
150
~75% (150/200)
g3
50
~25% (50/200)
중요하위 cgroup에 실행 중인 프로세스가 여러 개 있는 경우 cgroup에 할당된 CPU 시간이 멤버 프로세스 간에 균등하게 배포됩니다.
검증
애플리케이션이 지정된 제어 그룹에서 실행되는지 확인합니다.
# 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 weight는 여러 CPU에서 사용할 때 동일한 원칙을 적용합니다.
PID 33373,PID 33374및PID 33377의 CPU 리소스가 해당 하위 cgroup에 할당한 150, 100 및 50 개의 가중치를 기반으로 할당되었습니다. 가중치는 각 애플리케이션의 CPU 시간을 약 50%, 33%, 16%에 해당합니다.