단일 코어 시스템에 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 %가 효과 가 없습니다.
일반적으로 리소스 공유 cgexec
와 관련하여 시작된 프로세스와 상호 작용 하지 않고 시작된 프로세스가 어떻게 작동하는지 이해하고 싶습니다 cgexec
(특히 CPU이지만 너무 복잡하지 않은 경우 더 일반적인 답변을 주시면 감사하겠습니다).
top
하고 나는 그들이 프롬프트 명령에서 매우 간단하게 시작했다 믿습니다 cgexec -g cpu:foo myprogram
와 ./myprogram
. 오랜 시간이 지났으므로 확실하게 기억하지 못합니다.
cpu.shares
매우 독특한 구성 옵션입니다. 가능한 경우 cpuset.cpus
대신 CPU를 사용하여 분할하는 것이 좋습니다 .