cgroup은 cgroup되지 않은 프로세스와 어떻게 상호 작용합니까?


12

단일 코어 시스템에 3 개의 프로세스가 있습니다. 각 프로세스는 정확히 동일하며 가능한 한 빨리 CPU를 굽습니다 (타이트 루프). 그 중 두 개 ( AB)는 cgexec를 사용하여 공유가 512 및 512로 설정된 별도 그룹으로 시작됩니다. 세 번째 ( C)는 cgexec가 아닌 정기적으로 시작됩니다.

모두가하고 실행되면 C는 CPU 동안의 66 % 취득 AB분할 33 %. 나는 죽일 경우 C다음 AB(예상대로)이 각각 50 %를 얻을.

C66 %를 얻습니까? 이 시나리오에서 각각 33 %, 또는 50 % (C), 25 % (A) 및 25 % (B)를 예상했을 것입니다. C내가 수학을 어떻게하든 66 %가 효과 가 없습니다.

일반적으로 리소스 공유 cgexec와 관련하여 시작된 프로세스와 상호 작용 하지 않고 시작된 프로세스가 어떻게 작동하는지 이해하고 싶습니다 cgexec(특히 CPU이지만 너무 복잡하지 않은 경우 더 일반적인 답변을 주시면 감사하겠습니다).


우선, CPU 사용률을 어떻게 측정하는지 궁금합니다. A, B 및 C를 실행하는 우선 순위는 무엇입니까?
KWubbufetowicz

내가와 CPU 사용량을 측정하고 생각 top하고 나는 그들이 프롬프트 명령에서 매우 간단하게 시작했다 믿습니다 cgexec -g cpu:foo myprogram./myprogram. 오랜 시간이 지났으므로 확실하게 기억하지 못합니다.
Micah Zoltu

myprogram이 단일 스레드 / 프로세스 이상을 사용하는 경우 일 수 있습니까? Btw이 문제를 해결하는 데 여전히 관심이 있습니까?
KWubbufetowicz

이 프로그램은이 동작을 테스트하기 위해 작성된 테스트 응용 프로그램이었습니다. 결과를 좁히기 위해 의도적으로 단일 스레드였습니다. 나는 여전히이 질문에 대한 답에 관심이 있습니다.
Micah Zoltu

RedHat의이 페이지가 여기에 도움이 될 수 있습니다. cpu.shares매우 독특한 구성 옵션입니다. 가능한 경우 cpuset.cpus대신 CPU를 사용하여 분할하는 것이 좋습니다 .
와일드 카드

답변:


3

Cgroup은 계층 적이며 모든 하위 프로세스에 의해 상속됩니다. 따라서 모든 프로세스는 일부 cgroup에 있어야합니다. 기본적으로 루트 cgroup이며 기본적으로 1024 개의 공유가 있으며이 예에서는 A와 B의 두 배입니다.

CPU 시간은 cpu.shares에 할당 된 가중치에 따라 cgroup간에 공유됩니다.

A에 1024 개의 공유가 있고 B 512와 C 256 및 D 256이 있으면 CPU 시간 분포는 A-50 %, B-25 %, C 및 D 12,5 % 여야합니다.


따라서 cgexec로 시작되지 않은 모든 프로세스는 루트 cgroup에 1024 개의 공유가 있으며 모든 직계 자식으로 균등하게 나뉩니다. 이러한 직계 자식 중 하나는을 호출하여 생성 된 cgroup cgexec입니다. 따라서 비 cgexec프로세스는 50 %가되고 cgrouped 프로세스는 나머지 50 %를 공유하게됩니다. cgrouped 프로세스 내에서 50 %를 균일하게 공유하므로 둘 다 25 %가됩니다. 이것은 의미가 있지만, 내가 관찰 한 행동은 아닙니다. 내가 본 것은 66 %, 33 % 및 33 %입니다. 자세한 내용과 예제 배포를 포함하도록 답변을 업데이트 할 수 있습니까?
Micah Zoltu

오, 내 생각에 운영 체제에서 시작되지 않은 프로세스 cgexec는 1024 개의 공유 를 갖습니다. 로 시작된 프로세스는 cgexec지정된 공유 를 가져옵니다. 따라서이 경우 한 프로세스는 1024 공유를 얻고 다른 프로세스는 각각 512를 얻습니다. 예를 들어, 예를 들어 좀 더 명확하게 답변을 업데이트 하시겠습니까?
Micah Zoltu

사실, 그것은 여전히 ​​합산되지 않습니다. 1024 + 512 + 512 = 2048. 512/2048 == 25%. 나는이 답변이 실제로 정확하지 않다고 생각합니다.
Micah Zoltu 2016 년

다른 cgroup이 있습니까? 숫자에 영향을 줄 수 있습니다. 또한 레드햇 문서를 확인할 수 THER는에 simmilar 예입니다 access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/...
Lazy404

달리 중요한 것은 없었으며, 테스트 실행 전후에 유휴 상태였습니다. 모든 예제는 모든 프로세스가 cgroups 설정으로 시작될 때 발생하는 상황 만 보여줍니다. 일부 프로세스가 cgroup을 사용하지 않을 때 어떤 일이 발생하는지 설명하지 않습니다.
Micah Zoltu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.