2016-03-19 22 views
0

ユーザの使用可能なコア数を制限するために、cgroupを使用することに決めました。グループを作成することで、cpu.sharesの番号を設定する必要があります。システムに32コアがあると仮定し、ユーザーを4コアのみに制限したいとします。そのパラメータの正しい値は何ですか?ユーザのCPU数を制限する

私が理解する限り、合計CPU時間が3200であるため、400を使用する必要があります。正しいですか?

+0

この質問を見たことがありますか?http://serverfault.com/questions/603861/limit-user-to-n-cpu-cores – SMohan

+0

私はhttp://unix.stackexchange.com/を見ていました。あなたはniceとcgroupの違いは何ですか? – mahmood

答えて

1

まず、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 に設定する必要があります。

+0

これはCPUの数を制限しませんでした。私の新しいトピックhttp://unix.stackexchange.com/questions/270938をご覧ください – mahmood

関連する問題