Como a prioridade em tempo real de um processo é definida por padrão?

4

Entendo que, para fins de agendamento, os processos do Linux têm um valor "legal" e um valor de prioridade em tempo real e que eles podem ser explicitamente alterados com os comandos nice e chrt . Se o usuário não definir explicitamente a prioridade em tempo real de um processo, como ele é definido?

    
por Ellen Spertus 21.09.2014 / 20:25

2 respostas

5

Para citar Robert Love:

The scheduler does not magically know whether a process is interactive. It requires some heuristic that is capable of accurately reflecting whether a task is I/O-bound or processor-bound. The most indicative metric is how long the task sleeps. If a task spends most of its time asleep it is I/O-bound. If a task spends more time runnable than sleeping, it is not interactive. This extends to the extreme; a task that spends nearly all the time sleeping is completely I/O-bound, whereas a task that spends nearly all its time runnable is completely processor-bound.

To implement this heuristic, Linux keeps a running tab on how much time a process is spent sleeping versus how much time the process spends in a runnable state. This value is stored in the sleep_avg member of the task_struct. It ranges from zero to MAX_SLEEP_AVG, which defaults to 10 milliseconds. When a task becomes runnable after sleeping, sleep_avg is incremented by how long it slept, until the value reaches MAX_SLEEP_AVG. For every timer tick the task runs, sleep_avg is decremented until it reaches zero.

Então, acredito que o kernel decida a política de programação com base nas heurísticas acima. Tanto quanto eu sei, para processos em tempo real, a política de agendamento pode ser SCHED_FIFO ou SCHED_RR . Ambas as políticas são semelhantes, exceto que SCHED_RR tem um intervalo de tempo, enquanto SCHED_FIFO não possui intervalo de tempo.

No entanto, podemos até alterar o agendamento do processo em tempo real também. Você pode consultar esta pergunta sobre como alterar o processo em tempo real agendamento.

Referências

link

    
por 21.09.2014 / 22:10
1

Como um componente do kernel, o agendador de processo, toma as decisões de dividir o tempo do processador entre os processos em um determinado sistema usando um algoritmo de agendamento baseado em prioridade. Começando com uma base inicial ou prioridade padrão de zero (acredito), o escalonador pode aumentar ou diminuir dinamicamente a prioridade para cumprir os objetivos de cronograma com base no fato de o processo ser E / S ou ligado à CPU. Um processo de E / S gasto em espera na prioridade de operações de E / S será aumentado dinamicamente, enquanto o processo de CPU que está consumindo continuamente seu intervalo de tempo (quanto tempo uma tarefa pode ser executada até ser preterido) será reduzido dinamicamente. p>

Dependendo do tipo de aplicativo (interativo, por exemplo, navegador / ide, etc.), o agendador usa diretivas para definir a prioridade e será definido de acordo. Interativo obter maior prioridade como o usuário final espera resposta destes etc.

    
por 21.09.2014 / 21:07