Linux kernel
El kernel de Linux no ha sido diseñado para cumplir restricciones en tiempo real, sin embargo hay algunas técnicas que pueden ayudar a ajustar el kernel al cumplimiento de ciertos plazos. Cuatro núcleos han sido evaluados (algunos disponibles aquí):
Las siguientes pruebas se realizarán con un kerneel vanilla compilado con la opción PREEMPT
. Se hará uso del código de cylictests y también vamos a torturar al kernel con stress
para obtener las latencias máximas.
Torturando el kernel
Para este propósito vamos a utilizar stress Linux command line tool.
Mientras se ejecuta el autopiloto y usando:
stress --cpu 8 --io 8 --vm 2 --vm-bytes 128M
Se puede observar que la carga del sistema es 17
aproximadamente:
root@beaglebone:~# uptime
03:20:20 up 14 min, 3 users, load average: 17.07, 7.86, 3.21
Vamos a revisar más profundamente los hilos y las operaciones de entrada y salida:
stress --cpu 64 --io 64 --vm 2 --vm-bytes 128M
Con ésto, el comando uptime
devuelve:
root@beaglebone:~# uptime
03:27:10 up 21 min, 3 users, load average: 129.08, 81.93, 36.63
Ejecutando cyclictests
Ahora que hemos estresado el procesador se utilizará cyclictests
para medir las latencias (us):
root@beaglebone:~# cyclictest -t1 -p 80 -n -i 10000 -l 10000
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 0.47 0.65 0.44 1/98 1312
T: 0 ( 1307) P:80 I:10000 C: 3892 Min: 19 Act: 26 Avg: 67 Max: 13743