Red Hat Training

A Red Hat training course is available for RHEL 8

20.3. Ajuste de la política de programación

En Red Hat Enterprise Linux, la unidad más pequeña de ejecución de procesos se llama hilo. El programador del sistema determina qué procesador ejecuta un hilo y durante cuánto tiempo lo hace. Sin embargo, debido a que la principal preocupación del programador es mantener el sistema ocupado, puede que no programe los hilos de forma óptima para el rendimiento de la aplicación.

Por ejemplo, digamos que una aplicación en un sistema NUMA se está ejecutando en el Nodo A cuando un procesador en el Nodo B está disponible. Para mantener el procesador en el Nodo B ocupado, el programador mueve uno de los hilos de la aplicación al Nodo B. Sin embargo, el hilo de la aplicación sigue necesitando acceso a la memoria en el Nodo A. Pero, esta memoria tardará más en ser accedida porque el hilo se está ejecutando ahora en el Nodo B y la memoria del Nodo A ya no es local para el hilo. Por lo tanto, el hilo puede tardar más en terminar de ejecutarse en el Nodo B de lo que habría tardado en esperar a que un procesador en el Nodo A estuviera disponible, y luego ejecutar el hilo en el nodo original con acceso a la memoria local.

Las aplicaciones sensibles al rendimiento a menudo se benefician de que el diseñador o administrador determine dónde se ejecutan los hilos. El planificador de Linux implementa una serie de políticas de programación que determinan dónde y durante cuánto tiempo se ejecuta un hilo. Las siguientes son las dos categorías principales de políticas de programación:

20.3.1. Programación de la prioridad estática con SCHED_FIFO

La SCHED_FIFO, también llamada programación de prioridad estática, es una política en tiempo real que define una prioridad fija para cada hilo. Esta política permite a los administradores mejorar el tiempo de respuesta de los eventos y reducir la latencia. Se recomienda no ejecutar esta política durante un periodo de tiempo prolongado para tareas sensibles al tiempo.

Cuando SCHED_FIFO está en uso, el programador escanea la lista de todos los hilos de SCHED_FIFO en orden de prioridad y programa el hilo de mayor prioridad que esté listo para ejecutarse. El nivel de prioridad de un subproceso de SCHED_FIFO puede ser cualquier número entero entre 1 y 99, donde 99 se trata como la prioridad más alta. Red Hat recomienda comenzar con un número más bajo y aumentar la prioridad sólo cuando identifique problemas de latencia.

Aviso

Debido a que los hilos en tiempo real no están sujetos a la división del tiempo, Red Hat no recomienda establecer una prioridad como 99. Esto mantiene su proceso en el mismo nivel de prioridad que los hilos de migración y de vigilancia; si su hilo entra en un bucle de cálculo y estos hilos se bloquean, no podrán ejecutarse. Los sistemas con un solo procesador acabarán colgándose en esta situación.

Los administradores pueden limitar el ancho de banda de SCHED_FIFO para evitar que los programadores de aplicaciones en tiempo real inicien tareas en tiempo real que acaparen el procesador.

Los siguientes son algunos de los parámetros utilizados en esta política:

/proc/sys/kernel/sched_rt_period_us
Este parámetro define el periodo de tiempo, en microsegundos, que se considera el cien por cien del ancho de banda del procesador. El valor por defecto es 1000000 μs, o 1 second.
/proc/sys/kernel/sched_rt_runtime_us
Este parámetro define el periodo de tiempo, en microsegundos, que se dedica a ejecutar hilos en tiempo real. El valor por defecto es 950000 μs, o 0.95 seconds.