컨테이너를 전체 시스템 CPU 대역폭의 25%로 제한하고 싶습니다.
이것은 내 설정입니다.
- LXC 버전 1.0.2
- 커널 3.2.45
- 사용자가 LXC 컨테이너에 대해 cgroup(foo)을 생성했습니다.
- 호스트에서 사용 가능한 코어는 40개입니다.
- 호스트와 컨테이너에는 다음을 제외한 다른 모든 cgroup 하위 시스템에 대한 기본값이 있습니다.
/sys/fs/cgroup/cpu/lxc/foo/cpu.cfs_quota_us = 400000
/sys/fs/cgroup/cpu/lxc/foo/cpu.cfs_period_us = 100000
/sys/fs/cgroup/cpuset/lxc/foo/cpuset.cpus = 0-15
다음 공식을 사용하여 할당량을 계산했습니다.
(# of cpus available to container) * (cpu.cfs_period_us) * (.25) so 16 * 100000 * .25 = 400000
컨테이너 내부와 외부 모두에서 기본 스트레스를 실행하여 내부와 외부에서 허용되는 초당 작업 수를 측정했는데 결과는 기본적으로 할당량 없음을 의미하는 할당량 "-1"로 실행한 것과 동일했습니다.
밖에서 달리기:
$ ./stress-ng --cpu-load 50 -c 40 --timeout 20s --metrics-brief
stress-ng: info: [25649] dispatching hogs: 40 cpu
stress-ng: info: [25649] successful run completed in 20.44s
stress-ng: info: [25649] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s
stress-ng: info: [25649] (secs) (secs) (secs) (real time) (usr+sys time)
stress-ng: info: [25649] cpu 37348 20.18 380.56 0.58 1850.85 97.99
내부 실행:
$ ./stress-ng --cpu-load 100 -c 16 --timeout 20s --metrics-brief
stress-ng: info: [34256] dispatching hogs: 16 cpu
stress-ng: info: [34256] successful run completed in 20.10s
stress-ng: info: [34256] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s
stress-ng: info: [34256] (secs) (secs) (secs) (real time) (usr+sys time)
stress-ng: info: [34256] cpu 24147 20.03 205.20 0.17 1205.67 117.58
연산 결과에 따르면 39%를 얻었습니다. 왜 이런 일이 발생합니까? 제한하면 안되는거 아닌가요 cpu.cfs_quota_us
?
귀하의 도움에 미리 감사의 말씀을 전하고 싶습니다.
답변1
다른 사람이 비슷한 혼란스러운 결과를 볼 경우를 대비하여 이 질문에 대한 답변을 게시하고 싶었습니다. 두 가지 질문이 있는 것 같습니다.
CPU 대역폭을 추정하려면 cgroups cpuset에서 사용 가능한 CPU 수가 아닌 호스트의 CPU 수를 사용해야 합니다.
(# of cpus on the host) * (cpu.cfs_period_us) * (.25) so 40 * 100000 * .25 = 1000000
컨테이너 내부에서 실행되는 내 스트레스 ng는 /lxc/foo cgroup의 cpu 및 cpuset 컨트롤러를 사용하는 반면, 컨테이너 외부에서 실행되는 스트레스 ng는 /system/sshd.service cgroup을 사용합니다.
실제 응용 프로그램을 더 잘 시뮬레이션하려면 다음을 사용하여 사용할 컨트롤러를 지정해야 합니다.프로그램 실행:
$ cgexec -g cpuset:/lxc/foo -g cpu:/lxc/foo ./stress-ng --cpu-load 100 -c 48 --times --timeout 10s --metrics-brief
stress-ng: info: [6252] dispatching hogs: 48 cpu
stress-ng: info: [6252] successful run completed in 10.36s
stress-ng: info: [6252] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s
stress-ng: info: [6252] (secs) (secs) (secs) (real time) (usr+sys time)
stress-ng: info: [6252] cpu 11152 10.09 102.83 0.12 1105.60 108.32
stress-ng: info: [6252] for a 10.36s run time:
stress-ng: info: [6252] 414.46s available CPU time
stress-ng: info: [6252] 102.85s user time ( 24.82%)
stress-ng: info: [6252] 0.12s system time ( 0.03%)
stress-ng: info: [6252] 102.97s total time ( 24.84%)