O que significa um valor de gentileza de (-)?

19

De acordo com a página do manual, e wikipedia; nicevaria de -20 a 20.

No entanto, quando executo o seguinte comando, encontro alguns processos com um valor não numérico, como (-). Veja a sexta coluna da esquerda com o título 'NI'.

O que indica uma gentileza de (-)?

 ps axl 
 F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0     1     0  20   0  19356  1548 poll_s Ss   ?          0:00 /sbin/init
1     0     2     0  20   0      0     0 kthrea S    ?          0:00 [kthreadd]
1     0     3     2 -100  -      0     0 migrat S    ?          0:03 [migration/0]
1     0     4     2  20   0      0     0 ksofti S    ?          0:51 [ksoftirqd/0]
1     0     5     2 -100  -      0     0 cpu_st S    ?          0:00 [migration/0]
5     0     6     2 -100  -      0     0 watchd S    ?          0:09 [watchdog/0]
1     0     7     2 -100  -      0     0 migrat S    ?          0:08 [migration/1]
1     0     8     2 -100  -      0     0 cpu_st S    ?          0:00 [migration/1]
1     0     9     2  20   0      0     0 ksofti S    ?          1:03 [ksoftirqd/1]
5     0    10     2 -100  -      0     0 watchd S    ?          0:09 [watchdog/1]
1     0    11     2 -100  -      0     0 migrat S    ?          0:05 [migration/2]

Eu verifiquei 3 servidores em execução: Ubuntu 12.04 e CentOs 6.5 e Mac OsX 10.9. Somente as máquinas Ubuntu e CentOs têm valores de nicho sem dígito.

spuder
fonte
FYI: Todos esses processos cujos nomes estão são na [brackets]verdade kthreads (threads do kernel).
Jonathon Reinhart

Respostas:

18

O que indica uma gentileza de (-)?

Observe que eles também têm uma pontuação PRI de -100; isso indica que o processo está agendado como um processo em tempo real . Os processos em tempo real não usam pontuações agradáveis ​​e sempre têm uma prioridade mais alta que a normal, mas ainda diferem entre si.

Você pode visualizar detalhes por processo com o chrtcomando (por exemplo chrt -p 3). Um dos seus -100 provavelmente reportará uma "prioridade de agendamento atual" de 99 - ao contrário nice, aqui os valores altos são de prioridade mais alta, provavelmente o local de onde o -100número foi criado . Os processos não em tempo real sempre mostram uma "prioridade de agendamento atual" de 0, chrtindependentemente do valor agradável, e no linux uma "política de agendamento atual" de SCHED_OTHER.

Somente as máquinas Ubuntu e CentOs possuem valores de nicho sem dígito.

Algumas versões do topparecem relatar processos em tempo real rtno PRI e depois 0no NI .

Cachinhos Dourados
fonte
Resposta maravilhosa. Eu sabia que tinha algo a ver com -100, mas não conseguiu descobrir isso :)
Ramesh
6

A resposta de @ Goldlilock me direcionou a fazer a pesquisa no caminho certo. Estes são os detalhes da minha pesquisa.

Algoritmos de agendamento disponíveis para processos

O Linux suporta três políticas de agendamento. SCHED_FIFO,, SCHED_RRe SCHED_OTHER. SCHED_OTHERé a política padrão do planejador universal de compartilhamento de tempo usada pela maioria dos processos; SCHED_FIFOe SCHED_RRdestinam-se a aplicativos críticos de tempo especiais que precisam de controle preciso sobre a maneira como os processos executáveis ​​são selecionados para execução.

Prioridades disponíveis

Para selecionar um processo a ser executado, o planejador do Linux deve considerar a prioridade de cada processo. Na verdade, existem dois tipos de prioridade.

Um valor de prioridade estática é atribuído a cada processo e o planejamento depende dessa prioridade estática. Processos agendados com SCHED_OTHERprioridade estática 0; processos agendados sob SCHED_FIFOou SCHED_RRpodem ter uma prioridade estática no intervalo 1de 99(99 é o mais alto).

A sys_sched_get_priority_max( )rotina retorna a prioridade estática do processo, retorna 0para processos não em tempo real.

A prioridade dinâmica é usada para aplicativos em tempo não real.

Todos os processos em tempo real têm uma prioridade mais alta que os processos normais. O Linux implementa prioridades em tempo real de acordo com o POSIX. O gráfico abaixo pode fornecer uma visão geral de como os processos são agendados com suas prioridades.

HIGH PRIORITY – - – - – > – - – - – > – - – - – > – - – - – > – - – – LEAST PRIORITY
……..real time priority (static priority)…….| …. nice value (dynamic priority) …..
99 ……………………….. 50 ……………………… 1 | -20 …….. -10 …….. 0 …….. 10 ……. 19

Agora, podemos emitir o comando abaixo para verificar a prioridade em tempo real de um processo. Aqui estou usando o watchdog, pois tinha um bom valor listado como -.

ps -e -o class,rtprio,pri,nice,cmd | grep watchdog

Esta é a saída do comando acima. Como podemos ver, a prioridade em tempo real é 99, que é a maior prioridade possível.

FF      99 139   - [watchdog/0]
FF      99 139   - [watchdog/1]
TS       -  21   0 grep watchdog

Portanto, de acordo com meu entendimento, a prioridade em tempo real pode ter um valor máximo de 99 e, portanto, não pode haver nenhum valor legal sobre ela. Essa é a razão, obtemos uma boa saída como - para watchdog e outros processos do sistema.

Referências

http://oreilly.com/catalog/linuxkernel/chapter/ch10.html http://atipaday.wordpress.com/2008/08/19/atad-21-linux-process-priority-range/

Ramesh
fonte