Linux cgroup: プロセスをある cgroup から別の cgroup に移動する

Linux cgroup: プロセスをある cgroup から別の cgroup に移動する

序文: 私は systemd とユニット ファイルの概念を 100% 理解しているわけではありませんが、いくつかの資料を読みました。

コンテキスト: systemd と (systemd 以外では upstart とします) を実行しているディストリビューション上で、プロセスを 1 つの cgroup ツリーから別の cgroup ツリーに移動したいと考えています。具体的には、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 バケットについてお話ししましょう。systemd を実行していないディストリビューションで実行している場合は、 pid of をofP1にエコーするだけで、その cgroup にプロセスが移動されます。cgroups.procsd21

さて、systemdユースケースですが、これは私が確信が持てないことですが、上記と同じことを実行すると、2 つのことが起こる可能性があります。

  • プロセスはそこに移動し、そこに留まります。
  • プロセスは最初はそこに移動しますが、しばらくすると、その特定のコントローラーのルート cgroup に戻るか、ルート cgroup に移動します。

私は後者を避けたいと思っています。基本的に、アプリケーションのユニット ファイルを指定するときに、アプリケーションが起動される cgroup の所有権を取得したいと考えています。たとえば、アプリケーションがmy_rootcgroup の所有権を取得し、systemd がプロセスの移動に干渉しないようにします。

さて、複数の質問に移ります。

  • systemd は、プロセスを移動した cgroup から本当に移動するのでしょうか?
  • はいの場合、ユニット ファイル内の cgroup の所有権を取得するには何をする必要がありますか。ユニット ファイルの具体的な例を探しています。

リソース :https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/

関連情報