Como é bom trabalhar?

20

sched_setscheduler diz:

Todo o planejamento é preventivo: se um processo com uma prioridade estática mais alta ficar pronto para execução, o processo atualmente em execução será antecipado e retornado à lista de espera por seu nível de prioridade estática.

enquanto setpriority diz

Isso faz com que valores agradáveis ​​muito baixos (+19) forneçam realmente pouca CPU a um processo sempre que houver outra carga de prioridade mais alta no sistema e faz com que valores agradáveis ​​altos (-20) entreguem a maioria da CPU aos aplicativos que a exigem.

Então, como a alteração do valor legal influencia a execução dos programas? É semelhante ao agendamento de RT (onde um programa com maior valor agradável interrompe o programa com menor valor agradável)?


Todas as informações na internet são sobre como usar nicee como alterar a prioridade de um processo. Nenhum link explica como exatamente o processo com prioridade diferente funciona. Eu não conseguia encontrar o código fonte.

BЈовић
fonte

Respostas:

24

A proporção do tempo do processador que um processo específico recebe é determinada pela diferença relativa na gentileza entre ele e outros processos executáveis.

O Linux Completely Fair Scheduler (CFS) calcula um peso com base na gentileza. O peso é aproximadamente equivalente a 1024 / (1.25 ^ nice_value). À medida que o valor agradável diminui, o peso aumenta exponencialmente. A divisão do tempo alocada 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 vigor kernel/sched/fair.c.

O CFS tem uma latência de destino para a duração do agendamento. Latências de destino menores produzem melhor interatividade, mas conforme 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 de destino de 20 milissegundos e dois processos executáveis ​​de igual gentileza, os dois processos serão executados por 10 milissegundos cada um antes de serem antecipados em favor do outro processo. Se houver 10 processos de igual gentileza, cada um será executado por 2 milissegundos cada.

Agora considere dois processos, um com uma gentileza de 0 (o padrão) e outro com uma gentileza de 5. A diferença proporcional entre os pesos correspondentes é de aproximadamente 1/3, o que significa que o processo de maior prioridade recebe uma fatia de tempo 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 gentileza de 5 e 10, respectivamente. Embora a gentileza absoluta seja maior nesse caso, as diferenças relativas entre os valores de gentileza são as mesmas do exemplo anterior, produzindo uma divisão idêntica da divisão do tempo.

Thomas Nyman
fonte
Apenas a coisa que eu estava procurando. Obrigado! Mais tarde, encontrei este artigo que explica tudo em detalhes, mas não o que você acabou de escrever.
BЈовић
Há algo que eu não entendo .. qual é o papel do vruntime?
Surfista no outono
O @Surferonthefall vruntime é o mecanismo interno do CFS que mantém o controle de muito tempo que os processos da CPU são alocados. Esta pergunta é sobre o bom valor visível para o espaço do usuário. Se você tiver uma pergunta sobre o funcionamento interno do CFS, e não consegue encontrar uma resposta em outro lugar , fazer uma nova pergunta
Thomas Nyman