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.