Control de Procesos en Tiempo Real en Linux con chrt

Visión general

En entornos Linux de alto rendimiento, gestionar de forma directa las políticas de planificación y las prioridades de ejecución constituye un pilar esencial para garantizar latencias mínimas en operaciones críticas. A lo largo de esta guía práctica, desglosaremos el funcionamiento de la utilidad chrt—herramienta clave del paquete util-linux—para dominar los algoritmos de tiempo real del kernel (como FIFO y Round-Robin). Desde la instalación del instrumental necesario en Ubuntu hasta la alteración dinámica de prioridades en procesos en segundo plano y su posterior supervisión, abordaremos cada fase paso a paso.

Verificación de directivas de planificación y rangos en chrt

Antes de interactuar con el planificador, garantizamos la presencia de las utilidades base actualizando los repositorios del sistema e instalando los paquetes util-linux y procps.

Instalación de paquetes requeridos en Ubuntu

La utilidad chrt permite tanto auditar como modificar las propiedades de despacho en tiempo real asociadas a cualquier hilo o proceso.
Al invocar el flag -m, la herramienta consulta al kernel para exponer el catálogo completo de políticas disponibles y los umbrales de prioridad (mínimos y máximos) permitidos en el sistema.
⚙️ [Parámetros esenciales]

-m : Muestra las políticas de planificación activas en el sistema y los límites numéricos de prioridad admitidos.
-p : Permite inspeccionar o redefinir la directiva de ejecución de un PID específico.
-f : Establece la política en tiempo real de tipo primero en entrar, primero en salir (SCHED_FIFO).
-r : Asigna la política de turnos rotativos en tiempo real (SCHED_RR).
-o : Aplica la política convencional de tiempo compartido estándar del kernel (SCHED_OTHER).
-b : Configura el modo por lotes orientado a tareas masivas sin interactividad (SCHED_BATCH).
-i : Relega el hilo a ejecutarse únicamente cuando la CPU permanece ociosa (SCHED_IDLE).
-d : Implementa la directiva de despacho basada en plazos temporales estrictos (SCHED_DEADLINE).

Consulta de directivas soportadas con chrt -m

Inspección del estado y la política de despacho por defecto

Para llevar a cabo las pruebas sin poner en riesgo cargas operativas, lanzamos una tarea inofensiva en segundo plano con una pausa de 600 segundos mediante la instrucción sleep 600 &.

Creación de proceso sleep en segundo plano

Con el fin de agilizar las referencias a este hilo en comandos posteriores, almacenamos de inmediato su PID en una variable de terminal ejecutando TARGET_PID=$!.

Captura del PID en variable de entorno

Al consultar las características de este proceso con chrt -p, el sistema revela su configuración de fábrica.
Como es habitual en procesos estándar, se encuentra gobernado por la política de reparto equitativo SCHED_OTHER y mantiene un valor de prioridad nulo (0).

Auditoría de política predeterminada mediante chrt

Para obtener una perspectiva más detallada desde la óptica del gestor de procesos, recurrimos a ps con el modificador -o, solicitando la clase de planificación (CLS), la prioridad de tiempo real (RTPRIO) y la prioridad base del núcleo (PRI).
El informe confirma la clase de tiempo compartido (TS), dejando vacía la prioridad de tiempo real (-) y reflejando el valor interno predeterminado de 19.

Inspección de atributos de prioridad con el comando ps

Transición hacia políticas de tiempo real: SCHED_FIFO y SCHED_RR

Ejecutamos sudo chrt -f -p 50 $TARGET_PID para transformar la política del proceso hacia el esquema estricto de cola SCHED_FIFO, asignándole un nivel de prioridad en tiempo real de 50.
Debido a que estas modificaciones alteran el orden en que el procesador atiende las tareas y pueden condicionar la estabilidad general, se requiere elevación de privilegios (sudo).

Configuración de la directiva SCHED_FIFO

Revisamos la nueva configuración ejecutando de nuevo chrt -p.
La salida confirma de forma concluyente que el hilo ahora se rige bajo la directiva SCHED_FIFO y que el registro de prioridad en tiempo real ha subido eficazmente a 50.

Verificación de la asignación SCHED_FIFO

A continuación, reconfiguramos el proceso para evaluar el comportamiento bajo turnos rotativos ejecutando sudo chrt -r -p 30 $TARGET_PID, estableciendo la prioridad en 30.
La directiva SCHED_RR asegura que los distintos procesos con la misma categoría de prioridad compartan los núcleos mediante rodajas de tiempo controladas (time slices), evitando bloqueos prolongados causados por una sola tarea.

Aplicación del modo rotativo SCHED_RR

Para validar la persistencia del ajuste en el subsistema del kernel, consultamos de nuevo las columnas relevantes con ps -o.
La tabla muestra claramente la clase asignada como RR, con una prioridad en tiempo real (RTPRIO) fijada en 30 y un índice interno del planificador (PRI) recalculado en 70.

Comprobación con ps de los parámetros SCHED_RR

Despliegue de nuevos procesos en tiempo real y depuración final

Además de intervenir sobre tareas preexistentes, chrt permite inicializar programas dotándolos de atributos de tiempo real desde su primer ciclo de ejecución. Para comprobarlo, arrancamos una nueva instancia en segundo plano con política SCHED_RR y prioridad 25 mediante sudo chrt -r 25 sleep 300 &.

Inicio de nuevo proceso con atributos de tiempo real

Mediante la canalización ps -eo pid,cls,rtprio,comm | grep '[s]leep', filtramos los procesos en ejecución para evaluar simultáneamente ambas instancias.
El resultado demuestra que ambas sesiones conviven bajo la clase de tiempo real RR, operando en paralelo con sus respectivas prioridades asignadas (30 y 25).

Filtrado y visualización simultánea de instancias activas

Finalizadas las pruebas, procedemos a restablecer el entorno y liberar los recursos del sistema invocando kill -9 $TARGET_PID && pkill -f 'sleep 300'.
Esta instrucción termina forzosamente tanto el proceso rastreado por la variable como la tarea secundaria de 300 segundos, dejando el sistema limpio de cargas residuales.

Terminación de procesos en segundo plano y limpieza

Con este recorrido hemos comprobado la versatilidad de chrt para modular la latencia y el comportamiento del planificador de Linux. Este control determinista resulta fundamental a la hora de desplegar servicios de baja latencia, servidores de audio profesional o sistemas de procesamiento de datos en tiempo crítico.