cgroupはcgroup化されていないプロセスとどのように相互作用しますか?


12

シングルコアマシンに3つのプロセスがあります。各プロセスはまったく同じであり、CPUを可能な限り高速で焼き付けます(タイトループ)。それらのうちの2つ(AおよびB)は、共有を512および512に設定したcgexecで個別のグループで起動されます。3番目(C)は、cgexecではなく定期的に起動されます。

すべてが稼働するとC、CPUの66%を取得しAB33%を分割します。殺してC、それぞれ50%AB得ると(予想どおり)。

なぜC66%を獲得するのですか?このシナリオではそれぞれ33%、または50%(C)、25%(A)、25%(B)を期待していました。Cしかし、66%が私が数学をどのように実行してもうまくいきません。

一般に、リソース共有(特にCPUですが、あまり複雑ではない場合はより一般的な答えがありcgexecます)で起動されるプロセスと対話せずに起動されるプロセスを理解したいと思いcgexecます。


まず、CPU使用率をどのように測定しますか?A、B、Cを実行する優先順位は何ですか?
-KWubbufetowicz

私はCPU使用率を測定しtopていたと信じており、それらはコマンドプロンプトからかなり簡単に開始されたと信じています:cgexec -g cpu:foo myprogram./myprogram。しばらく経ちましたので、確実に覚えていません。
ミカゾルトゥ16

myprogramが複数のスレッド/ processを使用する場合がありますか?ところで、あなたはまだこの問題を解決することに興味がありますか?
-KWubbufetowicz

このプログラムは、この動作をテストするためだけに作成されたテストアプリケーションです。結果を絞り込むために意図的にシングルスレッド化されました。私はまだこの質問に対する答えに興味があります。
ミカゾルトゥ16

ここでは、RedHatのこのページが役立ちます。 cpu.shares非常に独特な設定オプションです。可能であればcpuset.cpus代わりにCPUごとに分割することをお勧めします。
ワイルドカード

回答:


3

cgroupは階層的であり、すべてのサブプロセスに継承されます。したがって、すべてのプロセスは何らかのcgroupに属している必要があります。デフォルトでは、これはルートcgroupであり、デフォルトでは、1024個の共有があり、これは例のAとBの2倍です。

CPU時間は、cpu.sharesで割り当てられた重みに従ってcgroup間で共有されます。

Aに1024のシェアがあり、B 512およびC 256およびD 256の場合、CPU時間分布はA-50%、B-25%、CおよびD 12,5%になります。


したがって、cgexecで起動されないプロセスは、1024個の共有を持つルートcgroupにあり、すべての直接の子に均等に分割されます。そのような直接の子の1つは、を呼び出して生成されたcgroup cgexecです。したがって、非cgexecプロセスは50%を取得し、cgroupedプロセスはすべて残りの50%を共有します。cgroup化されたプロセス内で、50%を均等に共有します。つまり、両方とも25%を取得します。これは理にかなっていますが、私が観察した動作ではありません。私が見たのは66%、33%、33%です。回答を更新して、より詳細な情報やおそらくサンプル配布を含めることはできますか?
ミカゾルトゥ16年

ああ、そうだと思う。OS上のプロセスは、cgexec1024の共有を取得せずに起動します。で起動されたプロセスcgexecは、指定された共有を取得します。したがって、この場合、1つのプロセスは1024の共有を取得し、他の2つのプロセスはそれぞれ512の共有を取得します。例などを使用して、回答を更新してもう少しわかりやすくしますか?
ミカゾルトゥ16年

実際、それでもまだ足りません。 1024 + 512 + 512 = 2048512/2048 == 25%。少なくとも表面的には、この答えが実際に正しいとは思わない。
ミカゾルトゥ16年

他にcgroupがありますか?数値に影響する場合があります。あなたはまた、RedHatのドキュメントを確認することができ、THERはsimmilar例ですaccess.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/...
Lazy404

重要なことは何も実行されていません。テスト実行の前後にボックスはアイドル状態でした。すべての例は、すべてのプロセスがcgroupsセットアップで開始されたときに何が起こるかを示しています。一部のプロセスがcgroupを使用していないときに何が起こるかについては説明していません。
ミカゾルトゥ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.