Programación de procesos en tiempo real en Linux

24

He estado aprendiendo algunos conceptos de programación. Actualmente mi comprensión hasta ahora es la siguiente.

  • Hay procesos en tiempo real y procesos en tiempo no real.
  • Los procesos en tiempo no real pueden tener nicevalores para su prioridad en el rango de -20 a +20 . El valor positivo más alto indica que el proceso tiene menor prioridad.
  • Los procesos en tiempo real tendrán un valor de amabilidad enumerado -como se explica en esta respuesta aquí . Esto se debe principalmente a que los procesos en tiempo real tienen prioridades más altas que los procesos en tiempo no real y el valor de amabilidad no se aplica a ellos.
  • Ahora, puedo usar chrtpara ver los atributos en tiempo real de un proceso.

Para un proceso en tiempo real, la chrtsalida da como,

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

Como podemos ver en el proceso 5 , la prioridad es 99, que es la más alta. Además, la política de programación esSCHED_FIFO

Ahora, para un proceso en tiempo no real, la chrtsalida da como,

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

Como podemos ver para el proceso 22383 , la prioridad es 0 y la política de programación es SCHED_OTHER.

Preguntas

  1. ¿Es posible para mí hacer algún proceso como proceso en tiempo real?
  2. ¿Es posible para mí establecer algún otro algoritmo de programación que no sea SCHED_OTHERpara un proceso en tiempo no real?
  3. Desde aquí , también veo que podría modificar el atributo para un proceso en ejecución como,

    chrt -p prio pid
    

    Además, veo chrt -mque me da la lista de algoritmos de programación. El comando me da la salida 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
    

    Ahora, como se sugirió anteriormente, si configuro chrt -p 55 22383qué algoritmo se usará.

Ramesh
fuente

Respuestas:

19

Pregunta 1

También es posible que un usuario use la prioridad en tiempo real para un proceso. Esta configuración se puede establecer desde el /etc/security/limits.confarchivo. Veo el contenido a continuación en ese archivo.

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

Si revisamos la sección de elementos, vemos la siguiente entrada que permite establecer una prioridad en tiempo real para los usuarios.

#        - rtprio - max realtime priority

Pregunta 2 y pregunta 3

Para establecer la política de programación en SCHED_FIFO, ingrese:

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

Para establecer la política de programación en SCHED_RR, ingrese:

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

Entonces, para responder la pregunta 3, debemos verificar los algoritmos de programación disponibles y las prioridades utilizando el chrt -mcomando y luego usar cualquier algoritmo de programación que se adapte a nuestras necesidades. Para establecer diferentes prioridades, podríamos usar los comandos como se indica arriba.

Ramesh
fuente