Executar processo linux com prioridade muito baixa?

12

Eu tenho um processo regular que não é tão importante, mas consumirá muita energia da CPU, e eu tenho outro processo que é realmente importante, mas ele passa a maior parte do tempo ocioso, mas quando conseguiu um emprego, ele realmente precisa de alto poder de computação

Tentei correr com nice -20 ./low_priority_processe nice --20 ./high_priority_processmas ainda assim a prioridade mais baixa consumir uma quantidade significativa de CPU quando do processo de alta prioridade está em necessidade, como posso executar um processo que vai realmente produzir ou mesmo auto-suspensão quando outro processo usando o poder da CPU

uray
fonte
Como você está determinando que o processo de alta prioridade é realmente necessário?
muru 22/09/14
isso vai gerar um monte de tópicos, ou o processo de comer a cpu mais de 50% da capacidade da CPU
Uray
Use RRagendamento para o processo de alta prioridade.
Ramesh
@Ramesh Que diferença possível isso fará?
Ken afiada

Respostas:

10

Dê uma olhada no cgroups , ele deve fornecer exatamente o que você precisa - reservas de CPU (e mais). Eu sugiro ler a prioridade de controle de aplicativos usando cgroups .

Dito isso, coloque os processos importantes, mas geralmente ociosos, em grupo com 95% da CPU alocada e seus outros aplicativos em outro com 5% alocado - você terá (quase) toda a energia de seus trabalhos quando necessário, enquanto os processo com fome de energia só terá 5% no máximo nesses momentos. Quando os surtos computacionais desaparecerem, todo o desempenho da CPU será gerado nos processos restantes. Como benefício, se você criar um cgroup especial (com requisitos mínimos de desempenho) para processos como esse sshd, poderá efetuar login independentemente do que estiver tentando obter toda a CPU possível - algum tempo de CPU será reservado sshd.

peterph
fonte
1
existe um comando como cpulimitou nicemodificar o cgroup de processo? porque i se cgroup é uma chamada de API, estou em posição não pode recompilar qualquer um desses aplicativo para uso cgroup
Uray
Não, você apenas monta a hierarquia do cgroup em algum lugar, cria diretórios por grupo e grava PIDs de processos em alguns arquivos. Tudo isso deve ser feito como raiz (ou, mais precisamente, com privilégios apropriados). Alguns sistemas init (ou seja systemd, pelo menos em alguns casos) "roubam" a interface do cgroups de usuários que precisam usar a interface do sistema init (geralmente um comando especial). Leia a resposta vinculada e o artigo da Wikipedia. Realmente. :)
peterph
Ah, e também há o libcgrouppacote, que vem com utilitários para trabalhar com cgroups, incluindo um daemon ( cgrulesengd) que pode realmente classificar processos em grupos, dependendo de algumas condições.
Peterph
7

Se a prioridade do processo (valor agradável) for baixa, não interromperá um processo de prioridade mais alta. A razão que você está vendo o processo de baixa prioridade ainda consome uma quantidade significativa de CPU quando o processo de prioridade maior está funcionando é porque o processo de prioridade mais alta não é que ocupado. Provavelmente esperando IO. Use chrt -p -i 0 $PIDpara executar o processo com uma prioridade ainda menor do que nice 19 -p $PID(assumindo que estamos falando sobre Linux aqui).

chrt -p -i 0 $PID coloca o processo no planejador inativo "true".

http://linux.die.net/man/1/chrt

Ken Sharp
fonte
2
chrt -p -i 0 $ PID
Robert Foss
chrt ainda não é suficiente. O que estou tentando fazer é assistir a vídeos enquanto recodificamos outros vídeos em segundo plano. O uso do chrt ajudou nos vídeos do youtube, mas os mkvs de alta qualidade ainda pulam. O que eu queria é reproduzir meu vídeo normalmente, mas usar todo o poder da CPU restante para reencodificar, porque eu tenho um lote enorme para fazer.
soger 11/01
0

Tente este exemplo para executar um processo como um processo baixo.

Se você é um bom trabalho tar xvf asets.zip

Usar

nice tar xvf assets.zip

Depois disso, emitir

para monitorar o processo descompacte com

ps aux | grep "alcatrão"

Tente algo específico com cpulimit

wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
unzip cpulimit.zip
cd cpulimit-master
make
sudo cp src/cpulimit /usr/bin

cpulimit -l 50 python 0 9999999999> / dev / null &

unixmiah
fonte
yeah -20é "baixa prioridade" e --20é "alta prioridade", olhe para o duplo traço de nicecomando. e sim, eu sou completamente compreender sobre o valor bom, mas a minha pergunta é, existe uma maneira de dizer outro programador que usar bom valor
Uray
2
@ user77710 você tem certeza? Nem a página de manual do Ubuntu nem a página de manual do POSIX especificam esta sintaxe. Ambos uso -n -20, -n 20etc
Muni
yeah o que quer, a sintaxe não é importante, o meu ponto é o valor settng agradável de muito baixa e muito alta para ambos os processos não dá o resultado do que eu queria
Uray
2
@ user77710 O QUE? "a sintaxe não é importante"? Como você pode ter certeza de que está definindo os valores de gentileza?
muru 22/09/14
porque eu posso ver o valor bom processo de htopou topou psou qualquer outra coisa
Uray
-1

Para futuras-chegados, aqui está um exemplo completo de nicecom o estresse .

  1. A máquina de teste possui 2 CPUs
$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2 
On-line CPU(s) list: 0,1
Thread(s) per core:  2
...
  1. Instalar stress:apt-get install stress
  2. Deixe as 2 CPUs ocupadas com uma chamada de baixa prioridade para enfatizar: nice -20 stress --cpu 2
  3. Verifique o uso da CPU com top:
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15894 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.43 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.42 stress                                                                                    

Isso mostra que ambas as CPUs estão totalmente ocupadas.

  1. Inicie um processo de estresse de uma única CPU com alta prioridade: nice --20 stress --cpu 1
  2. Verifique o uso da CPU novamente com top
                                                 v
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15928 ubuntu    20   0    8240    100      0 R  99.7  0.0   0:24.02 stress                                                                                    
15894 ubuntu    39  19    8240     96      0 R  51.2  0.0   1:12.46 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  48.8  0.0   1:12.35 stress                                                                                    

Isso mostra que o processo de estresse de núcleo único obtém sua CPU completa, enquanto os processos de menor prioridade compartilham os 1 CPU restante

  1. Por outro lado, matar todas as stresschamadas acima e acionar apenas um único processo stress --cpu 3resultaria em 66% da CPU para cada
shadi
fonte