23.4. cgroups-v1을 사용하여 CPU 제한 설정
제어 그룹 버전 1 (cgroups-v
1)을 사용하여 애플리케이션에 대한 CPU 제한을 구성하려면 /sys/fs/
가상 파일 시스템을 사용합니다.
사전 요구 사항
- 루트 권한이 있습니다.
- 제한하려는 CPU 사용량이 있는 애플리케이션이 있습니다.
cgroups-v1
컨트롤러가 마운트되었는지 확인합니다.# mount -l | grep cgroup tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755) cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpu,cpuacct) cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event) cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids) ...
절차
CPU 소비에서 제한하려는 애플리케이션의 PID(프로세스 ID)를 식별합니다.
# top top - 11:34:09 up 11 min, 1 user, load average: 0.51, 0.27, 0.22 Tasks: 267 total, 3 running, 264 sleeping, 0 stopped, 0 zombie %Cpu(s): 49.0 us, 3.3 sy, 0.0 ni, 47.5 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st MiB Mem : 1826.8 total, 303.4 free, 1046.8 used, 476.5 buff/cache MiB Swap: 1536.0 total, 1396.0 free, 140.0 used. 616.4 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6955 root 20 0 228440 1752 1472 R 99.3 0.1 0:32.71 sha1sum 5760 jdoe 20 0 3603868 205188 64196 S 3.7 11.0 0:17.19 gnome-shell 6448 jdoe 20 0 743648 30640 19488 S 0.7 1.6 0:02.73 gnome-terminal- 1 root 20 0 245300 6568 4116 S 0.3 0.4 0:01.87 systemd 505 root 20 0 0 0 0 I 0.3 0.0 0:00.75 kworker/u4:4-events_unbound ...
top
프로그램의 이 예제 출력에서는PID 6955
가 있는 애플리케이션sha1sum
이 많은 CPU 리소스를 사용한다는 것을 보여줍니다.cpu
리소스 컨트롤러 디렉터리에 하위 디렉터리를 생성합니다.# mkdir /sys/fs/cgroup/cpu/Example/
이 디렉터리는 특정 프로세스를 배치하고 프로세스에 특정 CPU 제한을 적용할 수 있는 제어 그룹을 나타냅니다. 동시에 여러
cgroups-v1
인터페이스 파일과cpu
컨트롤러별 파일이 디렉터리에 생성됩니다.선택 사항: 새로 생성된 제어 그룹을 검사합니다.
# ll /sys/fs/cgroup/cpu/Example/ -rw-r—r--. 1 root root 0 Mar 11 11:42 cgroup.clone_children -rw-r—r--. 1 root root 0 Mar 11 11:42 cgroup.procs -r—r—r--. 1 root root 0 Mar 11 11:42 cpuacct.stat -rw-r—r--. 1 root root 0 Mar 11 11:42 cpuacct.usage -r—r—r--. 1 root root 0 Mar 11 11:42 cpuacct.usage_all -r—r—r--. 1 root root 0 Mar 11 11:42 cpuacct.usage_percpu -r—r—r--. 1 root root 0 Mar 11 11:42 cpuacct.usage_percpu_sys -r—r—r--. 1 root root 0 Mar 11 11:42 cpuacct.usage_percpu_user -r—r—r--. 1 root root 0 Mar 11 11:42 cpuacct.usage_sys -r—r—r--. 1 root root 0 Mar 11 11:42 cpuacct.usage_user -rw-r—r--. 1 root root 0 Mar 11 11:42 cpu.cfs_period_us -rw-r—r--. 1 root root 0 Mar 11 11:42 cpu.cfs_quota_us -rw-r—r--. 1 root root 0 Mar 11 11:42 cpu.rt_period_us -rw-r—r--. 1 root root 0 Mar 11 11:42 cpu.rt_runtime_us -rw-r—r--. 1 root root 0 Mar 11 11:42 cpu.shares -r—r—r--. 1 root root 0 Mar 11 11:42 cpu.stat -rw-r—r--. 1 root root 0 Mar 11 11:42 notify_on_release -rw-r—r--. 1 root root 0 Mar 11 11:42 tasks
이 예제 출력은
예제
제어 그룹의 프로세스에 대해 설정할 수 있는 특정 구성 및/또는 제한을 나타내는cpuacct.usage
,cpu.cfs._period_us
와 같은 파일을 보여줍니다. 각 파일 이름 앞에는 자신이 속한 제어 그룹 컨트롤러의 이름이 접두어 있습니다.기본적으로 새로 생성된 제어 그룹은 제한 없이 시스템의 전체 CPU 리소스에 대한 액세스를 상속합니다.
제어 그룹에 대한 CPU 제한을 구성합니다.
# echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us # echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us
-
cpu.cfs_period_us
파일은 제어 그룹의 CPU 리소스에 대한 액세스를 재할당해야 하는 빈도에 대한 마이크로초(여기에서 "us"로 표시되는 시간)를 나타냅니다. 상한은 1 000 마이크로초이며 더 낮은 제한은 1 000 마이크로초입니다. cpu.cfs_quota_us
파일은 제어 그룹의 모든 프로세스가 하나의 기간(cpu.cfs_period_us에서 정의한 대로) 동안 실행되는 총 시간(마이크로초)을 나타냅니다.
단일 기간 동안 제어 그룹의 프로세스가 할당량에 의해 지정된 모든 시간을 사용하는 경우 나머지 기간 동안 제한되며 다음 기간까지 실행되지 않습니다. 낮은 제한은 1000 마이크로초입니다.위의 예제 명령은 CPU 시간 제한을 설정하여
Example
제어 그룹에서 집계된 모든 프로세스가 1초(cpu.cfs_quota_us로 정의됨)마다 0.2초(cpu.cfs_
period_us
로 정의됨) 동안만 실행할 수 있습니다.
-
선택 사항: 제한을 확인합니다.
# cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000
Example
제어 그룹에 애플리케이션의 PID를 추가합니다.# echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procs
이 명령은 특정 애플리케이션이
Example
제어 그룹의 멤버가 되도록 하여Example
제어 그룹에 구성된 CPU 제한을 초과하지 않습니다. PID는 시스템의 기존 프로세스를 나타냅니다. 여기서PID 6955
는cpu
컨트롤러의 사용 사례를 설명하는 데 사용되는sha1sum /dev/zero &
amp; 를 처리하도록 할당되었습니다.
검증
애플리케이션이 지정된 제어 그룹에서 실행되는지 확인합니다.
# cat /proc/6955/cgroup 12:cpuset:/ 11:hugetlb:/ 10:net_cls,net_prio:/ 9:memory:/user.slice/user-1000.slice/user@1000.service 8:devices:/user.slice 7:blkio:/ 6:freezer:/ 5:rdma:/ 4:pids:/user.slice/user-1000.slice/user@1000.service 3:perf_event:/ 2:cpu,cpuacct:/Example 1:name=systemd:/user.slice/user-1000.slice/user@1000.service/gnome-terminal-server.service
이 예제 출력은 원하는 애플리케이션의 프로세스가
Example
제어 그룹에서 실행되므로 애플리케이션의 프로세스에 CPU 제한을 적용합니다.제한된 애플리케이션의 현재 CPU 사용량을 식별합니다.
# top top - 12:28:42 up 1:06, 1 user, load average: 1.02, 1.02, 1.00 Tasks: 266 total, 6 running, 260 sleeping, 0 stopped, 0 zombie %Cpu(s): 11.0 us, 1.2 sy, 0.0 ni, 87.5 id, 0.0 wa, 0.2 hi, 0.0 si, 0.2 st MiB Mem : 1826.8 total, 287.1 free, 1054.4 used, 485.3 buff/cache MiB Swap: 1536.0 total, 1396.7 free, 139.2 used. 608.3 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6955 root 20 0 228440 1752 1472 R 20.6 0.1 47:11.43 sha1sum 5760 jdoe 20 0 3604956 208832 65316 R 2.3 11.2 0:43.50 gnome-shell 6448 jdoe 20 0 743836 31736 19488 S 0.7 1.7 0:08.25 gnome-terminal- 505 root 20 0 0 0 0 I 0.3 0.0 0:03.39 kworker/u4:4-events_unbound 4217 root 20 0 74192 1612 1320 S 0.3 0.1 0:01.19 spice-vdagentd ...
PID 6955
의 CPU 사용량이 99 %에서 20%로 감소했습니다.
cpu.cfs_period_us
및 cpu.cfs_quota_us
에 해당하는 cgroups-v2
파일은 cpu.max
파일입니다. cpu.max
파일은 cpu
컨트롤러를 통해 사용할 수 있습니다.
추가 리소스
- 제어 그룹 이해
- 커널 리소스 컨트롤러는 무엇입니까.
-
cgroups(7)
,sysfs(5)
도움말 페이지