Linux cgroup: переместить процесс из одной cgroup в другую

Linux cgroup: переместить процесс из одной cgroup в другую

Предисловие: Я не на 100 процентов знаком с systemd и концепциями unit-файлов, но кое-что прочитал.

Контекст: Я хочу переместить процесс из одного дерева cgroup в другое, в дистрибутиве, работающем под управлением systemd и (не 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 bucket: если я работаю в дистрибутиве, в котором не запущен systemd, я могу просто передать pid из P1в cgroups.procsиз d21, и тогда мой процесс будет перемещен в эту cgroup.

А теперь systemdвариант использования, и вот в чем я не уверен. Допустим, я делаю то же самое, что и выше. Могут произойти две вещи.

  • Процесс перемещается туда и там остается.
  • Первоначально процесс перемещается туда, но через некоторое время он либо возвращается назад, либо переходит в корневую cgroup для данного конкретного контроллера.

Я хочу избежать последнего. По сути, я думаю, что когда я указываю файл юнита для своего приложения, я хочу стать владельцем cgroup, в которой запущено приложение, например, приложение становится владельцем my_rootcgroup, чтобы systemd не мешал перемещению процесса.

Теперь перейдем к многокомпонентному вопросу.

  • Действительно ли systemd удалит процесс из cgroup, в которую я его переместил?
  • Если да, то что мне нужно сделать, чтобы стать владельцем cgroup в файле юнита. Я ищу некоторые конкретные примеры файлов юнитов.

ресурс:https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/

Связанный контент