cgroup은 cgroup이 아닌 프로세스와 어떻게 상호 작용합니까?

cgroup은 cgroup이 아닌 프로세스와 어떻게 상호 작용합니까?

단일 코어 머신에 3개의 프로세스가 있습니다. 각 프로세스는 동일하며 가능한 한 빨리 CPU를 소모합니다(긴 루프). 그 중 두 개( AB)는 공유가 512와 512로 설정된 서로 다른 그룹의 cgexec를 통해 시작되었습니다. 세 번째 항목( 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의 두 배입니다.

CPU 시간은 cpu.shares의 cgroup에 할당된 가중치를 기반으로 cgroup 간에 공유됩니다.

A의 공유가 1024개, B의 공유가 512개, C의 공유가 256개, D의 공유가 256개인 경우 CPU 시간 분포는 A - 50%, B - 25%, C 및 D는 12.5%가 되어야 합니다.

관련 정보