Agendamento de processos em tempo real no Linux

24

Eu tenho aprendido alguns conceitos de programação. Atualmente, meu entendimento até agora é o seguinte.

  • Existem processos em tempo real e processos em tempo não real.
  • Processos não em tempo real podem ter nicevalores para sua prioridade no intervalo de -20 a +20 . O valor positivo mais alto indica que o processo tem prioridade mais baixa.
  • Os processos em tempo real terão um valor de gentileza listado -conforme explicado nesta resposta aqui . Isso ocorre principalmente porque os processos em tempo real têm prioridades mais altas do que os processos em tempo não real e o valor da gentileza não se aplica a eles.
  • Agora, eu posso usar chrtpara ver os atributos em tempo real de um processo.

Para um processo em tempo real, o chrtresultado é dado como,

chrt -p 5
pid 5's current scheduling policy: SCHED_FIFO
pid 5's current scheduling priority: 99

Como podemos ver no processo 5 , a prioridade é 99, que é a mais alta. Além disso, a política de agendamento éSCHED_FIFO

Agora, para um processo não em tempo real, o chrtresultado é dado como,

chrt -p 22383
pid 22383's current scheduling policy: SCHED_OTHER
pid 22383's current scheduling priority: 0

Como podemos ver no processo 22383 , a prioridade é 0 e a política de agendamento é SCHED_OTHER.

Questões

  1. É possível fazer qualquer processo como processo em tempo real?
  2. É possível definir outro algoritmo de agendamento que SCHED_OTHERnão seja um processo em tempo não real?
  3. A partir daqui , também vejo que eu poderia modificar o atributo para um processo em execução como,

    chrt -p prio pid
    

    Além disso, vejo chrt -ma lista de algoritmos de agendamento. O comando me dá a saída como,

    SCHED_OTHER min/max priority    : 0/0
    SCHED_FIFO min/max priority     : 1/99
    SCHED_RR min/max priority       : 1/99
    SCHED_BATCH min/max priority    : 0/0
    SCHED_IDLE min/max priority     : 0/0
    

    Agora, como sugerido acima, se eu definir chrt -p 55 22383qual algoritmo será usado?

Ramesh
fonte

Respostas:

19

Questão 1

É possível que um usuário use a prioridade em tempo real para um processo também. Esta configuração pode ser definida a partir do /etc/security/limits.confarquivo Eu vejo o conteúdo abaixo nesse arquivo.

# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>

Se verificarmos a seção do item, veremos a entrada abaixo, que permite definir uma prioridade em tempo real para os usuários.

#        - rtprio - max realtime priority

Pergunta 2 e Pergunta 3

Para definir a política de agendamento SCHED_FIFO, digite:

chrt -f -p [1..99] {pid}

Para definir a política de agendamento SCHED_RR, digite:

chrt -r -p [1..99] {pid}

Portanto, para responder à pergunta 3, devemos verificar os algoritmos de agendamento disponíveis e as prioridades usando o chrt -mcomando e, em seguida, usar qualquer algoritmo de agendamento que atenda às nossas necessidades. Para definir prioridades diferentes, poderíamos usar os comandos acima.

Ramesh
fonte