Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

<!> 미완성

Contents

cgroups

Control groups의 약자다. 계정과 CPU, 메모리, 디스크 I/O등의 자원을 격리(isolation)하기 위한 리눅스 커널 기능이다.

2006년경 부터 구글에서 개발을 시작했다. 처음에는 "process container"라는 이름이였는데, 2007년 Control Group로 이름을 바꿨다. 정식으로 리눅스 커널에 포함된건 2.6.24.

Cgroups를 살펴보려는 이유는 리눅스 docker의 기본 기술이기 때문이다.

운영체제 위에 새로운 운영체제를 띄우는 VM(virtual machine)방식은 운영체제 레벨에서 격리된 환경을 제공한다는 장점이 있지만, 조금만 생각해 보면 상당히 비효율적인 방식이라는 걸 알 수 있다. 웹 서비스를 하기 위해서 가상 머신을 띄우다니 !? 그냥 프로세스를 띄우고, 프로세스를 띄우기 위한 CPU, 메모리, 디스크 자원만 할당해주면 될 일 아닌가.

docker는 이런일 - 새로운 VM을 띄우는 대신에, 프로세스 레벨에서 격리된 컴퓨팅 환경 -을 하는 소프트웨어다. 이 경우 각 컴퓨팅 자원들을 어떻게 그룹핑하고 격리할지가 중요한 이슈가 되는데, 이때 사용하는 기술이 cgroup이다.

해서 docker를 배우기 전에 cgroup를 살펴보려고 한다.

기능

cgroup의 설계 목표중 하나는 운영체제 시스템 레벨의 가상화 툴들인 OpenVZ, Linux-VServer, LXC와 같이 컴퓨팅 자원을 격리하고 관리하기 위한 통합된 인터페이스의 제공이다.
  • 자원 제한 : 그룹별로 사용할 수 있는 메모리 한계를 설정할 수 있다.
  • Prioritization : 그룹 특성에 따라서 CPU와 disk I/O 대역폭을 조절할 수 있다.
  • Accounting :
  • Control : 그룹의 중단과 재시작과 같은 제어

참고