ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.