Control Groups

History

  • 2006년 구글 엔지니어가 시작
  • 2.6.24 kernel에 merge되고 LXC로 확산 중

특징

  • cgroup은 태스크들 세트의 aggregating/partitioning 매커니즘이며, 태스크들 세트에는 계층화 그룹으로 관리.
  • cgroup은 파일시스템이며 마운트하여 사용
    • mount -t tmpfs cgroup_root /sys/fs/cgroup
    • mkdir /sys/fs/cgroup/cpuset
    • mount -t cgroup -ocpuset cpuset /sys/fs/cgroup/cpuset
  • cgroup 자체만으로는 동작 중인 task의 그루핑만 한다.
  • 자원(cpu, memory, disk, device)등의 분배는 subsystem이 필요
  • CONFIG_CGROUPS

기능

  • Access: cgroup별 디바이스들의 사용
  • Resource limiting: 자원(memory, cpu, device, …)의 사용제한
  • Prioritization: 누구에게 CPU와 메모리를 더 많이…
  • Accounting: cgroup별 자원 사용량
  • Control: freezing & check pointing
  • Injection: 패킷 태깅

subsystem

cgroup1

 

장점

CPU 코어 할당

  • CPU 코어별 jobs 배치
  • 코어 스위칭 코스트 감소

cgroup2

CPU Usage 할당

  • jobs별 우선 순위
  • 리소스 세그멘테이션

cgroup3

Device Access

  • isolation (visibllity)
  • segmentation
  • whitelist/blacklist

cgroup4

계층 관리

cgroup5

디렉토리

$ ls /sys/fs/cgroup
blkio      cpu          cpuacct  devices  hugetlb  net_cls           net_prio    systemd
cgmanager  cpu,cpuacct  cpuset   freezer  memory   net_cls,net_prio  perf_event

 

$ ls /sys/fs/cgroup/memory
cgroup.clone_children  cpuacct.stat          cpu.cfs_period_us  cpu.stat           tasks
cgroup.procs           cpuacct.usage         cpu.cfs_quota_us   notify_on_release  user.slice
cgroup.sane_behavior   cpuacct.usage_percpu  cpu.shares         release_agent
  • tasks: PID 목록
  • cgroup.procs: TGID 목록.

Attaching process

$ echo <pid> > tasks

 

현 시스템 내부 subsystem 목록

$ cat /proc/cgroups
#subsys_name    hierarchy       num_cgroups     enabled
cpuset  3       9       1
cpu     9       9       1
cpuacct 9       9       1
blkio   6       9       1
memory  4       9       1
devices 10      88      1
freezer 5       9       1
net_cls 8       9       1
perf_event      7       9       1
net_prio        8       9       1
hugetlb 2       9       1

 

구조

cgroup6

 

cgroup7

 

참고

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.