Ao executar top
, posso ver este exemplo (abreviado) de saída:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4586 ipc-adm+ 20 0 1303900 605152 92844 S 30,6 29,3 3:52.88 firefox
3985 ipc-adm+ 20 0 258588 124508 63072 S 12,2 6,0 0:40.04 compiz
3092 root 20 0 172392 56164 25980 S 6,1 2,7 0:30.13 Xorg
Estou interessado em dois valores: PR
(Prioridade) e NI
(Niceness).
Se eu entendi o que já descobri corretamente, ambos determinam quanto tempo de CPU um processo terá em contraste com outros processos. Mas qual é a diferença entre esses valores então?
Você também pode descrever como manipular esses valores de um processo e sob quais circunstâncias isso pode ser útil?
fonte
niceness
podem ser usados para dar uma prioridade negativa, de modo que a tarefa com aniceness
saída de tarefas de alta prioridade fique fora do caminho. (ou seja, ele está sendonice
e deixando outros recursos de acesso ou se isso só me confundir?pr
20, então iguais, a tarefa 1 tem umni
de 0 e a tarefa 2 tem umni
de 20; portanto, isso significa que a tarefa 2 abriria mão de recursos para a tarefa 1 porque énicer
O que é prioridade e por que devo me preocupar?
Ao falar sobre processos, a prioridade é gerenciar o tempo do processador. O processador ou CPU é como um humano que manipula várias tarefas ao mesmo tempo. Às vezes, podemos ter espaço suficiente para assumir vários projetos. Às vezes, podemos focar apenas uma coisa de cada vez. Outras vezes, algo importante aparece e queremos dedicar toda a nossa energia para resolver esse problema, colocando tarefas menos importantes em segundo plano.
No Linux, podemos definir diretrizes para a CPU seguir quando estiver analisando todas as tarefas que precisa executar. Essas diretrizes são chamadas de gentileza ou bom valor. A escala de privacidade do Linux vai de -20 a 19. Quanto menor o número, maior a prioridade que essa tarefa recebe. Se o valor da gentileza for um número alto como 19, a tarefa será definida com a menor prioridade e a CPU a processará sempre que houver uma chance. O valor legal padrão é zero.
Ao usar essa escala, podemos alocar nossos recursos de CPU de maneira mais apropriada. Programas de prioridade mais baixa que não são importantes podem ser configurados com um valor agradável mais alto, enquanto programas de alta prioridade como daemons e serviços podem ser configurados para receber mais do foco da CPU. Você pode até dar a um usuário específico um valor agradável mais baixo para todos os seus processos, para limitar sua capacidade de desacelerar os serviços principais do computador.
Fonte
Defina a prioridade para novos processos com
nice
, por exemplopara processos existentes
Para definir a prioridade que
<0
você precisasudo
, por exemplo:mas não por prioridade
>=0
Exemplo
Outro exemplo
Para renovar todos os processos em execução para um usuário específico
fonte
renice 10
também funcionaria semsudo
, certo? E você poderia adicionar um exemplo para tornar todos os processos de um usuário específico mais agradáveis? Isso seria realmente bastante útil se outra pessoa estivesse conectada ao mesmo tempo e tivesse alguns processos desnecessários, mas que consumiam recursos em execução (como um jogo em pausa no Firefox, os irmãos mais novos fazem essas coisas ...: - /)0
ou… existe o problema;)ps
é:PRI: 38, NI: -19
no entanto, comtop
isso éPR:1, NI -19
por que isso?Resposta curta
PR é o nível de prioridade. Quanto menor o PR, maior será a prioridade do processo.
O PR é calculado da seguinte forma:
Resposta longa
Existem 2 tipos de processos, os normais e o tempo real. Para os normais (e apenas para aqueles), nice é aplicado da seguinte forma:
agradável
A escala de "gentileza" vai de -20 a 19, enquanto -20 é a prioridade mais alta e 19 a prioridade mais baixa. O nível de prioridade é calculado da seguinte forma:
PR = 20 + NI
Onde NI é o bom nível e PR é o nível de prioridade. Então, como podemos ver, o -20 é mapeado para 0, enquanto o 19 é mapeado para 39.
Por padrão, um valor agradável do programa é 0, mas é possível que o usuário root inicie programas com um valor agradável especificado usando o seguinte comando:
Tempo real
Poderíamos ir ainda mais longe. A boa prioridade é realmente usada para programas do usuário. Enquanto a prioridade geral do UNIX / LINUX possui um intervalo de 140 valores, o valor agradável permite que o processo seja mapeado para a última parte do intervalo (de 100 a 139). Essa equação deixa os valores de 0 a 99 inacessíveis, que corresponderão a um nível PR negativo (de -100 a -1). Para poder acessar esses valores, o processo deve ser declarado como "tempo real".
Existem 5 políticas de agendamento em um ambiente LINUX que podem ser exibidas com o seguinte comando:
O que mostrará a seguinte lista:
Os processos de agendamento podem ser divididos em 2 grupos, as políticas normais de agendamento (1 a 3) e as políticas de agendamento em tempo real (4 e 5). Os processos em tempo real sempre terão prioridade sobre os processos normais. Um processo em tempo real pode ser chamado usando o seguinte comando (O exemplo é como declarar uma política SCHED_RR):
Para obter o valor PR para um processo em tempo real, a seguinte equação é aplicada:
PR = -1 - rt_prior
Onde rt_prior corresponde à prioridade entre 1 e 99. Por esse motivo, o processo que terá maior prioridade sobre outros processos será aquele chamado com o número 99.
É importante observar que, para processos em tempo real, o bom valor não é usado.
Para ver a atual "gentileza" e o valor PR de um processo, o seguinte comando pode ser executado:
O que mostra a seguinte saída:
Na figura, os valores PR e NI são exibidos. É bom observar o processo com o valor PR -51 que corresponde a um valor em tempo real. Existem também alguns processos cujo valor PR é declarado como "rt". Na verdade, esse valor corresponde a um valor PR de -100.
fonte