
Bienvenido al capítulo final de esta serie de blogs de tres partes sobre el kernel de Linux de baja latencia para sistemas integrados industriales.
Cada blog es independiente y se puede leer independientemente de los demás, aunque es posible que desee comenzar desde el principio para lograr cierta continuidad. Si necesita un repaso rápido sobre la zona de usuario y el espacio del kernel, le recomendamos que consulte la Parte I primero. En la Parte II , analizamos la preferencia en Linux, la frecuencia de interrupción del temporizador y las opciones de configuración adoptadas por el kernel Ubuntu Linux de baja latencia.
Si está un poco oxidado con estos conceptos, volver a la Parte I y la Parte II puede ayudarlo a refrescar su memoria. De lo contrario, ¡siga avanzando ya que está casi al final de su viaje de baja latencia!
Latencia en sistemas embebidos industriales
El kernel de Ubuntu de baja latencia es adecuado para cargas de trabajo de baja fluctuación y aplicaciones industriales integradas con requisitos de latencia en el rango de milisegundos. Latencia en un sistema embebido se refiere al tiempo transcurrido al atender una solicitud, mientras que estar nervioso es la variabilidad en el tiempo de una señal esperada. El jitter bajo corresponde a una variabilidad reducida y variaciones indetectables en la capacidad de respuesta del kernel cuando se brinda servicio a aplicaciones sensibles [1].
¿Cómo cumple el kernel de Ubuntu de baja latencia con requisitos tan estrictos? Para ello, revisemos rápidamente los conceptos desarrollados con más detalle en la Parte I y la Parte II de esta serie.
Un programa generalmente se ejecuta en modo de usuario en el espacio del usuario y activa una rutina del kernel cuando solicita uno de sus servicios. Una vez que el kernel de Linux ha atendido la solicitud, reanuda la ejecución en el espacio de direcciones del usuario. Linux introdujo la preferencia del kernel en v2.5.4lo que permite que las tareas de alta prioridad se adelanten a los procesos en ejecución y emitan llamadas al sistema que soliciten cambiar al espacio de direcciones del kernel. Por lo tanto, en un kernel interrumpible, un proceso puede adelantarse a una instancia de un programa en ejecución, interrumpiendo a la fuerza la CPU y realizando un cambio de contexto .
El desafío de hacer un kernel de Linux completamente preventivo es detectar dónde no se debe permitir que ocurra la preferencia, para que el hilo de ejecución interrumpido no tenga consecuencias catastróficas.
De los modelos de preferencia disponibles aguas arriba (PREEMPT_NONE, PREEMPT_VOLUNTARIOy ADELANTARSE A), el kernel de Ubuntu de baja latencia tiene la preferencia máxima en la línea principal. CONFIG_PREEMPTel Ubuntu de baja latencia deshabilita la preferencia solo en ubicaciones críticas, donde el kernel debe proteger los datos del acceso simultáneo. Además de algunos otros cambios de configuración menores, el kernel de baja latencia atiende la mayoría de las cargas de trabajo cuando se combina con un 1000 Hz (CONFIG_HZ_1000) frecuencia de interrupción del temporizador.
¿Baja latencia o tiempo real?
Un núcleo con la preferencia máxima disponible en la línea principal (ADELANTARSE A), junto con cuatro veces la granularidad del temporizador de un núcleo genérico (HZ_1000 contra HZ_250), invariablemente exige comparaciones con alternativas en tiempo real.
PREEMPT_RTque lentamente se integra, es posiblemente la opción preferida de los desarrolladores de Linux que trabajan en sistemas integrados que requieren capacidades en tiempo real. Los requisitos de latencia y las consecuencias de no cumplir con una fecha límite dictan si un sistema necesita PREEMPT_RT o no. Para tomar una decisión informada, uno debe mirar los datos. Si las demandas de latencia son particularmente estrictas y las consecuencias de una fecha límite incumplida son catastróficas, PREEMPT_RT es probablemente una buena opción. El kernel de Ubuntu de baja latencia es, en cambio, un gran candidato si el sistema tiene requisitos de latencia del orden de milisegundos. La baja latencia también puede adaptarse a su aplicación si la falta de una fecha límite da como resultado la degradación del sistema pero no es fatal, o incluso si el hardware maneja la mayor parte del rendimiento en tiempo real.
Si bien la baja latencia no es tan firme como una completa PREEMPT_RT integración, es cercana y no tiene los mismos problemas de compatibilidad. CONFIG_PREEMPT usa completamente código upstream y es una configuración de la línea principal, con el núcleo funcionando según lo previsto. PREEMPT_RT es un conjunto de parches intrusivo que puede no ser compatible con todos los controladores requeridos y puede requerir depuración/reelaboración.
Otro aspecto a tener en cuenta es que el kernel no debe consumir la totalidad de los recursos de un sistema para generar un retorno de la inversión aceptable. Si bien los kernels de Linux completos y preventivos brindan rendimiento en tiempo real, esto puede tener un costo operativo, ya que un time OS minimiza la latencia de respuesta a los eventos, no optimiza el rendimiento. Por otro lado, el kernel de Ubuntu de baja latencia permite una solución bien equilibrada que reduce la sobrecarga y mantiene la capacidad de respuesta. Además, el kernel de Ubuntu de baja latencia es más favorable para el rendimiento y el espacio del usuario. Acceso a la CPU que alternativas en tiempo real [1].
En general, a menos que no cumpla con una especificación de prioridad exacta, el kernel de baja latencia se adapta bien a las cargas de trabajo de “tiempo real” suaves, de baja latencia y con baja fluctuación de fase. en caso de fracaso se adaptan mejor a una solución totalmente preventiva que a una equilibrada.
Si está listo para una evaluación técnica más profunda, consulte este informe especializado que compara el kernel de baja latencia de Ubuntu y un kernel de Ubuntu Linux parcheado para que sea completamente preventivo.
La cadencia de lanzamiento de Ubuntu de baja latencia
El kernel de Ubuntu de baja latencia está actualmente disponible en AMD64, con los expertos en kernel de Canónico listo para apuntar a más arquitecturas basadas en la demanda.
Canonical lanza la baja latencia junto con el kernel estándar, siguiendo la misma cadencia que la versión genérica de Ubuntu. Como desarrollador, puede acceder al mismo conjunto de características, resistencia y seguridad con el kernel de baja latencia que espera de Ubuntu. .
Canonical publica nuevas versiones de Ubuntu con una cadencia regular, lo que permite a los desarrolladores un acceso seguro regular a las últimas capacidades ascendentes de código abierto. Cada versión de Ubuntu está asociada con su fecha de entrega y nombre en clave (por ejemplo, Ubuntu ‘Focal Fossa’ 20.04 en abril de 2020).
LTS o soporte a largo plazo Las versiones de Ubuntu son versiones de nivel empresarial de Ubuntu, publicadas en abril cada dos años. Las versiones de Ubuntu LTS reciben un período de mantenimiento inicial y cinco años opcionales de Mantenimiento de seguridad extendido (ESM)Las empresas y la comunidad pueden acceder a todo el ciclo de vida mediante una suscripción a Ubuntu Advantage o una suscripción personal gratuita. Puede ponerse en contacto con nosotros para obtener más información.
Canonical también envía Ubuntu listo para producción cada seis meses entre versiones LTS.Estas versiones provisionales vienen con nueve meses de soporte, lo que permite a los usuarios ejecutar los últimos kernels, bibliotecas y versiones de software.
Como nota final, el kernel de Ubuntu de baja latencia también viene con el mismo kernel principal: v5.15 para Jammy Jellyfish, v5.13 para Impish Indri, v5.11 para Focal Fossa, etc.
Conclusión
El tiempo real desde la perspectiva del núcleo es una medida de la latencia desde una solicitud de interrupción hasta la entrada de una tarea. Intuitivamente, dicha demora afecta el rendimiento general de un sistema informático, generalmente medido en términos de latencia o rendimiento. Tradicionalmente, Linux fue diseñado para maximizar rendimiento, mientras que un sistema operativo en tiempo real (RTOS) intenta minimizar la latencia.
El kernel de Ubuntu de baja latencia también minimiza la latencia tanto como sea posible, sin depender de los más intrusivos. PREEMPT_RT El kernel de Ubuntu de baja latencia tiene la prioridad máxima actualmente disponible en la línea principal (ADELANTARSE A), junto con cuatro veces la granularidad del temporizador del núcleo genérico de Ubuntu (HZ_1000 para baja latencia vs HZ_250 para genéricos). Es un kernel en tiempo real «suave» con código totalmente ascendente. En comparación con las alternativas en tiempo real, da como resultado una menor sobrecarga del sistema, es menos costoso de mantener, más favorable para un mayor rendimiento y CPU disponible para Procesos de espacio de usuario.
Si un kernel en tiempo real o de baja latencia sirve mejor a su aplicación, depende de sus requisitos de latencia. Trabajemos juntos en su caso de uso hoy.