Por que este recurso de serviço systemd não é limitado?

3
Ok para sujar as mãos com cgroups e systemd, eu escrevi o programa C mais idiota que eu poderia pensar (apenas um temporizador e um loop de spinlocking while) e batizei com idiot , que eu acompanhei com o seguinte idiot.service de arquivo em /sys/fs/systemd/system/ :

[Unit]
Description=Idiot - pretty idiotic imo

[Service]
Type=simple
ExecStart=/path/to/idiot
User=bruno
CPUShares=100

[Install]
WantedBy=default.target

Então eu fiz sudo systemctl start idiot.service; top | grep idiot , o que previsivelmente me disse que idiot usava 100% da CPU. Agora, de acordo com o link , devemos ser capazes limitar os recursos desse serviço pelo seguinte:

sudo systemctl set-property idiot.service CPUShares=100
sudo systemctl daemon-reload
sudo systemctl restart idiot.service

que eu fiz, seguido por top . Mas isso ainda me diz que idiot está usando 100% da CPU! O que estou fazendo errado?

Observação: eu também tentei adicionar CPUShares=100 ao arquivo da unidade, sem sucesso

    
por embedded_crysis 28.02.2017 / 15:27

1 resposta

3

De acordo com man systemd.resource.control , CPUShares=weight funcionaria da seguinte forma:

The available CPU time is split up among all units within one slice relative to their CPU time share weight.

Como você não nos contou nada sobre outros membros da mesma fatia, presumo que não há outros membros, portanto, seria apropriado que o serviço usasse toda a CPU.

Se você quiser brincar com o controle da CPU, tente CPUQuota=20% . Esta diretiva é documentada assim:

CPUQuota=20% ensures that the executed processes will never get more than 20% CPU time on one CPU.

    
por 28.02.2017 / 15:50