-
Cgroup (Control Group)개발/컴퓨터사이언스 2018. 9. 15. 13:37
Cgroup (Control Group)
Cgroup은 CPU, Network, Memory 등 하드웨어 자원을 그룹별로 관리 할 수 있는 리눅스의 모듈이다. 하나 또는 복수의 장치를 묶어서 하나의 그룹을 만들 수 있으며 개별 그룹은 시스템에서 설정한 값만큼 하드웨어를 사용할 수 있다. 설정하는 값은 예를 들면 이런 것들이다.
- 어떤 그룹이 CPU를 더 많이 차지 할 것인지?
- 그룹이 얼마만큼 메모리를 사용 할 수 있는지?
- 네트워크 우선순위를 얼만큼 줄 것인가.
시스템에 생성된 프로세스들은 장치 별로 특정한 cgroup에 속하며 프로세스가 사용하는 하드웨어 자원의 총량은 속한 cgroup의 통제를 받게 된다. 이말은 곧 프로세스가 아무리 효율적으로 동작하도록 만들어져 있어도 cpu 점유율이 낮은 cgroup에 속해 있으면 속도가 느릴 수 밖에 없고 cgroup 자체가 CPU 점유율이 높아도 이 그룹에 속한 프로세스가 많으면 전반적인 속도가 저하 될 수 밖에없다. 리눅스에선 하드웨어와 프로세스 사이에 cgroup 계층을 두어서 자원을 관리할 수 있도록 만들었다.하드웨어와 cgroup, 프로세스간의 관계는 아래의 그림처럼 표현 할 수 있다.시스템에 어떤 cgroup이 있는지 그리고 프로세스가 어떤 cgroup에 매핑되어 있는지는 리눅스 파일 시스템에 모두 매핑 되어 있다. 간단히 cat과 ls 명령어로 조회가 가능하다.
// System에 설치된 cgroup 목록 kwony@kwony:~$ ls /sys/fs/cgroup/ blkio cpuacct devices memory net_prio systemd cgmanager cpu,cpuacct freezer net_cls perf_event cpu cpuset hugetlb net_cls,net_prio pids // 프로세스별 cgroup 정보. /proc/[pid]/cgroup kwony@kwony:~$ cat /proc/8502/cgroup 11:pids:/user.slice/user-1000.slice 10:cpuset:/ 9:net_cls,net_prio:/ 8:devices:/user.slice 7:freezer:/ 6:perf_event:/ 5:hugetlb:/ 4:cpu,cpuacct:/ 3:blkio:/ 2:memory:/ 1:name=systemd:/user.slice/user-1000.slice/session-c2.scope
'개발 > 컴퓨터사이언스' 카테고리의 다른 글
스핀락, 뮤텍스, 세마포어 (0) 2018.11.07 RCU (Read-Copy Update) (0) 2018.10.30 CPU pinning과 taskset (0) 2018.08.27 스핀락 (0) 2018.07.23 eventfd (0) 2018.07.18