Linux cgroup: 한 cgroup에서 다른 cgroup으로 프로세스 이동

Linux cgroup: 한 cgroup에서 다른 cgroup으로 프로세스 이동

머리말: 나는 systemd와 단위 파일의 개념에 100% 익숙하지는 않지만 어느 정도 읽어 보았습니다.

컨텍스트: systemd를 실행하는 distro에서 한 cgroup 트리에서 다른 cgroup 트리로 프로세스를 이동하고 싶습니다(systemd가 아닌 경우 upstart라고 가정함). 보다 구체적으로 cgroup 트리가 다음과 같다고 가정해 보겠습니다.

기본적으로 계층 구조는 my_root를 기준으로 다음과 같습니다.

                     my_root
                        |
                  ______ ___________
                  |                |
                  d11             d12
              (P lives here)       |
                              ___________
                              |          |
                             d21        d22

그러면 P는 d21 아래로 이동하거나

                     my_root
                        |
                  ______ ___________
                  |                |
                  d11             d12
                                   |
                              ___________
                              |          |
                             d21        d22
                     (P lives here now) 

완전성을 위해 말하자면 my_root = /sys/fs/cgroups/cpu,cpuacct/my_root

시스템이 아닌 버킷에 대해 이야기해 보겠습니다. systemd를 실행하지 않는 배포판에서 실행 중인 경우 pid를 of P1로 에코 하면 내 프로세스가 해당 cgroup으로 이동됩니다.cgroups.procsd21

이제 systemd사용 사례가 확실하지 않습니다. 위에서 했던 것과 동일한 작업을 수행한다고 가정해 보겠습니다. 두 가지 일이 발생할 수 있습니다.

  • 프로세스는 그곳으로 이동하고 그대로 유지됩니다.
  • 프로세스는 처음에는 그곳으로 이동하지만 잠시 후 다시 돌아가거나 해당 특정 컨트롤러에 대한 루트 cgroup으로 이동합니다.

나는 후자를 피하고 싶다. 기본적으로 내 애플리케이션에 대한 단위 파일을 지정할 때 애플리케이션이 시작되는 cgroup의 소유권을 가져오고 싶다고 생각합니다. 예를 들어 애플리케이션이 my_rootcgroup의 소유권을 가져서 systemd가 프로세스 이동을 방해하지 않도록 합니다.

이제 다중 부분 질문으로 넘어갑니다.

  • systemd는 내가 옮긴 cgroup에서 프로세스를 정말로 옮길 수 있습니까?
  • 그렇다면 유닛 파일에서 cgroup의 소유권을 얻으려면 어떻게 해야 합니까? 단위 파일의 구체적인 예를 찾고 있습니다.

자원 :https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/

관련 정보