cgroupはcgroup以外のプロセスとどのようにやり取りするのですか?

cgroupはcgroup以外のプロセスとどのようにやり取りするのですか?

シングルコアマシンには3つのプロセスがあります。各プロセスは同じで、できるだけ早くCPUを消費します(長いループ)。そのうちの2つ(AおよびB)は、共有が512と512に設定されている異なるグループのcgexecを介して開始されました。 3番目の項目(C)はcgexecを介さずに定期的に開始されます。

すべて実行すると、CCPUの66%を占め、33%がA割り当てられます。B私が殺すとC、それぞれは(予想通り)50%を得ます。AB

なぜC66%を得るのですか?この場合、それぞれ33%、または50%(C)、25%(A)、25%(B)を予想します。Cいくら計算しても66%はダメです。

cgexec一般的に、開始されたプロセスと対話せずに、開始されたプロセスがリソース共有の観点からどのように開始されるかを理解したいと思います(具体的にはCPUですが、あまり複雑ではない場合は、より一般的な回答をいただきありがとうございます)。cgexec

答え1

Cgroup は階層的で、すべての子プロセスに継承されます。したがって、すべてのプロセスはcgroupに存在する必要があります。デフォルトではこれはルートcgroupであり、デフォルトでは1024の共有を持ち、これは例ではAとBの2倍です。

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

Aの共有が1024個、Bの共有が512個、Cの共有が256個、Dの共有が256個の場合、CPU時間分布はA - 50%、B - 25%、CおよびDは12.5%になるはずです。します。

関連情報