Como posso verificar se 'nice' está funcionando?

5

Olhando para diferentes tarefas em execução em um sistema com recursos compartilhados, parece que os bons valores estão sendo ignorados. Muitos trabalhos com bom conjunto de 19 estão rodando a 100% da carga cpu, enquanto outros muitos trabalhos com bom conjunto em 0 estão rodando tão baixo quanto 10% da carga cpu. Todos esses processos são exigentes e executados em um sistema ocioso que seria o máximo de cada CPU fornecida a ele (por exemplo, NAMD ).

Eu li aqui que

"...while [a nice] value is adjustable it can be ignored by the kernel's scheduler in Linux implementations."

Isso é verdade? É possível que o kernel esteja ignorando o bom valor? Parece que isso é o que está acontecendo, mas como posso ter certeza? Eu não quero fazer isso em um problema com o administrador do sistema sem ter mais certeza. Eu li as postagens relacionadas discutindo Como é bom trabalhar? e nice não está realmente ajudando no Linux , mas estes não discutem não trabalhar com cargas de CPU.

Será que, uma vez que uma tarefa tenha recursos, ela será mantida por algum tempo antes de ser reatribuída à tarefa de prioridade mais alta? A tarefa de baixa prioridade está em execução há dias, enquanto a tarefa de prioridade mais alta inicia repetidamente vários cálculos curtos, mas exigentes, que são executados por menos de 10 minutos. Será que, entre as tarefas curtas, o sistema fornece recursos para a tarefa de baixa prioridade que, então, os mantém?

Eu acredito que o sistema que estou experimentando isso está em uma instalação do CentOS 6.5 StackIQ (embora eu possa facilmente ser confundido com algum detalhe ).

    
por Steven C. Howell 11.08.2015 / 04:13

3 respostas

1

10 minutos são de muito longo prazo no que diz respeito ao agendador do Linux. Fatias de tempo são algo como 10 ms.

Ao observar as porcentagens de uso da CPU, lembre-se de que top adiciona o uso por thread de processos multithread. Portanto, um processo de 10 threads que tem cada thread recebendo 10% de tempo ativo será exibido usando 100% de CPU.

O programador do Linux não passará fome na tarefa nice 19 (porque os erros de deadlock são difíceis de evitar se um processo puder ser desregulado para sempre), então mesmo nice 19 não impedirá que uma tarefa obtenha algum tempo de CPU. Se tiver muitos segmentos, ainda poderá usar recursos significativos da CPU.

Se alguns dos processos estiverem bloqueando a E / S, especialmente a paginação de memória virtual, o% de uso da CPU diminuirá. Execute algo como dstat para ver interrupções de uso da CPU, disco, rede, paginação e opções de contexto. É como vmstat , mas colorido e agradável.

Certifique-se de que seus processos realmente estão alinhados do jeito que você pensa que estão, olhando para a coluna NI na parte superior. (É improvável que diferentes threads no mesmo processo tenham níveis diferentes, mas eu acho possível.)

Se você estiver usando renice , lembre-se de que não é recursivo. O renegamento de um processo pai não afetará os filhos existentes, apenas os futuros filhos.

    
por 11.08.2015 / 19:01
5

O bom valor não informa nada sobre a carga real da cpu, um processo produz.

Nice-ness é exatamente o que você pensaria: o modo como um processo se comporta sob certas cargas de trabalho.

Para ser mais exato:

  • se for agendado um processo com um valor alto (== menor possibilidade de agendamento), ele manterá a cpu, até que um processo com menor valor agradável e / ou maior prioridade solicite a cpu e possa criar 100% de carga.

  • se um processo com menor valor legal (= = maior probabilidade de agendamento) abandonar a cpu, pode não ter usado no pico.

É por isso que você vê processos menores usando menos CPU do que processos com mais nítidos: o processo mais agradável vai desistir mais facilmente, mas obviamente tem mais trabalho a fazer no momento ...

    
por 11.08.2015 / 09:52
3

Muitos processos em seu sistema estão apenas aguardando que algo aconteça. Isso é o que a maioria dos processadores de servidor ou daemons fazem (por exemplo, ssh, mail, X).

Se você estiver trabalhando em um processador de texto, ele apenas ficará aguardando até você clicar em algum lugar ou digitar algo. Na maioria das vezes, o processo não é agendado e usa uma quantidade muito baixa de tempo de CPU. Você pode definir o valor legal para este processo como zero e ele não terá nenhum efeito perceptível.

Se, no entanto, você estiver usando um programa para renderizar imagens 3D de alta resolução ou processar animações ou vídeos, o valor legal terá um efeito.

Processos com recursos compartilhados enfrentam outro problema: recursos compartilhados. Eles terão que esperar pelo recurso enquanto outro processo estiver usando.

Um disco rígido é um exemplo. Se um processo iniciar uma operação de disco de hark (por exemplo, ler ou gravar um arquivo), ele será suspenso pelo sistema até que a operação seja concluída. Mesmo um valor legal zero não vai ajudá-lo lá. Enquanto o processo estiver suspenso, ele não utilizará nenhum tempo de CPU.

O efeito de nice pode ser muito sutil; -)

    
por 11.08.2015 / 09:34