단일 코어 머신에 3개의 프로세스가 있습니다. 각 프로세스는 동일하며 가능한 한 빨리 CPU를 소모합니다(긴 루프). 그 중 두 개( A
및 B
)는 공유가 512와 512로 설정된 서로 다른 그룹의 cgexec를 통해 시작되었습니다. 세 번째 항목( C
)은 cgexec를 통하지 않고 주기적으로 시작됩니다.
모두 실행되면 C
CPU의 66%를 차지하고 33%가 A
할당됩니다 . B
내가 죽이면 C
각각은 (예상대로) 50%를 얻습니다.A
B
왜 C
66%를 얻나요? 이 경우에는 각각 33%, 또는 50%(C), 25%(A), 25%(B)를 예상합니다. C
아무리 계산해도 66%는 안됐어요.
cgexec
일반적으로 시작된 프로세스와 상호 작용하지 않고 시작된 프로세스가 리소스 공유 측면에서 어떻게 시작되는지 이해하고 싶습니다(구체적으로 CPU이지만 너무 복잡하지 않다면 좀 더 일반적인 답변을 주시면 감사하겠습니다) .cgexec
답변1
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%가 되어야 합니다.