ユーザの使用可能なコア数を制限するために、cgroupを使用することに決めました。グループを作成することで、cpu.shares
の番号を設定する必要があります。システムに32コアがあると仮定し、ユーザーを4コアのみに制限したいとします。そのパラメータの正しい値は何ですか?ユーザのCPU数を制限する
私が理解する限り、合計CPU時間が3200であるため、400を使用する必要があります。正しいですか?
ユーザの使用可能なコア数を制限するために、cgroupを使用することに決めました。グループを作成することで、cpu.shares
の番号を設定する必要があります。システムに32コアがあると仮定し、ユーザーを4コアのみに制限したいとします。そのパラメータの正しい値は何ですか?ユーザのCPU数を制限する
私が理解する限り、合計CPU時間が3200であるため、400を使用する必要があります。正しいですか?
まず、cpu.shares
には、のハードコア数が設定されていないことがわかります。コアの数に制限があります。これは、CFSスケジューラで消費されたCPUリソースを考慮に入れるために使用される汎用パラメータです。
I.e.システム内に2つのアプリケーションが両方とも1秒のCPU時間を費やした場合、CFSはvruntime
を10 /cpu.shares
に設定します。したがって、両方のCPU時間が必要です。
さて、あなたは調整する場合は小さい値にcpu.shares
(すなわち128
)最初のアプリケーションのために、それが得るvruntime
= 10 /128 = 7.8 * 10 、一方、第2の1(株式の未調整値) vruntime
= 10 /1024 = 0.9 * 10 となります。 vruntime
のプロセスがCPUで最初に実行されるように選択されるため、CPUが最初のアプリケーションに与えられない限り、2番目のアプリケーションは7秒以上実行されます。
この優先度は、2番目のCPU貪欲型アプリケーションの存在下でのみ機能することに注意してください。 「限られた」ユーザーのアプリケーションだけが動作している場合、CFSスケジューラはそれらをCPUに置くため、32のコアすべてを占有することができます。
は最後に、最初の質問に答える、あなたのタスクは、純粋に数学的である:
x 4
-------- = ----
1024 + x 32
あなたはcpu.shares
に設定する必要があります。
これはCPUの数を制限しませんでした。私の新しいトピックhttp://unix.stackexchange.com/questions/270938をご覧ください – mahmood
この質問を見たことがありますか?http://serverfault.com/questions/603861/limit-user-to-n-cpu-cores – SMohan
私はhttp://unix.stackexchange.com/を見ていました。あなたはniceとcgroupの違いは何ですか? – mahmood