systemd의 cgroup 구성은 어디에 있습니까?

systemd의 cgroup 구성은 어디에 있습니까?

내 이해는 기본적으로 systemd가 cpu.share=1024를 사용하여 단일 cgroup에서 모든 프로세스를 시작한다는 것입니다. 서비스의 cpu.share를 재정의하기로 선택하면 해당 서비스 아래 프로세스에 대한 새 cgroup이 생성되고 선택한 값으로 cpu.share가 설정됩니다.

60% CPU를 제공할 수 있는 사용자 정의 cpu.share를 사용하여 새 cgroup을 수동으로 생성하고 싶습니다. 이를 위해서는 기존의 모든 cgroup의 cpu.share 값을 알아야 합니다. systemd는 이러한 값을 어디에 설정합니까? 이것을 쉽게 얻을 수 있는 방법이 있나요? /sys/fs/cgroup/cpu에는 루트 그룹(1024로 설정)과 내가 수동으로 생성한 그룹만 포함됩니다.

답변1

systemd의 CGroup 옵션은 다음 문서에 설명되어 있습니다.man systemd.exec(또는man systemd.resource-control). 당신이 찾고 있는 것은 다음과 같습니다:

CPUWeight=weight, StartupCPUWeight=weight

시스템에서 통합 제어 그룹 계층 구조가 사용되는 경우 지정된 CPU 시간 가중치가 실행 프로세스에 할당됩니다. 이러한 옵션은 정수 값을 취하고 " cpu.weight" 제어 그룹 속성을 제어합니다. 허용되는 범위는 1~10000입니다. 기본값은 100입니다. 이 통제 그룹의 속성에 대한 자세한 내용은 다음을 참조하세요.cgroup-v2.txt그리고 계획설계-CFS.txt. 사용 가능한 CPU 시간은 CPU 시간 가중치를 기준으로 슬라이스 내의 모든 장치에 분산됩니다.

답변2

내 이해는 기본적으로 systemd가 cpu.share=1024를 사용하여 단일 cgroup에서 모든 프로세스를 시작한다는 것입니다.

나는 이것이 옳다고 생각하지 않습니다. 그러나 내 말을 권위 있는 것으로 받아들이지 마십시오. 이 결론을 이끌어낸 문서의 일부는 다음과 같습니다.

에서 systemd.resource-control(5):

   CPUAccounting=
       Turn on CPU usage accounting for this unit. Takes a boolean argument.
       Note that turning on CPU accounting for one unit might also implicitly
       turn it on for all units contained in the same slice and for all its
       parent slices and the units contained therein. The system default for
       this setting maybe controlled with DefaultCPUAccounting= in systemd-
       system.conf(5).

그리고:

   CPUShares=weight, StartupCPUShares=weight
       ...
      Those options imply "CPUAccounting=true".

내가 읽은 대로, 어떤 유닛에도 값이 설정되어 있지 CPUShares않고 CPUAccounting어느 곳에서도 명시적으로 활성화되지 않은 경우(및 DefaultCPUAccounting설정되지 않은 경우) systemd는 system.conf계층 구조를 전혀 사용하지 않을 수 있습니다(그렇지 않을까요?).cpu

(이 점에 대한 모든 수정을 환영합니다.)

관련 정보