착수보고서 작성을 위해 목차를 쓰는데, 아는 내용이 없어서 뭘 써야 하는지조차 모르고 있었다.

결국 팀원들과 만난 자리에서 열심히 과제 내용에 대해서 조사를 했다.

내 문제점을 크게 몇 가지로 정리해보자면,

1. Cgroup의 역할과 동작 원리에 대해 아는 것이 별로 없음

2. Linux Container별 자원 할당 방식에 대해 모름

3. Container별 자원 할당만 수행하는지, 각 Container 내 Process의 자원 분배까지 수행하는지 모름

4. Zone에 대한 지식 전무

등이 있었다. 사실상 주제만 계속 줄줄 읊고 있었던 수준이었다. 그래서 천천히 우리가 아는 내용을 바탕으로 과제 진행 내용과 개념들을 정리해 보았다. 그래도 몇 시간의 노력 끝에 Cgroup이 뭘 하는 기능인지, 어떤 식으로 구성되고 우리가 어떻게 조작할 수 있는지 정도는 알아냈다.

 

Cgroup이란?

  프로세스들의 자원(CPU, Memory, I/O, Network)의 사용을 제한하고 격리하는 리눅스 커널 기능이다.

  Cgroup은 리눅스의 프로세스와 마찬가지로 계층적으로 구성되어 있다. 하위 Cgroup은 부모 Cgroup의 속성의 일부를 상속한다. 이 때 부모의 자원 제한을 물려받기 때문에 부모 그룹의 제한을 초과하여 할당할 수 없다. 여러 개의 다른 cgroup 계층이 시스템에 동시에 존재할 수 있으며, 각 계층은 하나 이상의 Subsystem에 연결된다. Subsystem이란 CPU Time, Memory 등의 각 자원을 조절하는 시스템이다.

 

  Cgroup은 File System의 형태로 관리된다. '/sys/fs/cgroup' 내부에는 각 subsystem별로 디렉토리가 존재하는데, 원하는 subsystem 아래에 새로운 directory를 생성하면 cgroup 계층을 추가할 수 있다. 이 때, directory를 생성하기만 해도 자동으로 내부에 파일들이 생긴다. 이 파일들 중 'task' 파일 내부에 프로세스의 pid를 입력하면 시스템 자원 조절이 가능하다.

 

  하지만 이렇게 파일 시스템의 형태로 cgroup을 관리하는 것은 실제로 사용하기 어렵다. 따라서 우리는 Libcgroup package를 사용할 것이다. Libcgroup은 설치 시 생기는 '/etc/cgconfig.conf' 파일을 바탕으로 cgroup을 생성하는데, 해당 파일을 수정하여 각 subsystem의 할당량을 조절할 수 있다.

 

이 정도 조사를 하고 나니 대략적으로 자원을 조절하는 방법이 이해되었다. 그런데 이것은 같은 시스템 아래 프로세스들 간의 자원 분배를 수행할 뿐, Linux Container에 어떻게 액세스하고 Zone을 어떤 방식으로 분배하는지는 도무지 감이 안 잡히더라. Cgroup, Linux Container, ZNS 각각의 개념은 어찌 이해했으나 그걸 합치는 과정에서 혼란이 왔다. 내일 교수님과 면담이 잡혀 있고, 질문을 요청하는 메일을 보냈으니 진전이 있기를 바라는 중이다.

 

'ZNS Isolation with Linux Container' 카테고리의 다른 글

VNC Server 설정하기  (0) 2022.06.23
Linux Shell Commands  (0) 2022.06.23
The Block I/O Layer  (0) 2022.05.24
QEMU를 이용한 ZNS 개발환경 구축 완료  (0) 2022.05.24
ZNS와 Linux Container  (0) 2022.04.28

+ Recent posts