J'ai un service (système de traitement par lots HTCondor), qui est démarré en tant qu'unité de service dans les tranches de cpu, cpuacct et mémoire cgroup (CentOS 7 @ 3.10.0-*).
Le service démarre des sous-processus (~~> batch jobs) pour lesquels il crée des sous-tranches, c'est-à-dire en subdivisant ses ressources parentes. Sans plus interférer, les processus démarrés sont dans les sous-tranches
wc -l /sys/fs/cgroup/cpu,cpuacct/system.slice/condor.service/tasks
19
wc -l /sys/fs/cgroup/cpu,cpuacct/system.slice/condor.service/*/tasks
29 /sys/fs/cgroup/cpu,cpuacct/system.slice/condor.service/[email protected]/tasks
22 /sys/fs/cgroup/cpu,cpuacct/system.slice/condor.service/[email protected]/tasks
22 /sys/fs/cgroup/cpu,cpuacct/system.slice/condor.service/[email protected]/tasks
...
et comme contre-vérification, les processus ont leurs groupes de contrôle correspondants également dans leurs informations de processus, par exemple,
cat /proc/58683/cgroup
11:perf_event:/
10:memory:/system.slice/condor.service/[email protected]
9:devices:/system.slice
8:blkio:/system.slice/condor.service /[email protected]
7:cpuset:/
6:freezer:/system.slice/condor.service/[email protected]
5:hugetlb:/
4:cpuacct,cpu:/system.slice/condor.service/[email protected]
3:pids:/system.slice/condor.service
2:net_prio,net_cls:/
1:name=systemd:/system.slice/condor.service
AFAIS, systemd ne semble pas être au courant des sous-tranches car systemd-cgls affiche les processus directement sous le groupe de contrôle de l'unité parent
systemd-cgls
...
├─condor.service
│ ├─ 781 /bin/bash ...foo...
│ ├─ 1596 condor_starter -f -a slot1_4 ...baz...
Désormais, lors de l'ajout d'une nouvelle unité, du rechargement des démons systemd et du démarrage de la nouvelle unité, tous les sous-groupes de travail disparaissent et leurs processus sont attachés au groupe de contrôle parent.
wc -l /sys/fs/cgroup/cpu,cpuacct/system.slice/condor.service/tasks
337 /sys/fs/cgroup/cpu,cpuacct/system.slice/condor.service/tasks
Mon hypothèse est que systemd n'est pas au courant des sous-tranches (devinant à partir de systemd-cgls), alors que du point de vue du noyau, ce sont des tranches de groupe de contrôle appropriées. Lors du démarrage de la nouvelle unité, systemd remarque l'écart par rapport à ses attentes et "nettoie".
Ce comportement peut-il être évité d'une manière ou d'une autre ?