10.2. CPU 가중치를 조정하여 애플리케이션의 CPU 시간 분배 제어
CPU 시간을 애플리케이션에 규제하려면 cgroup 트리에서 cpu 컨트롤러의 관련 파일에 가중치를 할당합니다.
사전 요구 사항
- 시스템에 대한 root 권한이 있습니다.
- CPU 시간 배포를 제어하려는 애플리케이션이 있습니다.
-
cgroups-v2파일 시스템을 마운트했습니다. 다음 예제와 같이
/sys/fs/cgroup/root 제어 그룹 내에 하위 제어 그룹의 두 수준 계층 구조를 생성했습니다.... ├── Example │ ├── g1 │ ├── g2 │ └── g3 ...-
cgroup 생성 및 cgroups-v2 파일 시스템에서 컨트롤러 활성화에 설명된 대로 상위 제어 그룹 및 하위 제어 그룹에서
cpu컨트롤러 를 활성화했습니다.
프로세스
제어 그룹 내에서 리소스 제한을 달성하도록 필요한 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 표 10.1. 모든 프로세스가 실행되는 CPU 시간 할당 하위 cgroup cpu.weight파일CPU 시간 할당 g1
150
~50% (150/300)
g2
100
~33% (100/300)
g3
50
~16% (50/300)
cpu.weight컨트롤러 파일의 값은 백분율이 아닙니다.하나의 프로세스가 실행을 중단하고 cgroup
g2를 실행 중인 프로세스 없이 그대로 두면 계산에서 cgroupg2및의 계정 가중치만 생략합니다.g3Expand 표 10.2. g2 프로세스 없이 CPU 시간 할당 하위 cgroup cpu.weight파일CPU 시간 할당 g1
150
~75% (150/200)
g3
50
~25% (50/200)
중요하위 cgroup에 실행 중인 프로세스가 여러 개 있는 경우 cgroup에 할당된 CPU 시간이 멤버 프로세스 간에 균등하게 배포됩니다.
검증
애플리케이션이 지정된 제어 그룹에서 실행되는지 확인합니다.
# cat /proc/33373/cgroup /proc/33374/cgroup /proc/33377/cgroup0::/Example/g1 0::/Example/g2 0::/Example/g3명령 출력에는
Example/g*/하위 cgroup에서 실행되는 지정된 애플리케이션의 프로세스가 표시됩니다.제한된 애플리케이션의 현재 CPU 사용을 검사합니다.
# toptop - 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 시간 할당에 해당합니다.