Linux 6.12 podría contar el soporte «PREEMPT_RT» en tiempo real
El concepto de un sistema en tiempo real no es algo que se haya pensado en los últimos años en Linux, ya que la idea de este inicio hace casi 20 años, siendo exactos en el 2005 como parte del proyecto «Realtime-Preempt» («-rt») con el desarrollo del modo PREEMPT_RT para el kernel de Linux.
Para quiénes desconocen de PREEMPT_RT, deben saber que es un parche para el kernel de Linux que convierte el sistema operativo en uno de tiempo real (real-time). El objetivo principal de PREEMPT_RT es reducir la latencia y garantizar la predictibilidad en la ejecución de tareas, lo que es crucial en aplicaciones que requieren respuestas rápidas.
En palabras más simples, podemos decir que PREEMPT_RT permite que casi todas las partes del kernel puedan ser interrumpidas, lo que reduce la latencia. A diferencia de un kernel estándar, no todas las secciones pueden ser interrumpidas, lo que puede causar retrasos en los tiempos de respuesta.
Desde 2015 el proyecto ha estado bajo la supervisión de la Fundación Linux y hasta ahora, la implementación del modo PREEMPT_RT se ha ofrecido en forma de parches externos. Basándose en estos parches, distribuciones como RHEL, SUSE y Ubuntu han creado ediciones en tiempo real de sus productos, altamente demandadas en sectores como los sistemas financieros, dispositivos de procesamiento de audio y video, sistemas de aviación, medicina, robótica, telecomunicaciones y aplicaciones industriales, donde es esencial garantizar tiempos de respuesta predecibles para los eventos.
En 2019 comenzó el proceso de promoción de los parches desarrollados en el proyecto PREEMPT_RT hacia el kernel principal de Linux. En la versión 5.3 del kernel, se incluyó la opción PREEMPT_RT en el archivo de configuración para habilitar el modo en tiempo real.
Los bits printk necesarios para PREEMPT_RT se encuentran en linux-next. Este fue el último obstáculo conocido para PREEMPT_RT. La cola RT tiene además la «consola atómica» para el UART 8250 que aún no está en linux-next. Esto significa un comportamiento de «consola heredada» como en el caso de que no se imprima desde el contexto atómico en casos de emergencia. El controlador UART 8250 es el único que proporciona soporte de «consola atómica» a día de hoy.
Todo este trabajo está por dar sus frutos, ya que la integración completa de los cambios necesarios ha tomado cinco años y está a punto de concluir, ya que se espera que en la versión 6.12, el kernel pueda compilarse en modo PREEMPT_RT sin necesidad de aplicar parches adicionales.
Se menciona que el último obstáculo que impedía la habilitación de PREEMPT_RT era la falta de soporte para la salida atómica sin bloqueo mediante la función printk. Esta funcionalidad ya ha sido adoptada en la rama linux-next. Además, se está a la espera de la implementación de una consola atómica sin bloqueo para el controlador UART 8250, cuya ausencia actualmente impide la salida de mensajes de emergencia a la consola desde código ejecutado en contextos atómicos.
Con los bits printk fusionados, PREEMPT_RT podría habilitarse en X86, ARM64 y Risc-V. Estas tres arquitecturas fusionadas requirieron cambios a lo largo de los
años, dejándome en una posición en la que no tengo cambios esenciales en la
cola que los afectarían. ARM y POWERPC tienen algunos parches esenciales restantes…
Los desarrolladores del kernel de Linux han anunciado la integración de los últimos cambios necesarios en la rama linux-next, que se utilizará para compilar la versión 6.12. Estos cambios permitirán compilar el kernel con la opción PREEMPT_RT, que introduce capacidades en tiempo real.
Una vez que estos cambios se acepten en la rama principal, el modo PREEMPT_RT estará disponible para las arquitecturas X86, ARM64 y RISC-V. El soporte para las arquitecturas ARM y POWERPC se añadirá posteriormente, ya que los parches necesarios aún no han sido completamente integrados.
Cabe mencionar que los cambios propuestos aún no son definitivos y es posible que si PREEMPT_RT no llega en la rama 6.12, sea integrada hasta el próximo año en la versión 6.13.
Finalmente, si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.