Por que os cgroups são mapeados diferentemente nesses dois sistemas por systemd

7

Eu tenho dois sistemas, ambos rodando variantes customizadas do OpenSuSE 12.2 (Mantis), ambos executando exatamente o mesmo kernel. Eu recebo duas saídas muito diferentes de /proc/self/cgroup ou /proc/$$/cgroup nos dois sistemas:

Sistema A (ou um estoque OpenSuSE 12.1):

cat /proc/self/cgroup 
9:perf_event:/
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct,cpu:/
2:cpuset:/
1:name=systemd:/user/root/6

Sistema B:

root@msx:/sys/fs/cgroup> cat /proc/self/cgroup 
9:perf_event:/
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct,cpu:/system/[email protected]/ttyS0
2:cpuset:/
1:name=systemd:/system/[email protected]/ttyS0

Por que as linhas 1 são diferentes e por que a linha 3 está presente em uma e ausente na outra? Não consigo encontrar diferenças de configuração entre os dois sistemas. Eles executam a mesma versão do systemd ( systemd-44-10.1.1.x86_64 ). Se eu duplicar os valores de sysctl, isso não terá efeito. As opções de inicialização são as mesmas. Eu comparei tudo em /etc , /usr e /lib para ver se há alguma diferença de configuração relevante. (Existem diferentes RPMs instalados, mas nenhum que estabeleça arquivos de configuração do sistema, e acho que removi todos os RPMs personalizados.)

Isso é mais do que um fator de curiosidade, porque no Sistema B, não podemos criar um encadeamento SCHED_RR , mas no Sistema A, podemos. Se eu definir DefaultController para NULL em /etc/systemd/system.conf , ele funcionará e a linha 3 desaparecerá (as linhas 1 permanecerão diferentes). Ele também funciona se eu gravar o ID do processo do shell invocador em /sys/fs/cgroup/cpu,cpuacct :

root@msx:/root> ./a.out
Creation of real-time thread FAILED - Operation not permitted
root@msx:/root> cat /proc/$$/cgroup
9:perf_event:/
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct,cpu:/system/sshd.service
2:cpuset:/
1:name=systemd:/system/sshd.service
root@msx:/root> echo $$ > /sys/fs/cgroup/cpu,cpuacct/tasks
root@msx:/root> ./a.out
root@msx:/root> cat /proc/$$/cgroup
9:perf_event:/
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct,cpu:/
2:cpuset:/
1:name=systemd:/system/sshd.service

Não sei por que isso funciona. Meus colegas não estão satisfeitos com o fato de o problema ser entendido, já que não deveria exigir essa alteração de configuração.

O kernel é 3.4.47, CONFIG_RT_GROUP_SCHED está ativado, CONFIG_AUTOGROUP está ativado (a desativação ainda não funciona, mas falha de maneira diferente)

Este é um derivado do link .

    
por eewanco 14.02.2014 / 00:26

1 resposta

1

Existe uma opção de configuração system.conf, DefaultControllers, que controla quais hierarquias cgroup estão anexadas. Por padrão, é cpu. Eu configurei para null e / proc / $$$ / cgroup não lista mais o processo getty sob cpuacct, cpu e o programa de teste funciona. Por que o mesmo arquivo de configuração - eu estava usando o padrão que está em uso nos dois sistemas - produziu dois resultados diferentes, não sei. Não tenho certeza se essa é a melhor maneira de resolver o problema ou porque funciona. Então eu mudei

#DefaultControllers=cpu

para

DefaultControllers=

em /etc/systemd/system.conf e funciona.

    
por 08.08.2014 / 20:34