Processo 'gentileza' versus 'prioridade'

67

Ao executar top , posso ver a saída de exemplo (abreviada):

  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

Há dois valores em que estou interessado: PR (Priority) e NI (Niceness).

Se eu entendi o que eu 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ê poderia também descrever como manipular esses valores de um processo e sob quais circunstâncias isso pode ser útil?

    
por Byte Commander 05.08.2015 / 11:17

2 respostas

67

valor interessante é um espaço do usuário e a prioridade PR é a prioridade real do processo que é usada pelo kernel do Linux. No sistema linux, as prioridades são de 0 a 139, nas quais 0 a 99 para tempo real e 100 a 139 para usuários. O bom intervalo de valores é de -20 a +19, onde -20 é mais alto, 0 padrão e +19 é menor. A relação entre valor legal e prioridade é:

PR = 20 + NI

então, o valor de PR = 20 + (-20 to +19) é 0 a 39, que mapeia de 100 a 139.

De acordo com o manual principal:

  

PR - Priority A prioridade de agendamento da tarefa. Se você ver   'rt' neste campo, isso significa que a tarefa está sendo executada em 'tempo real'   prioridade de agendamento.

NI é um bom valor de tarefa.

  

NI - Nice Value O bom valor da tarefa. Um negativo bom   valor significa maior prioridade, enquanto um valor positivo significa menor   priority.Zero neste campo significa simplesmente que a prioridade não será ajustada   na determinação da capacidade de despacho de uma tarefa

Editar: Por padrão, quando um programa é lançado no Linux, ele é iniciado com a prioridade '0'. No entanto, você pode alterar a prioridade de seus programas usando um dos seguintes métodos.

  1. Você pode iniciar um programa com sua prioridade exigida usando

    nice -n nice_value program_name
    
  2. você também pode alterar a prioridade de um processo já em execução usando

    renice -n nice_value -p process_id
    
por pl_rock 05.08.2015 / 11:51
19

O que é prioridade e por que devo me importar?

Quando se fala em prioridade de processos, tudo gira em torno do gerenciamento do tempo do processador. O processador ou CPU é como um humano fazendo malabarismos com várias tarefas ao mesmo tempo. Às vezes, podemos ter espaço suficiente para realizar vários projetos. Às vezes podemos nos concentrar apenas em uma coisa de cada vez. Outras vezes, algo importante aparece e queremos dedicar toda a nossa energia para resolver esse problema e, ao mesmo tempo, colocar tarefas menos importantes em segundo plano.

No Linux, podemos definir diretrizes para a CPU seguir quando estiver analisando todas as tarefas que precisa realizar. Essas diretrizes são chamadas de gentileza ou valor agradável. A escala de nicencia do Linux vai de -20 a 19. Quanto menor o número, maior a prioridade da tarefa. Se o valor niceness for alto número como 19, a tarefa será configurada para a prioridade mais baixa e a CPU processará essa tarefa sempre que tiver uma chance. O valor legal padrão é zero.

Ao usar essa escala, podemos alocar nossos recursos de CPU de maneira mais apropriada. Programas de menor prioridade que não são importantes podem ser configurados para um valor mais alto, enquanto programas de alta prioridade, como daemons e serviços, podem ser configurados para receber mais foco da CPU. Você pode até mesmo dar a um usuário específico um valor mais baixo para todos os processos dele, para que você possa limitar a capacidade deles de retardar os serviços principais do computador.

Fonte

Defina a prioridade para novos processos com nice , por exemplo

nice -n 10 firefox

para processos existentes

renice 10 -p $(pgrep firefox)

Para definir a prioridade <0 , você precisa de sudo , por exemplo:

renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied

mas não para uma prioridade >=0

Exemplo

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          19   0

% renice 10 -p 2769     # note, we don't need sudo here
2769 (process ID) old priority 0, new priority 10

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox           9  10

% sudo renice -19 -p 2769                    
 2769 (process ID) old priority 10, new priority -19

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          38 -19

Outro exemplo

Para renunciar a todos os processos em execução para um usuário específico

renice 20 -u user_name
    
por A.B. 05.08.2015 / 13:06