Como é bom trabalhar?

19

sched_setscheduler diz:

All scheduling is preemptive: if a process with a higher static priority becomes ready to run, the currently running process will be preempted and returned to the wait list for its static priority level.

enquanto define a prioridade diz

This causes very low nice values (+19) to truly provide little CPU to a process whenever there is any other higher priority load on the system, and makes high nice values (-20) deliver most of the CPU to applications that require it

Então, como mudar o bom valor vai influenciar a execução dos programas? É semelhante ao agendamento RT (onde um programa com um valor mais alto vai interromper o programa com um valor mais baixo)?

Todas as informações na internet são como usar nice e como alterar a prioridade de um processo. Nenhum link explica como exatamente o processo com diferentes prioridades funciona. Eu não consegui encontrar o código fonte.

    
por BЈовић 09.09.2013 / 08:34

1 resposta

20

A proporção do tempo de processamento que um processo particular recebe é determinada pela diferença relativa de gentileza entre ele e outros processos executáveis.

O Completely Fair Scheduler do Linux (CFS) calcula um peso baseado no niceness. O peso é aproximadamente equivalente a 1024 / (1.25 ^ nice_value) . À medida que o bom valor diminui, o peso aumenta exponencialmente. O timeslice alocado para o processo é proporcional ao peso do processo dividido pelo peso total de todos os processos executáveis. A implementação do CFS está em kernel/sched/fair.c .

O CFS tem uma latência de destino para a duração do agendamento. As latências alvo menores geram melhor interatividade, mas à medida que a latência de destino diminui, a sobrecarga de comutação aumenta, diminuindo assim a taxa de transferência geral.

Dado, por exemplo, uma latência alvo de 20 milissegundos e dois processos executáveis de igual nicencia, então ambos os processos serão executados por 10 milissegundos cada, antes de serem antecipados em favor do outro processo. Se houver 10 processos de igual nicencia, cada um deles será executado por 2 milissegundos.

Agora considere dois processos, um com niceness de 0 (o padrão), o outro com um niceness de 5. A diferença proporcional entre os pesos correspondentes é aproximadamente 1/3, o que significa que o processo de prioridade mais alta recebe um timeslice de aproximadamente 15 milissegundos enquanto o processo de prioridade mais baixa recebe um intervalo de tempo de 5 milissegundos.

Por fim, considere dois processos com os valores de niceness de 5 e 10, respectivamente. Embora o valor absoluto seja maior nesse caso, as diferenças relativas entre os valores de niceness são as mesmas do exemplo anterior, gerando uma divisão idêntica de timeslice.

    
por 12.09.2013 / 09:40