
コンテナをシステムの合計 CPU 帯域幅の 25% に制限したいと思います。
私の設定は次のとおりです。
- LXC バージョン 1.0.2
- カーネル 3.2.45
- 1人のユーザーが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
コンテナの内側と外側で同時に基本的な stress-ng を実行し、内側と外側で 1 秒あたりに許可されている操作の数を測定しましたが、結果は基本的に、クォータが「-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
ops/s に基づくと 39% になります。なぜこのようなことが起こるのでしょうか? 制限されるべきではないでしょうかcpu.cfs_quota_us
?
ご協力ありがとうございます。
答え1
他の人も同様の混乱した結果を見た場合に備えて、この質問に対する回答を投稿したいと思いました。 2 つの問題があったようです:
CPU 帯域幅を見積もるには、cgroup の cpuset 内の使用可能な CPU の数ではなく、ホスト上の CPU の数を使用する必要があります。
(# of cpus on the host) * (cpu.cfs_period_us) * (.25) so 40 * 100000 * .25 = 1000000
コンテナ内でのstress-ngの実行では、/lxc/foo cgroupのcpuとcpusetコントローラを使用していましたが、コンテナ外でのstress-ngの実行では、/system/sshd.service cgroupを使用していました。
実際のアプリケーションをより良くモデル化するには、どのコントローラーを使用するかを指定する必要がありました。cgexec:
$ 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%)