그룹

cgroups
그룹
원저작자v1: Paul Menage, Rohit Seth
v2: 허테준
개발자Tejun Hu, Johannes Weiner, Michal Hocko, Waiman Long, Roman Gushchin, Chris Down 등
초기 릴리즈2007년; 15년 전(2007년)
기입처C
운영 체제리눅스
유형시스템 소프트웨어
면허증.GPLLGPL
웹 사이트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]

사용

간접 사용의 예로서 systemd는 cgroups 퍼실리티에 대한 배타적 접근을 상정하고 있습니다.

제어 그룹(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월 18일, 9년 전(2013년 2월 18일)에 통합되었습니다.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을 수정했습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Jonathan Corbet (29 May 2007). "Process containers". LWN.net.
  2. ^ 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.
  3. ^ "cgroup: convert to kernfs". Linux kernel mailing list. 28 January 2014.
  4. ^ "netfilter: x_tables: lightweight process control group matching". 23 April 2014. Archived from the original on 24 April 2014.
  5. ^ "cgroup: prepare for the default unified hierarchy". 13 March 2014.
  6. ^ "cgroup v2: Multiple hierarchies".
  7. ^ "diff between Linux kernel 4.4 and 4.5". 14 March 2016.
  8. ^ "Documentation/cgroup-v2.txt as appeared in Linux kernel 4.5". 14 March 2016.
  9. ^ Jonathan Corbet (31 July 2007). "Controlling memory use in containers". LWN.
  10. ^ Balbir Singh, Vaidynathan Srinivasan (July 2007). "Containers: Challenges with the memory resource controller and its performance" (PDF). Ottawa Linux Symposium.
  11. ^ 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.
  12. ^ 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.
  13. ^ a b Dave Hansen. Resource Management (PDF presentation slides). Linux Foundation.
  14. ^ Matt Helsley (3 February 2009). "LXC: Linux container tools". IBM developerWorks.
  15. ^ "Grid Engine cgroups Integration". Scalable Logic. 22 May 2012.
  16. ^ "cgroups". kernel.org.
  17. ^ "Torvalds/Linux". GitHub. 13 February 2022.
  18. ^ "Systemd-cgtop".
  19. ^ "All About the Linux Kernel: Cgroup's Redesign". Linux.com. 15 August 2013. Retrieved 19 May 2014.
  20. ^ "The unified control group hierarchy in 3.16". LWN.net. 11 June 2014.
  21. ^ "Pull cgroup updates for 3.15 from Tejun Heo". kernel.org. 3 April 2014.
  22. ^ "Pull cgroup updates for 3.16 from Tejun Heo". kernel.org. 9 June 2014.
  23. ^ Pavel Emelyanov, Kir Kolyshkin (19 November 2007). "PID namespaces in the 2.6.24 kernel". LWN.net.
  24. ^ Jonathan Corbet (30 January 2007). "Network namespaces". LWN.net.
  25. ^ Serge E. Hallyn, Ram Pai (17 September 2007). "Applying mount namespaces". IBM developerWorks.
  26. ^ Michael Kerrisk (27 February 2013). "Namespaces in operation, part 5: User namespaces". lwn.net Linux Info from the Source.
  27. ^ "LKML: Linus Torvalds: Linux 4.6-rc1".
  28. ^ Janak Desai (11 January 2006). "Linux kernel documentation on unshare".
  29. ^ "The Use of Name Spaces in Plan 9". 1992. Archived from the original on 6 September 2014. Retrieved 15 February 2015.
  30. ^ "kernfs, sysfs, driver-core: implement synchronous self-removal". LWN.net. 3 February 2014. Retrieved 7 April 2014.
  31. ^ "Linux kernel source tree: kernel/git/torvalds/linux.git: cgroups: convert to kernfs". kernel.org. 11 February 2014. Retrieved 23 May 2014.
  32. ^ "memcg: kmem controller infrastructure". kernel.org source code. 18 December 2012.
  33. ^ "memcg: kmem accounting basic infrastructure". kernel.org source code. 18 December 2012.
  34. ^ "memcg: add documentation about the kmem controller". kernel.org. 18 December 2012.
  35. ^ https://kernelnewbies.org/Linux_4.19#Memory_management
  36. ^ 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.
  37. ^ 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]
  38. ^ "1732114 – Modify Fedora 31 to use CgroupsV2 by default".

외부 링크