24.4. CPU 가중치를 조정하여 애플리케이션의 CPU 시간 분배 제어
cpu 컨트롤러의 관련 파일에 값을 할당하여 특정 cgroup 트리 아래의 애플리케이션에 CPU 시간 배포를 규제해야 합니다.
사전 요구 사항
- root 권한이 있습니다.
- CPU 시간 배포를 제어하려는 애플리케이션이 있습니다.
- 관련 애플리케이션이 CPU 시간 배포를 위해 cgroup 준비에 설명된 대로 동일한 CPU에서 CPU 시간 경쟁을 보장했습니다.
-
cgroups-v2마운트에 설명된 대로 cgroups-v2 파일 시스템을 마운트했습니다. 다음 예제와 같이
/sys/fs/cgroup/root 제어 그룹 내에 하위 제어 그룹의 두 수준 계층 구조를 생성했습니다.… ├── Example │ ├── g1 │ ├── g2 │ └── g3 …-
상위 제어 그룹 및 하위 제어 그룹에서
cpu및cpuset컨트롤러를 활성화했습니다. CPU 시간 배포를 위해 cgroup 준비에 설명된 것과 유사하게 하위 제어 그룹에서도 됩니다.
프로세스
제어 그룹 내에서 리소스 제한을 달성하도록 원하는 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*/하위 cgroups의 멤버가 되도록 하며 해당 cgroup 구성에 따라 CPU 시간을 배포합니다.실행 중인 프로세스가 있는 하위 cgroup의 가중치(
g1,g2,g3)는 상위 cgroup 수준(예)으로 요약됩니다. 그러면 CPU 리소스가 가중치에 따라 비례적으로 배포됩니다.결과적으로 모든 프로세스가 동시에 실행되면 커널은 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및의 계정 가중치만 생략합니다.g3Expand 하위 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 개의 가중치를 기반으로 할당되었습니다. 가중치는 각 애플리케이션에 대해 약 50%, 33%, CPU 시간 할당에 해당합니다.