Se necesita un sistema operativo en tiempo real cuando se imponen requisitos de tiempo al procesador o al flujo de datos. Por lo tanto, a menudo desempeña el papel de una unidad de control en dispositivos especiales. Los experimentos científicos, las aplicaciones de imágenes médicas y los dispositivos de control industrial son sistemas en tiempo real. Los mecanismos de inyección de combustible de motores de automóviles, controladores para equipos domésticos y militares también son sistemas en tiempo real.
Además, los diferentes eventos tienen diferentes requisitos de tiempo. Por ejemplo, el requisito de latencia para un sistema de frenos antibloqueo puede oscilar entre 3 y 5 milisegundos. Es decir, desde el momento en que la rueda detecta por primera vez que patina, el sistema que controla los frenos antibloqueo dispone de 3-5 milisegundos para reaccionar y corregir la situación.
Las capacidades del kernel en tiempo real existen desde hace más de una década en el ecosistema de código abierto. El soporte de Red Hat Enterprise Linux (RHEL) para el kernel en tiempo real ha estado disponible durante la misma cantidad de tiempo. Sin embargo, muchos administradores de sistemas malinterpretan sus conceptos básicos y su comportamiento operativo real. En este artículo, describiré algunas de sus características principales, las diferencias con el kernel estándar y los pasos de instalación.
Programador de CPU en tiempo real
Para diferentes clases de problemas, se pueden designar sistemas blandos en tiempo real y sistemas duros en tiempo real . El primero no garantiza la hora exacta en la que se programará el proceso crítico en tiempo real. Solo garantizan que el proceso se verá favorecido sobre los procesos no críticos. Estos últimos tienen requisitos más estrictos y la tarea se completa dentro del período de tiempo especificado o se considera no completada.
Llamamos retraso de evento al tiempo que transcurre desde el momento en que ocurre el evento hasta el momento en que recibe servicio. Hay dos tipos de retrasos que afectan el rendimiento del sistema operativo en tiempo real.
- CPU . , . , interrupt service routine (ISR).
. 1 . - , , . , . .
. 2 .
La característica más importante de un sistema operativo en tiempo real es responder de inmediato a un proceso crítico que requiere acceso a los recursos de la CPU. Como resultado, el programador del sistema operativo en tiempo real debe admitir el algoritmo de interrupción preventiva. Estos algoritmos asignan prioridad a cada proceso en función de su grado de importancia. Si el planificador también admite la preferencia, el proceso actual en la CPU se sustituirá a pedido a favor de un proceso de mayor prioridad.
Figura: 3 Clasificación de planificadores.
Existen varios algoritmos para el planificador en tiempo real.
- Rate-Monotonic Scheduling — . , . .
n, ln2 ≈ 0.693147. - Earliest-deadline-first (EDF) Scheduling . , , . RMS, EDF , . , , .
. 4 EDF.
. 4 T1 T2 , T2. T3 T1, 23. - POSIX real-time-scheduling. POSIX.4 . , .
- SCHED_FIFO — , « — » (FIFO). 32 .
- SCHED_RR — SCHED_FIFO, ( ) . 32 .
- SCHED_OTHER — ; - .
Instalación y uso de RHEL Real Time
Primero, debe conectar el repositorio de Red Hat Enterprise Linux Real Time e instalar el grupo de paquetes RT.
[root@server ~]# subscription-manager repos --enable rhel-8-for-x86_64-rt-rpms
[root@server ~]# yum groupinstall RT
RT incluye estos componentes:
- kernel-rt : kernel con funcionalidad en tiempo real;
- rt-setup : instalación del entorno Red Hat Enterprise Linux Real Time;
- rt-tests : utilidades de prueba de función RT;
- rt-eval - para evaluar la posibilidad de usar RT en un sistema dado;
Después de instalar RT y reiniciar, asegúrese de que el kernel-rt esté cargado.
[root@server ~]# uname -a
Linux rt-server.example.com 4.18.0-80.rt9.138.el8.x86_64 …
Echemos un vistazo a algunas de las diferencias entre kernel-rt y el kernel estándar.
- Con carga alta, se comprueba la prioridad de la tarea (1-99).
- Las tareas de alta prioridad (99) tienen preferencia al acceder a los recursos de la CPU.
- No hace cumplir la política de Programación Completamente Justa (CFS) .
- Utiliza la política SCHED_FIFO o SCHED_RR .
Figura: 5 Comparando kernet_rt con el kernel estándar.
El gráfico muestra una muestra del tiempo de respuesta de un millón de repeticiones para los sistemas que utilizan los kernels RHEL Linux 7 y RHEL Real Time, respectivamente. Los puntos azules en este gráfico representan los tiempos de respuesta (en microsegundos) de los sistemas con el kernel estándar RHEL 7, y los puntos verdes representan RHEL 7 Real Time. Puede verse en el gráfico que la característica de kernel-rt es mucha menos varianza y, en consecuencia, más previsibilidad del tiempo de respuesta del sistema.
Configuración y prueba
Después de instalar RT, es posible que se requieran ajustes y ajustes adicionales para lograr tiempos de respuesta del sistema más consistentes. Dichos requisitos pueden ser presentados por empresas del sector financiero o de telecomunicaciones. La configuración en sí es un proceso iterativo y debe ser paciente al comienzo del proceso. Es poco probable que sea posible modificar un par de variables y comprender que se logra el mejor resultado posible.
La utilidad hwlatdetect del paquete rt-tests mostrará la latencia causada por el hardware y el firmware al sondear la fuente del reloj y buscar espacios oscuros.
[root@server ~]# hwlatdetect --duration=60s
hwlatdetect: test duration 60 seconds
detector: tracer
parameters:
Latency threshold: 10us
Sample window: 1000000us
Sample width: 500000us
Non-sampling period: 500000us
Output File: None
Starting test
test finished
Max Latency: Below threshold
Samples recorded: 0
Samples exceeding threshold: 0
En este ejemplo, los parámetros indican el método de retardo y detección. El umbral de latencia predeterminado se estableció en 10 microsegundos (10 μs).
RT también tiene una utilidad llamada rteval para probar el rendimiento del sistema en tiempo real bajo carga. El programa coloca una gran carga en el sistema utilizando el programador SCHED_OTHER y luego mide la respuesta en tiempo real en cada una de las CPU activas. El objetivo es mantener varias tareas en ejecución de forma continua, como la asignación / liberación de memoria, E / S de disco, cálculo, copia de memoria y otras.
Cada hilo de medición toma una marca de tiempo, muere durante un cierto intervalo y luego toma otra marca de tiempo al despertarse. El retardo de la medición es igual a
t1 - (t0 + i)
, donde
- t1 - tiempo de medición real;
- t0 - hora teórica de activación de la primera marca de tiempo;
- i es el intervalo de espera.
El informe de la utilidad rteval se ve así.
System:
Statistics:
Samples: 1440463955
Mean: 4.40624790712us
Median: 0.0us
Mode: 4us
Range: 54us
Min: 2us
Max: 56us
Mean Absolute Dev: 1.0776661507us
Std.dev: 1.81821060672us
CPU core 0 Priority: 95
Statistics:
Samples: 36011847
Mean: 5.46434910711us
Median: 4us
Mode: 4us
Range: 38us
Min: 2us
Max: 40us
Mean Absolute Dev: 2.13785341159us
Std.dev: 3.50155558554us
Materiales usados
- Abraham Silberschatz, Peter Baer Galvin, Greg Gagne Conceptos del sistema operativo 9ª edición.
- ¿Cuáles son los beneficios de ejecutar Red Hat Enterprise Linux para tiempo real?
- Trabajar con el kernel en tiempo real para Red Hat Enterprise Linux
- Procedimientos de ajuste avanzados para optimizar la latencia en RHEL para tiempo real