Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

1.2. 서브시스템, 계층, 컨트롤 그룹, 작업 간의 관계

cgroup 용어에서는 시스템 프로세스는 작업이라는 것을 염두에 두십시오.
그럼 여기서 서브시스템, cgroup 계층 및 작업 간의 관계를 관리하는데 있어서의 몇 가지 간단한 규칙과 그 규칙에 따른 결과에 대해 살펴보겠습니다.
규칙 1

단일 서브시스템 (예: cpu)는 하나의 계층에만 연결할 수 있습니다.

결과적으로cpu 서브시스템은 두 개의 서로 다른 계층에 연결될 수 없습니다.
규칙 2

단일 계층에 하나 이상의 서브시스템을 연결할 수 있습니다.

결과적으로 cpumemory 서브시스템 (혹은 서브시스템 수)을 각각이 다른 계층에 연결되어 있지 않는한 단일 계층에 연결할 수 있습니다.
규칙 3

시스템에 새로운 계층이 생성될 때 마다 시스템의 모든 작업은 해당 계층의 디폴트 cgroup의 멤버가 됩니다. 이는 root cgroup이라고 합니다. 생성된 단일 계층의 경우 시스템의 각 작업은 해당 계층에 있는 정확하게 하나의 cgroup의 멤버가 될 수 있습니다. 각각의 cgroup이 다른 계층에 있는 한 단일 작업은 여러 cgroup에 있을 수 있습니다. 작업이 동일한 계층에 있는 두 번째 cgroup의 멤버가 될 경우, 이는 계층의 첫 번째 cgroup에서 바로 삭제됩니다. 작업이 동일한 계층에 있는 두 개의 다른 cgroup의 멤버가 될 수 없습니다.

결과적으로 cpumemory 서브시스템이 cpu_and_mem이라는 계층에 연결되고 net_cls 서브시스템이 net이라는 계층에 연결된 경우, 실행 중인 httpd 프로세스는 cpu_and_mem에 있는 하나의 cgroup 그리고 net에 있는 하나의 cgroup의 멤버가 될 수 있습니다.
httpd 프로세스가 속한 cpu_and_mem에 있는 cgroup은 다른 프로세스에 할당된 시간의 절반으로 CPU 시간이 제한되어 있고 메모리 사용량이 최대 1024 MB로 제한되는 멤버일 수 있습니다. 또한, net에 있는 cgroup은 전송 속도가 초당 30 메가바이트로 제한되는 멤버일 수 있습니다.
첫 번째 계층이 생성되면 시스템의 모든 작업은 최소 한 개의 cgroup (root cgroup)의 멤버가 됩니다. 따라서 cgroup을 사용하면 모든 시스템 작업은 최소 하나의 cgroup에 있게 됩니다.
규칙 4

자신을 포크하는 시스템에 있는 하나의 프로세스 (작업)는 자식 프로세스(작업)을 생성합니다. 자식 작업은 자동으로 부모가 멤버인 모든 cgroup의 멤버가 됩니다. 그 후 자식 작업은 필요에 따라 다른 cgroup으로 이동할 수 있지만 처음에는 부모 작업의 cgroup (프로세스 용어로 "환경"이라함)을 상속합니다.

결과적으로 cpu_and_mem 계층에 있는 half_cpu_1gb_max라는 cgroup의 멤버와 net 계층에 있는 trans_rate_30라는 cgroup의 멤버인 httpd 작업을 고려해 봅시다. httpd 프로세스가 자신을 포크하면 자식 프로세스는 자동으로 half_cpu_1gb_max cgroup과 trans_rate_30 cgroup의 멤버가 되어 부모 작업이 속해 있는 것과 동일한 cgroup을 상속합니다.
이후에는 부모 작업 및 자식 작업이 완전히 서로 독립적인 상태가 되어 하나의 작업이 속한 cgroup을 변경해도 다른 작업에 영향을 미치지 않습니다. 또한 부모 작업의 cgroup을 변경해도 손자 작업에도 전혀 영향을 주지 않습니다. 즉, 자식 작업은 모두 처음에는 부모 작업과 동일한 cgroup에 있는 멤버쉽을 상속하지만 이러한 멤버쉽은 나중에 변경 또는 삭제할 수 있습니다.