
Estou executando o servidor básico Ubuntu com dois processos: - processo 1 - realizando cálculo de 100% do tempo de atividade, e que uso para compartilhar o poder de computação com a comunidade (está rodando @prio 19) - processo 2 - realizando cálculos por 5 a 10 minutos, de de vez em quando, que eu uso para calcular para mim (está rodando @prio -19)
Quero que o processo 2 seja fornecido com 100% do poder de computação (o processo 1 naquele momento deve chegar perto de 0% da CPU).
Tentei usar nice/renice e o processo 1 é fornecido com prio 19 (o mais baixo possível) e o processo 2 recebe o prio -19 (o mais alto possível). Mas o melhor que consigo é 50% da CPU para o processo 1 e 50% da CPU para o processo 2 (verificado com htop) - o que me surpreendeu ...
Ambos os processos são multithread e - quando executados sozinhos - consomem 100% de todos os núcleos da CPU. Nenhum outro recurso (E/S, memória, largura de banda, ...) pode influenciar esse uso.
Não quero parar/iniciar manualmente nenhum processo quando precisar de poder de computação (ambos os processos devem estar em execução o tempo todo); 100% da CPU para o processo 2 deve ser fornecido automaticamente.
O que devo fazer para alcançar meu objetivo? Obrigado.
Responder1
Graças ao @ubfan1 explorei diferentes estratégias de agendamento e aqui está o melhor resultado que consegui até agora:
o processo 1 está sendo executado com a política SCHED_BATCH
o processo 2 está sendo executado com a política SCHED_RR
resultados: quando ambos os processos estão rodando simultaneamente: - o processo 1 é dado com ca. 5% da CPU - o processo 2 é fornecido com ca. 95% da CPU
e quando apenas o processo 1 está realizando cálculos (o processo 2 está aguardando minha entrada para iniciar os cálculos) - o processo 1 está usando 100% da CPU
Se alguém estiver mais interessado, leia isto: