CPU cgroupでcpu.cpu_quota_usを設定するとどうなりますか?

CPU cgroupでcpu.cpu_quota_usを設定するとどうなりますか?

cpu.cpu_quota_uscgroupサブシステムの設定がアプリケーションのパフォーマンスに影響するかどうかを理解したいと思います。cpuデフォルトでは、CPUクォータは減少しますが、「有効な」CPUは依然として同じになるようにCPUの数を増やす必要があります。これはアプリケーションに影響しますか?たとえば、4つのCPU 100%クォータ設定は、8つのCPU 50%クォータ設定と同じですか?

私はこれがアプリケーション設計とCPUかIOバインディングに大きく依存することを知っています。ここでは、CPU集約的なアプリケーションにのみ興味を持っています。

私の努力:

ここで見つけることができる簡単なCアプリケーションを作成しました。https://github.com/ashu-mehra/cpu-quota-test

プログラムは「N」個のスレッドを生成する。各スレッドは、数字「n」から1000000までの素数計算を開始します。開始番号「n」はスレッドごとに異なります。 100個の素数を計算した後、スレッドは一定時間省電力モードになります。スレッドが1,000,000個に達したら、2から再開します。最後に、メインスレッドは、各スレッドによって計算された少数の累積数を表示します。私はこれがこのサンプルアプリケーションの「処理量」だと思います。

次の構成でプログラムを実行しています。

  1. CPUが4つ、クォータ制限がないcgroupから。
  2. CPUが8個、クォータが50%のcgroupから。

/sys/devices/system/cpu/cpu/online`を0に設定してハイパースレッディングを無効にしました。

各構成では、スレッド数を4から32に変更しました。以下は、サンプルプログラムによって生成された「処理量」の結果です。数字は10回の繰り返しの平均です。

スレッドCPU4quota100 CPU8quota50
4 66229.5 66079.4
8 128129 129768
16 189247 134882
24 188238 98917.8
32 176236 87252.5

スレッド16から開始すると、2つのケース間のスループットに大きな差がある。 「cpu8quota50」ケースのスループットは、24スレッドと32スレッドから大幅に低下します。

私もperf statこれらの実行の結果を持っています。私はcpu-migrations2つの構成perfの間に大きな違いを見つけました。これは比較です

スレッドCPU4quota100 CPU8quota50
4 9.6 11.2
8 3252.2 37.9
16 2956.2 4490.5
24472.6 2347
32118.3 1727.2

スレッド4、8、16の数字は意味がありますが、「cpu4quota100」のケースでは、スレッド24と32の数字は理解できません。スレッド16の場合よりはるかに小さいからです。

誰かがこの結果を説明できますか?また、「CPUの移行」がアプリケーションのパフォーマンスに影響しますか?

文が長くなってすみません!

編集1:

上記のサンプルプログラムを実行するスクリプトを更新して、time「cpu4quota100」と「cpu8quota50」のケースの間に違いがあるかどうかを確認するために、コマンドを使用して実行時間を決定しました。 32個のスレッドのみを実行しましたが、結果は次のとおりです。

時間CPU4quota100 CPU8quota50
ユーザー 119.956秒 120.076秒
システム0.001秒0.009秒
CPU 386.2% 386.5%

userしたがって、2つのケースの時間とタイミングの違いはそれほど大きくはありませんが、sys「処理量」はcpu4quota1002倍高いですcpu8quota50

編集2:

CPU周波数を変更するカーネルガバナーは、cpu8quota50ケーススループットの向上に役立つようです。初期データは周波数調整器「省電力」を用いて得た。 「省電力」条件では、コアのCPU周波数はcpu4quota100最大値に達しますが、cpu8quota50実際にははるかに低いです。ただし、周波数レギュレータを「パフォーマンス」に変更した後cpu8quota50、その場合はCPU周波数も最大値に近づきました。 「パフォーマンス」を周波数ガバナーとして実行する32スレッドの場合は、次の数字を取得します。

スレッドCPU4quota100 CPU8quota50
32 175804 163831

その結果、その差は現在、ほぼ50%から6.8%に減少しました。

しかし、上記の2つのケースでは、「スリープ」レギュレータの動作に違いがあることは興味深いです。cpu8quota50もし予想通りに動作するのか分からない。

ベストアンサー1

おすすめ記事