É possível fazer um programa não ocupar mais de 50% da CPU?

2

Atualmente eu tenho um programa ocupando muito da CPU.

Como eu poderia limitar a quantidade de CPU que ocupa?

O SO é Linux, Fedora .

Não posso modificar o código-fonte desse programa.

O que eu preciso é de um comando Bash .

    
por Peter Mortensen 17.03.2010 / 17:15

8 respostas

8

Você pode tentar limitar seu programa diminuindo a prioridade com bom. Nenhuma programação envolvida lá.

    
por 12.06.2009 / 22:47
4

A execução na CPU "50%" não é tão significativa. Você quer que o programa use todos os recursos possíveis quando estiver disponível. Se a CPU não estiver fazendo mais nada, esse programa também pode aproveitá-la completamente. Se você quisesse que o programa realmente não fizesse nada, você teria que modificar o código-fonte e colocar em pausas / pausas onde fosse possível.

O que você quer é ter todo o resto com maior prioridade. Veja a manpage do belo comando, execute-o em nice 19

Outra maneira possivelmente mais eficaz de limitar recursos é instalar o pacote schedutils e executar o programa usando o agendador de processos SCHED_BATCH.

    
por 12.06.2009 / 22:52
2

Setrlimit e co ...

#include <sys/resource.h>
#include <sys/time.h>
#include <unistd.h>

int main ()
{
 struct rlimit rl;

 /* Obtain the current limits. */
 getrlimit (RLIMIT_CPU, &rl);
 /* Set a CPU limit of 1 second. */
 rl.rlim_cur = 1;
 setrlimit (RLIMIT_CPU, &rl);
 /* Do busy work. */
 while (1);

 return 0;
}

daqui

    
por 12.06.2009 / 22:47
2

Você está procurando por algo simples e rápido? Experimente o programa de credencial . Basta executar:

cpulimit name-of-program

e voila, é limitado.

    
por 16.06.2009 / 22:28
1

Se você não quiser modificar o programa, outra opção a considerar é a virtualização.

    
por 12.06.2009 / 22:47
1

Se você quiser limitar a cpu de um processo, com base no conceito de porcentagem, considere cpulimit .

    
por 13.06.2009 / 01:26
0

Você pode fazer manualmente o fatiamento de tempo dentro do aplicativo usando um cronômetro de alto desempenho e medindo quanto tempo cada iteração de um loop de nível superior está tomando e, em seguida, colocar em pausas adequadas (ou nanosleeps) nesse loop. Isso não se correlacionará diretamente a uma porcentagem de CPU, especialmente entre máquinas, mas limitará os recursos de CPU que o programa leva.

    
por 12.06.2009 / 22:47
0

Dê uma olhada nos Grupos de Controle.

O LWN tem um artigo sobre eles .

Redhat, Fedora, CentOS têm um pacote RPM chamado libcgroup que tem várias ferramentas úteis de linha de comando, um daemon do sistema e alguns arquivos de configuração para gerenciar grupos de controle.

Isso é baseado no libcg hospedado no SourceForge.

    
por 16.06.2009 / 22:25

Tags