
Parece que o Linux agenda a execução do processo independentemente do usuário do processo. Portanto, se um usuário estiver executando 100 processos e outro usuário estiver executando 1 processo, em média, o primeiro obterá 100x mais tempo de CPU do que o segundo.
Existe alguma possibilidade de equilibrar o tempo de CPU por usuário, ou seja, neste exemplo, ambos os usuários obtêm 50% do tempo de CPU?
Responder1
Sendo Linux, é claro que os padrões são relativamente básicos, mas existem muitas opções concorrentes de ferramentas para alterá-los. Mas nem todos eles estão disponíveis em todas as distros, então não é óbvio qual deles usar.
Em sistemas cgroups, os recursos da CPU suportam um modelo de distribuição ponderada, onde cada grupo recebe uma fração do recurso disponível em uma proporção de acordo com o peso.
Em sistemas systemd, o conceito de fatia corresponde diretamente ao uso de cgroups. Lerman systemd.resource-control
e considere ativar DefaultCPUAccounting=
. Aplique a mesma proporção de CPU a cada unidade em questão. Por exemplo, para fazer isso com cada usuário interativo, coloque algo como /etc/systemd/system/user-.slice.d/resource.conf
[Unit]
Description:Default CPU ratio
Documentation:man:systemd.resource-control
[Slice]
CPUWeight=100
O valor preciso do número não é importante, desde que cada unidade em questão obtenha algo na proporção correta. Além disso, não é que eles estejam dividindo a CPU total do sistema, mas a CPU atribuída ao user.slice pai. Se, em vez disso, estiver ajustando uma unidade de serviço, ela estará fora do system.slice.
Em sistemas que usam pam_limit, os limites de recursos POSIX podem ser definidos para usuários logados. Veja man limits.conf
, e o arquivo de configuração pode ser um drop-in como /etc/security/limits.d/resource.conf
. Uma coisa prática seria definir nproc
o número máximo de tarefas que um usuário recebe. Excedendo isso, as coisas não conseguem se bifurcar. Ou cpu
é um limite tentador, mas exceder o limite rígido pode começar a matar processos, o que não é uma ótima experiência para o usuário.
E para a versão tarefa do jogo infantil luz vermelha luz verde, existecpulimit. Isso envia sinais SIGSTOP e SIGCONT para gerenciar o uso da CPU, de forma simples. Notavelmente, é um pouco ad hoc porque não há arquivo de configuração, ele precisa ser invocado para iniciar um processo ou receber um PID.
Responder2
Você pode usar cgroup e atribuir o aplicativo de acordo com sua necessidade, uma referência écgroups-v2