그룹
cgroups| 원저작자 | v1: Paul Menage, Rohit Seth v2: 허테준 |
|---|---|
| 개발자 | Tejun Hu, Johannes Weiner, Michal Hocko, Waiman Long, Roman Gushchin, Chris Down 등 |
| 초기 릴리즈 | 전( |
| 기입처 | C |
| 운영 체제 | 리눅스 |
| 유형 | 시스템 소프트웨어 |
| 면허증. | GPL 및 LGPL |
| 웹 사이트 | v1의 경우 www.kernel.org/doc/Documentation/cgroup-v1/, v2의 경우 www.kernel.org/doc/Documentation/cgroup-v2.txt |
cgroups(컨트롤 그룹의 약자)는 일련의 프로세스 리소스 사용률(CPU, 메모리, 디스크 I/O, 네트워크 등)을 제한, 설명 및 분리하는 Linux 커널 기능입니다.
Google의 엔지니어(주로 Paul Menage와 Rohit Seth)는 2006년에 "프로세스 컨테이너"[1]라는 이름으로 이 기능에 대한 작업을 시작했습니다.2007년 후반에는 Linux 커널 컨텍스트에서 "컨테이너"라는 용어의 여러 의미에 의한 혼동을 피하기 위해 "컨트롤 그룹"으로 명칭이 변경되었으며 제어 그룹 기능은 2008년 [2]1월에 출시된 커널 버전 2.6.24에서 Linux 커널 메인라인으로 통합되었습니다.이후 개발자들은 2014년 [3]kernfs 지원,[4] 방화벽 및 [5]통합 계층 등 많은 새로운 기능과 컨트롤러를 추가했습니다. cgroup v2는 인터페이스와 [6]내부 기능에 큰 변경을 가하여 Linux 커널 4.5에[citation needed] 통합되었습니다.
버전
cgroup에는 2가지 버전이 있습니다.
Cgroups는 원래 Paul Menage와 Rohit Seth에 의해 작성되었으며 2007년에 Linux 커널에 메인라인으로 추가되었습니다.그 후 이를 cgroups 버전1이라고 부릅니다.[7]
cgroup의 개발과 유지보수는 Tejun Ho에 의해 인계되었습니다.Tejun Ho는 cgroup을 재설계 및 재작성하였습니다.cgroup-v2의 문서는 2016년 [8]3월 14일에 출시된 Linux 커널 4.5에서 처음 공개되었습니다.
v1과 달리 cgroup v2는 단일 프로세스 계층만 가지며 스레드가 아닌 프로세스를 구분합니다.
특징들
cgroups의 설계 목표 중 하나는 단일 프로세스 제어(예를 들어 nice 사용)에서 완전한 운영 체제 수준의 가상화(예를 들어 OpenVZ, Linux-V서버 또는 LXC 제공)까지 다양한 사용 사례에 통합 인터페이스를 제공하는 것입니다.Cgroups는 다음을 제공합니다.
- 자원 제한
- 설정된 메모리 제한을 넘지 않도록 그룹을 설정할 수 있습니다.이 메모리 제한에는 파일 시스템[9][10] 캐시도 포함됩니다.
- 우선순위 부여
- 그룹에 따라서는 CPU[11] 사용률 또는 디스크 I/O[12] 스루풋의 점유율이 높아질 수 있습니다.
- 어카운팅
- 는 그룹의 자원 사용량을 측정합니다.예를 들어 과금[13] 목적으로 사용할 수 있습니다.
- 통제
- 동결 프로세스 그룹, 체크포인트 및 재시작[13]
사용
제어 그룹(cgroup으로 줄임말)은 동일한 기준에 의해 구속되고 일련의 파라미터 또는 제한과 관련된 프로세스의 집합입니다.이러한 그룹은 계층화할 수 있습니다.즉, 각 그룹은 부모 그룹으로부터 제한을 상속합니다.커널은 cgroup 인터페이스를 [2]통해 여러 컨트롤러(서브시스템이라고도 함)에 액세스할 수 있습니다.예를 들어 메모리 컨트롤러는 메모리 사용을 제한하고 "cpuacct" 계정의 CPU 사용량을 제한합니다.
제어 그룹은 여러 가지 방법으로 사용할 수 있습니다.
- cgroup 가상 파일시스템에 수동으로 액세스 합니다.
- 다음과 같은 도구를 사용하여 즉시 그룹을 만들고 관리합니다.
cgcreate,cgexec,그리고.cgclassify(출처:libcgroup). - 설정에서 지정된 대로 특정 사용자, 그룹 또는 명령어 프로세스를 cgroup으로 자동으로 이동할 수 있는 "규칙 엔진 데몬"을 통해
- Docker, Firejail, LXC,[14] libvirt, systemd, Open Grid Scheduler/Grid Engine,[15] Google의 개발상 사용되지 않는 lmctfy 등 cgroup을 사용하는 다른 소프트웨어를 통해 간접적으로 사용할 수 있습니다.
Linux 커널 설명서에는 제어 그룹 버전[16] 1 및 버전 [17]2의 설정 및 사용에 대한 몇 가지 기술적인 세부 정보가 포함되어 있습니다. systemd-cgtop[18] 명령어를 사용하여 상위 제어 그룹을 리소스 사용률별로 표시할 수 있습니다.
재설계
cgroups의 재설계는 [19]2013년에 시작되었으며 Linux [20][21][22]커널 버전 3.15와 3.16에 의해 추가된 추가 변경 사항들을 포함하였다.
네임스페이스 분리
cgroups의 일부는 기술적으로 기능하지 않지만 Linux 커널의 관련 기능은 네임스페이스 분리입니다.여기서 프로세스 그룹은 다른 그룹의 리소스를 볼 수 없도록 분리되어 있습니다.예를 들어 PID 네임스페이스는 각 네임스페이스 내의 프로세스 식별자를 개별적으로 열거합니다.마운트, 사용자, UTS, 네트워크 및 SysV IPC 네임스페이스도 사용할 수 있습니다.
- PID 네임스페이스는 프로세스 식별자(PID), 프로세스 목록 및 그 세부 정보를 할당하기 위한 분리를 제공합니다.새로운 네임스페이스는 다른 형제와 분리되어 있지만, 그 "부모" 네임스페이스의 프로세스에서는 PID [23]번호가 다른 경우에도 하위 네임스페이스의 모든 프로세스를 볼 수 있습니다.
- 네트워크 네임스페이스는 네트워크 인터페이스 컨트롤러(물리 또는 가상), iptables 방화벽 규칙, 라우팅 테이블 등을 분리합니다.네트워크 네임스페이스는 "veth" 가상 이더넷 [24]디바이스를 사용하여 서로 연결할 수 있습니다.
- 「UTS」네임스페이스에서는, 호스트명을 변경할 수 있습니다.
- 네임스페이스 마운트를 사용하면 다른 파일 시스템 레이아웃을 만들거나 특정 마운트 지점을 읽기 [25]전용으로 만들 수 있습니다.
- IPC 네임스페이스는 네임스페이스 간의 System V 프로세스 간 통신을 분리합니다.
- 사용자 네임스페이스는 네임스페이스 간에 사용자 [26]ID를 분리합니다.
- Cgroup 네임스페이스[27]
네임스페이스는 "unshare" 명령 또는 syscall을 사용하거나 "clone" syscall에서 [28]새 플래그로 생성됩니다.
ns 서브시스템은 네임스페이스와 제어 그룹을 통합하기 위해 cgroup 개발 초기에 추가되었습니다."ns" cgroup이 마운트된 경우 각 네임스페이스는 cgroup 계층에 새 그룹도 만듭니다.이 실험은 나중에 cgroups API에 적합하지 않다고 판단되어 커널에서 삭제되었습니다.
Linux 네임스페이스는 Bell [29]Labs의 Plan 9에서 많이 사용되는 보다 일반적인 네임스페이스 기능에서 영감을 받았습니다.
통합 계층
Kernfs는 2014년 3월 버전 3.14로 Linux 커널에 도입되었으며, 주요 작성자는 [30]허테준입니다.개별 kernf의 주요 동기 중 하나는 cgroups 파일 시스템입니다.Kernfs는 기본적으로 sysfs 로직의 일부를 독립된 엔티티로 분할함으로써 생성됩니다.따라서 다른 커널 서브시스템에서는 디바이스 접속 및 절단 처리, 동적 생성 및 삭제 및 기타 속성을 사용하여 자체 가상 파일 시스템을 쉽게 구현할 수 있습니다.재설계는 Linux [31]커널 버전 3.15로 계속되었다.
커널 메모리 제어 그룹(kmemcg)
커널 메모리 제어 그룹(kmemcg)은 Linux 커널 메인라인의 [32][33][34]버전 3.8(2013년 2월, 전(2013년 2월 에 통합되었습니다.kmemcg 컨트롤러는 커널이 자체 내부 프로세스를 관리하기 위해 사용할 수 있는 메모리 양을 제한할 수 있습니다.
OOM 킬러에 대한 cgroup 인식
Linux Kernel 4.19(2018년 10월)에서는 OOM 킬러 구현에 대한 cgroup 인식이 도입되었습니다.이것에 의해, 1개의 유닛으로서 cgroup을 정지하는 기능이 추가되어 워크로드의 [35]정합성이 보증됩니다.
도입
CoreOS, Docker(2013년), Hadoop, Jelastic, Kubernetes,[36] lmctfy(Let Me Containers That You), LXC(LinuX Containers), systemd, Mesos and Mesosphere,[36] HTCorondor 등 다양한 프로젝트가 기본으로 사용됩니다.주요 Linux 디스트리뷰션에서도 메인라인 Linux [37]커널에 의해 채택되기 3년 전인 2010년 11월에 Red Hat Enterprise Linux(RHEL) 6.0 등의 도입이 이루어졌습니다.
2019년 10월 29일 Fedora Project는 기본적으로[38] CgroupsV2를 사용하도록 Fedora 31을 수정했습니다.
「 」를 참조해 주세요.
- 운영 체제 수준의 가상화 구현
- 프로세스 그룹
- Tc(Linux) – 네트워크 지향의 cgroup 설정과 기능이 약간 중복되는 트래픽 제어 유틸리티
레퍼런스
- ^ Jonathan Corbet (29 May 2007). "Process containers". LWN.net.
- ^ a b Jonathan Corbet (29 October 2007). "Notes from a container". LWN.net. Retrieved 14 April 2015.
The original 'containers' name was considered to be too generic – this code is an important part of a container solution, but it's far from the whole thing. So containers have now been renamed 'control groups' (or 'cgroups') and merged for 2.6.24.
- ^ "cgroup: convert to kernfs". Linux kernel mailing list. 28 January 2014.
- ^ "netfilter: x_tables: lightweight process control group matching". 23 April 2014. Archived from the original on 24 April 2014.
- ^ "cgroup: prepare for the default unified hierarchy". 13 March 2014.
- ^ "cgroup v2: Multiple hierarchies".
- ^ "diff between Linux kernel 4.4 and 4.5". 14 March 2016.
- ^ "Documentation/cgroup-v2.txt as appeared in Linux kernel 4.5". 14 March 2016.
- ^ Jonathan Corbet (31 July 2007). "Controlling memory use in containers". LWN.
- ^ Balbir Singh, Vaidynathan Srinivasan (July 2007). "Containers: Challenges with the memory resource controller and its performance" (PDF). Ottawa Linux Symposium.
- ^ Jonathan Corbet (23 October 2007). "Kernel space: Fair user scheduling for Linux". Network World. Archived from the original on 19 October 2013. Retrieved 22 August 2012.
- ^ Kamkamezawa Hiroyu (19 November 2008). Cgroup and Memory Resource Controller (PDF). Japan Linux Symposium. Archived from the original (PDF presentation slides) on 22 July 2011.
- ^ a b Dave Hansen. Resource Management (PDF presentation slides). Linux Foundation.
- ^ Matt Helsley (3 February 2009). "LXC: Linux container tools". IBM developerWorks.
- ^ "Grid Engine cgroups Integration". Scalable Logic. 22 May 2012.
- ^ "cgroups". kernel.org.
- ^ "Torvalds/Linux". GitHub. 13 February 2022.
- ^ "Systemd-cgtop".
- ^ "All About the Linux Kernel: Cgroup's Redesign". Linux.com. 15 August 2013. Retrieved 19 May 2014.
- ^ "The unified control group hierarchy in 3.16". LWN.net. 11 June 2014.
- ^ "Pull cgroup updates for 3.15 from Tejun Heo". kernel.org. 3 April 2014.
- ^ "Pull cgroup updates for 3.16 from Tejun Heo". kernel.org. 9 June 2014.
- ^ Pavel Emelyanov, Kir Kolyshkin (19 November 2007). "PID namespaces in the 2.6.24 kernel". LWN.net.
- ^ Jonathan Corbet (30 January 2007). "Network namespaces". LWN.net.
- ^ Serge E. Hallyn, Ram Pai (17 September 2007). "Applying mount namespaces". IBM developerWorks.
- ^ Michael Kerrisk (27 February 2013). "Namespaces in operation, part 5: User namespaces". lwn.net Linux Info from the Source.
- ^ "LKML: Linus Torvalds: Linux 4.6-rc1".
- ^ Janak Desai (11 January 2006). "Linux kernel documentation on unshare".
- ^ "The Use of Name Spaces in Plan 9". 1992. Archived from the original on 6 September 2014. Retrieved 15 February 2015.
- ^ "kernfs, sysfs, driver-core: implement synchronous self-removal". LWN.net. 3 February 2014. Retrieved 7 April 2014.
- ^ "Linux kernel source tree: kernel/git/torvalds/linux.git: cgroups: convert to kernfs". kernel.org. 11 February 2014. Retrieved 23 May 2014.
- ^ "memcg: kmem controller infrastructure". kernel.org source code. 18 December 2012.
- ^ "memcg: kmem accounting basic infrastructure". kernel.org source code. 18 December 2012.
- ^ "memcg: add documentation about the kmem controller". kernel.org. 18 December 2012.
- ^ https://kernelnewbies.org/Linux_4.19#Memory_management
- ^ a b "Mesosphere to Bring Google's Kubernetes to Mesos". Mesosphere.io. 10 July 2014. Archived from the original on 6 September 2015. Retrieved 13 July 2014.
- ^ https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/pdf/6.0_Release_Notes/Red_Hat_Enterprise_Linux-6-6.0_Release_Notes-en-US.pdf[베어 URL PDF]
- ^ "1732114 – Modify Fedora 31 to use CgroupsV2 by default".
외부 링크
- cgroups v1 및 cgroups v2에 대한 공식 Linux 커널 문서
- cgroup에 관한 Red Hat 자원 관리 가이드
- cgroup의 Ubuntu manpage
- Linux 커널 네임스페이스 및 cgroups by Rami Rosen (2013)
- Linux 컨테이너(cgroups v2 포함)의 기반인 네임스페이스와 cgroups, Rami Rosen, Netdev 1.1, 스페인 세비야, 2016년 강연 슬라이드
- Rami Rosen의 새로운 제어 그룹 API, LWN.net, 2016년 3월
- Borg와 함께 구글에서 대규모 클러스터 관리(Abhishek Verma, Luis Pedrosa, Madhukar Korupolu, David Oppenheimer, Eric Tune 및 John Wilkes)
- 작업 객체, Windows의 유사한 기능