¿Cómo hacer una aplicación de tiempo real? Linux con parche Xenomai

Hola a todos!

Estoy trasteando con la posibilidad de añadir la funcionalidad de tiempo real al kernel linux, exactamente en una raspberry, y me surgen bastantes dudas.
Realmente lo que espero de montar un RTOS (o equivalente) es que determinadas acciones, o incluso la ejecución de mi programa, tenga máxima prioridad, y de ese modo ganar algo de rapidez.
La pregunta que me hago entonces es, ¿si tengo un kernel parcheado con Xenomai (por ejemplo), como le digo al kernel que mi programa lo tiene que tratar con prioridad máxima? Y ya para rizar el rizo, si mi programa usa librerías externas y de terceros que previamente compilo, como las añado también para que tengan prioridad máxima?

Muchas gracias por cualquier comentario

Saludos
Dependiendo de lo que consideres «tiempo real» quizás te baste con simplemente cambiar la prioridad del processo

https://www.nixtutor.com/linux/changing ... processes/
elchicosinhada escribió:Dependiendo de lo que consideres «tiempo real» quizás te baste con simplemente cambiar la prioridad del processo

https://www.nixtutor.com/linux/changing ... processes/


Muchas gracias por comentario. No había caído en esa posibilidad.
Sin embargo, acabo de estar haciendo pruebas con una aplicación sencilla que hace uso de estas librerías de terceros y por mucho que le incremento la prioridad me sigue dando los mismos valores de tiempos para completar la acción.

Sigo investigando sobre el RT que supongo mejorará más el rendimiento de mi aplicación
Gracias!
Si investigas sobre RT, sin mirar lo que has puesto de nixtutor, verás que linux como tal no es un sistema de tiempo real, lo que si que suele haber son scheduler en los que intenta que el tiempo de latencia sea lo menor posible.

Las librerias de terceros si que se ven afectadas por la prioridad de tu aplicación, no veo porque no iban a verse afectadas, en caso de fork o exec deberían de heredarlas del proceso padre.

Si quieres que tu proceso vaya lo mas rápido, primero comprueba en que estas perdiendo mas el tiempo
CrosMax escribió:Sin embargo, acabo de estar haciendo pruebas con una aplicación sencilla que hace uso de estas librerías de terceros y por mucho que le incremento la prioridad me sigue dando los mismos valores de tiempos para completar la acción.

Dependiendo de dónde esté el cuello de botella. Si el problema del tiempo es el acceso a disco duro o algo así, por mucho que le incrementes la prioridad, no vas a mejorar el tiempo.
CrosMax escribió:Sin embargo, acabo de estar haciendo pruebas con una aplicación sencilla que hace uso de estas librerías de terceros y por mucho que le incremento la prioridad me sigue dando los mismos valores de tiempos para completar la acción.

Fácil, porque si es el único proceso activo no tiene nadie con quién competir y la prioridad no le afecta.

Luego están los cuellos de botella, como el acceso a disco.
Claro, parece ser que el problema es que mi aplicación se comunica por un puerto SPI con un periférico, por lo que las llamadas al periférico se tratan como tareas I/O y el kernel gestiona otros procesos diferentes al mío durante estas tareas I/O.

No sé si habrá forma de decirle al kernel de linux que tal proceso se realice hasta que se complete, independientemente de si existen tareas I/O durante la finalización del proceso.

Gracias por los comentarios
Hay un parche que puedes utilizar para convertir en un sistema de "tiempo real". Funciona bastante bien, te dejo el link
https://rt.wiki.kernel.org/index.php/Main_Page

Y buscando en Google, hay quien lo ha usado para Raspberry, al parecer.

http://www.frank-durr.de/?p=203

A ver si te sirve de algo.
7 respuestas