El punto de llegada del soporte de preempción en tiempo real en Linux
- El trabajo para añadir soporte en tiempo real a Linux comenzó en 2004 y ahora está entrando en su etapa final.
- El objetivo de la preempción en tiempo real es permitir que el proceso de mayor prioridad se ejecute con la menor latencia posible, para lo cual el kernel se hace preemptible en la mayor cantidad de situaciones posible.
- Este trabajo terminó reescribiendo partes centrales del kernel y ofrece beneficios que van más allá de los casos de uso en tiempo real.
La solución al problema de printk()
- La función
printk(), usada en el kernel para enviar mensajes a la consola del sistema y al registro, funciona de manera sincrónica y no retorna hasta que el mensaje ha sido enviado a todos los destinos configurados.
- Los desarrolladores de tiempo real movieron la salida de
printk() a un hilo separado para volverla asíncrona, pero eso no era más que una solución temporal.
- El problema de
printk(), en el que se ha trabajado seriamente desde 2018, se está resolviendo a través de unas 300 correcciones, aunque todavía quedan algunos problemas complejos por resolver.
Perspectivas de integración del código de preempción en tiempo real en el mainline
- Se expresó la esperanza de que el resto del código de preempción en tiempo real se integre al mainline antes de cumplir su vigésimo aniversario a finales de 2024.
- Aunque no ha habido cambios recientes en el código de
printk(), se modificó el código de handover para permitir actualizar los controladores de consola uno por uno.
- El código fue cambiado para que los mensajes importantes se copien por completo al búfer de mensajes antes de que se imprima la primera línea, y para evitar caídas del sistema causadas por controladores de consola defectuosos, primero se registran los mensajes en una consola segura.
La opinión de GN⁺
- El trabajo para añadir soporte de preempción en tiempo real al kernel de Linux está casi terminado, y esto traerá grandes beneficios a los sistemas que requieren tareas en tiempo real.
- Hacer asíncrona la función
printk() mejora la capacidad de respuesta del sistema y cumple un papel importante para alcanzar los objetivos de la preempción en tiempo real.
- Este artículo muestra un avance importante en el desarrollo del kernel de Linux y ofrece contenido interesante para quienes siguen de cerca su desarrollo.
1 comentarios
Comentarios de Hacker News
Ventajas del microkernel QNX
Problemas del procesamiento en tiempo real en Linux
Función de logging del kernel y casos de uso reales
Posibilidad de sustituir combinaciones de hardware/software de tiempo real
Distinción entre aplicaciones de tiempo real "duro" y "blando"
Procesamiento en tiempo real del kernel de Linux y límites del hardware
Problemas del logging síncrono
Cómo garantizar la capacidad de respuesta de un proceso específico
Función de preemption en tiempo real de Linux y experiencia pasada
Impacto en los usuarios generales