cgroups는 ulimit를 통해 무엇을 제공합니까?

cgroups는 ulimit를 통해 무엇을 제공합니까?

setrlimitsyscall이 이미 존재하는데 cgroup을 생성하는 이유는 무엇입니까 getrlimit?

나는 이것이 rlimit단일 프로세스에서만 작동할 것이라고 생각했지만 매뉴얼 페이지에는 다음과 같이 명시되어 있습니다.

현재 프로세스와 프로세스가 생성하는 각 프로세스의 시스템 자원 소비 제한은 getrlimit() 호출을 통해 얻을 수 있으며 setrlimit() 호출을 통해 설정할 수 있습니다.

프로세스 그룹의 리소스 사용량을 제어하려면 상위 프로세스(아마도 셸)에서 제한을 설정하면 이러한 제한이 모든 하위 프로세스에 적용되는 것 같습니다.

분명히 두 메커니즘 사이의 몇 가지 주요 차이점이 누락된 것 같지만 원하는 답변을 찾을 수 없습니다.

답변1

이 특정 표현은 *BSD 버전에서 주로 사용되는 것 같습니다 setrlimit.

다른 버전setrlimit (2)상태

노트

fork(2)를 통해 생성된 하위 프로세스는 상위 프로세스의 리소스 제한을 상속합니다. execve(2) 전체에 걸쳐 리소스 제한을 예약합니다.

리소스 제한은각 프로세스의 속성프로세스의 모든 스레드에서 공유됩니다.

이는 2GiB 주 메모리 제한이 단일 프로세스(및 해당 스레드)에 적용된다는 점을 더 명확하게 해준다고 생각합니다. 그리고 이 프로세스의 하위 프로세스도 2GiB 기본 메모리 제한을 상속하지만 자체 용도로는 2GiB입니다.

즉, 각 프로세스의 메모리 제한은 2GiB이며, 함께 사용하면 최대 4GiB의 기본 메모리를 사용할 수 있습니다.


반면에 맨페이지는cgroups - Linux 제어 그룹설명하다

CPU 시간 제한과 같은 작업을 수행할 수 있는 다양한 하위 시스템이 구현되었습니다.cgroup에 사용 가능한 메모리, cgroup에서 사용하는 CPU 시간을 계산하고 cgroup의 프로세스 실행을 중지하고 다시 시작합니다.

따라서 제어 그룹을 사용하면 프로세스 그룹의 리소스를 제한할 수 있습니다.

3개 프로세스 그룹의 경우 주 메모리를 2GiB로 제한하면 3개 프로세스 모두 함께 2GiB 이상의 주 메모리를 사용할 수 없습니다.

관련 정보