我在单核机器上有 3 个进程。每个进程都完全相同,并且尽可能快地消耗 CPU(紧密循环)。其中两个 (A和B) 使用 cgexec 在不同的组中启动,共享设置为 512 和 512。第三个 ( C) 定期启动,而不是使用 cgexec。
一旦所有的启动和运行,C得到CPU,而66%A和B分裂33%。如果我杀了C,然后A和B获得各50%(预期)。
为什么会C得到66%?在这种情况下,我预计各为 33%,或者可能为 50% (C)、25% (A) 和 25% (B)。C不管我如何计算,66% 的结果都行不通。
一般来说,我想了解在资源共享(特别是 CPU,但如果不是太复杂的话,更通用的答案)时cgexec,进程是如何在不与启动的进程交互的情况下启动的cgexec。
Cgroup 是分层的,并且由所有子进程继承。因此所有进程都必须位于某个 cgroup 中。默认情况下,它是根 cgroup,默认情况下它有 1024 个共享,是示例中 A 和 B 的两倍。
CPU 时间根据 cpu.shares 中分配给 cgroup 的权重在 cgroup 之间共享。
如果 A 有 1024 个共享,B 有 512 个共享,C 有 256 个共享,D 有 256 个共享,则 CPU 时间分布应为 A - 50%、B - 25%、C 和 D 12.5%。
| 归档时间: |
|
| 查看次数: |
753 次 |
| 最近记录: |