O que exatamente significa um processo de usuário “niced” e “unniced”?

2

Eu estava usando o comando "top" e me deparei com o bom valor. Estou ciente das prioridades e como um bom valor indica a prioridade de um processo. Mas eu não consigo descobrir o que o termo "picado" ou "não-picado" indica.

    
por Alchemist 14.08.2016 / 14:13

1 resposta

2

Esses termos simplesmente se referem a se o valor padrão de um processo foi alterado. Um processo "aguçado" é aquele que foi executado com o comando nice (ou cuja afinidade foi alterada por renice ) e um processo "sem restrições" é aquele que não foi executado com nice . Os valores bons padrão para processos regulares (aqueles que não foram executados com nice command ou cuja bondade não foi posteriormente alterada por renice PID ) são 0. Portanto, processos "não limitados" são aqueles com um bom valor de 0 e "niced" processos são aqueles com um bom valor! = 0.

Um bom valor não indica a prioridade do processo, indica a gentileza do processo. Você pode ver ambos os valores na saída de top :

$ top -b -n1 | head
top - 15:23:10 up 20:59,  1 user,  load average: 1.41, 1.75, 1.88
Tasks: 222 total,   1 running, 221 sleeping,   0 stopped,   0 zombie
%Cpu(s): 14.2 us,  7.9 sy,  0.0 ni, 76.6 id,  0.6 wa,  0.0 hi,  0.6 si,  0.0 st
GiB Mem :    7.791 total,    3.082 free,    3.862 used,    0.846 buff/cache
GiB Swap:   16.000 total,   15.793 free,    0.207 used.    3.485 avail Mem 

  PID USER      PR  NI    VIRT    RES  %CPU %MEM     TIME+ S COMMAND
 1591 terdon    20   0 1605.1m 362.3m  18.8  4.5 285:46.34 S chromium
 1754 terdon    20   0  790.8m 184.5m  18.8  2.3 405:54.21 S chromium
 1186 terdon    20   0 1992.8m 459.6m  12.5  5.8 119:31.59 S cinnamon
                ^^  ^^
                 |   |---------> niceness
                 |-------------> priority

Se eu definir um bom valor para um desses processos do cromo, você verá a diferença:

$ renice 10 1591
1591 (process ID) old priority 0, new priority 10

$ top -b -n1 | head
top - 15:24:56 up 21:01,  1 user,  load average: 0.89, 1.48, 1.77
Tasks: 225 total,   1 running, 224 sleeping,   0 stopped,   0 zombie
%Cpu(s): 14.2 us,  7.9 sy,  0.0 ni, 76.6 id,  0.6 wa,  0.0 hi,  0.6 si,  0.0 st
GiB Mem :    7.791 total,    3.033 free,    3.908 used,    0.849 buff/cache
GiB Swap:   16.000 total,   15.793 free,    0.207 used.    3.439 avail Mem 

  PID USER      PR  NI    VIRT    RES  %CPU %MEM     TIME+ S COMMAND
 1591 terdon    30  10 1605.1m 362.6m  23.5  4.5 286:10.40 S chromium
 1754 terdon    20   0  790.8m 184.5m  18.8  2.3 405:54.21 S chromium
 1186 terdon    20   0 1992.8m 459.6m  12.5  5.8 119:31.59 S cinnamon

O bom valor de um processo é usado para determinar sua prioridade, mas a prioridade real de um processo (a coluna PR ) não é a mesma que a sua gentileza. Simplificando, os valores niceness determinam o quão "agradável" um processo é para os outros processos do seu sistema. Se for muito bom (valores altos e agradáveis), será "educado" e permitirá que outros processos tenham precedência e usem mais tempo de CPU (em outras palavras, ele terá uma baixa prioridade). Se não for legal, ele tentará obter o máximo de tempo de CPU possível (por isso, terá alta prioridade).

Para tornar as coisas ainda mais estranhas, os valores de prioridade variam de -20 (the highest ) a +20 (the lowest ) e os valores de niceness variam de 19 (o maior niceness, de modo que a menor prioridade) para -20 (a menor niceness, então a maior prioridade).

Eu não sei o mecanismo exato pelo qual um valor de niceness é convertido em uma prioridade. Os detalhes parecem depender da versão do kernel e da implementação específica (veja a seção "Notas" aqui ). No entanto, como uma aproximação grosseira, você pode pensar nisso como:

Priority = DefaultPriority + Niceness

Para ilustrar, vou lançar três instâncias de um script chamado foo.sh (que apenas executa um comando sleep ) com valores diferentes de niceness:

foo.sh &                # default
nice -n 10 foo.sh
nice -n 15 foo.sh
sudo nice -n -10 foo.sh 

O último usa sudo porque somente o root pode iniciar processos com prioridade negativa (alta). Agora, vamos ver quais são suas prioridades:

$ top -b -n1 | grep foo.sh
21958 terdon    20   0   13.3m   2.7m   0.0  0.0   0:00.00 S foo.sh
22148 terdon    30  10   13.3m   2.7m   0.0  0.0   0:00.00 S foo.sh
22181 terdon    35  15   13.3m   2.7m   0.0  0.0   0:00.00 S foo.sh
23480 root      10 -10   13.3m   2.6m   0.0  0.0   0:00.00 S foo.sh

Como você pode ver acima, a prioridade é igual à soma do valor de niceness e 20, a prioridade padrão.

    
por terdon 14.08.2016 / 14:50