cgroups 라고 불리는 커널의 기능을 소개하려고 합니다.


cgroups 는 시스템의 자원을 task 에 할당하고 배치하는 일을 수행할수 있습니다.


전통적인 리눅스 시스템에서 모든 프로세스는 시스템의 모든 자원에 대하여 동일한 자격으로


경쟁을 통한 자원을 사용할 수 있었습니다.


cgroups 에서는 프로세스마다 사용할 수 있는 자원을 할당할수 있도록 되어 있습니다.


그렇게 되면 시스템의 자원들이 프로세스들에게 할당이 가능하도록 구성이 되어야 하겠습니다.


그렇게 구성된 시스템의 자원들을 subsystem 이라고 부릅니다.


혹은 resource controller 라고 부르기도 합니다.


예를 들면 블럭 장치를 사용하는데 있어서 장치를 사용할 수 있는 시간이나 대역폭을 정할수 있습니다.


혹은 메모리의 경우 가용한 메모리의 크기를 정해줄수 있습니다.


이렇게 구성된 블럭장치나 메모리의 경우는 memory subsystem, block subsystem 이라고 부릅니다.


하지만 DMA 와 같은 시스템 자원의 경우 프로세스 마다 할당 할 수는 없습니다.


왜냐하면 대부분의 DMA는 프로세스들이 아닌 각 시스템 장치들이 사용하고 있기 때문이죠


이런 경우 DMA 는 그냥 system resource 일 뿐이죠


따라서 모든 프로세스는 동일한 자격으로(물론 프로세스가 직접 dma 를 사용할 일은 없겠지만)


DMA 를 사용할 수 있다고 말할 수 있겠습니다.



subsystem 으로 구성된 것들은 아래와 같이 있습니다.

blkio

cpu

memory

net_prio

각 장치들은 각 자원들을 프로세스에 할당 할수 있도록 준비되어 있습니다.


각 프로세스들에게 할당이 되면 전통적인 프로세스와 마찬가지로 자식 프로세스에게 상속이 됩니다.


이렇게 시스템을 운용하는 것은 가상화에서 매우 유용한 역할을 담당합니다.


다음에는 cgroups 의 기능들과 컴포넌트에 대해서 한번 보기로 하죠