Bonjour,
Sans être un expert du Temps Réel sous Linux, je suis avec intérêt son actualité et les progrès réalisés, notamment les projets de l’OSADL et Xenomai.
Pour pallier mon ignorance crasse du domaine je me suis offert quelques livres dont celui de Monsieur Christophe BLAESS qui explique de manière très pédagogique ce qu’est le temps réel, quelles sont les limites et les raisons de ces limites des systèmes considérés, Linux, Linux RT et Xenomai, fournit outils et moult exemples… Bref un « must have » !
Solutions temps réel sous Linux
En plus son site regorge d’informations, je le recommande :
http://www.blaess.fr/christophe/
J’ai aussi investi, le mot n’est pas trop fort, ça pique un peu, dans les publications suivantes qui sont toutes aussi passionnantes :
- Building Parallel, Embedded, and Real-Time Applications with Ada
- Concurrent and Real-Time Programming in Ada
- Programming in Ada 2005
Je lorgne sur la version 2012 de ce dernier que je m’offrirai sans doute en version PDF car c’est un gros pavé à transporter.
Je dis ça pour qu’à mon anniversaire vous sachiez quoi m’offrir… 😉
Revenons au sujet de ce jour.
Si l’on exécute l’application exemple « app1 » de « Ada for Automation » sur un Linux standard, par exemple une Debian Wheezy on obtient la figure suivante :
Dans le fond, Iceweasel navigue sur le site de Blender et lit une vidéo, le tout pour charger un peu le système.
J’ai donc exécuté l’application avec une tâche principale périodique de période 10 ms et les statistiques d’ordonnancement montrent que :
- 28761 cycles ont démarré à t + [0 – 100µs]
- 2087 cycles ont démarré à t + ]100µs – 1ms]
- 397 cycles ont démarré à t + ]1ms – 10ms]
- 3 cycles ont démarré à t + ]10ms – 20ms]
Cela convient pour de nombreuses applications d’automatisme mais on peut sans doute faire mieux.
Dans Synaptic, le logiciel qui va bien sous Debian pour installer les paquets, une recherche sur « linux rt » donne tout de suite le noyau qui convient à votre machine.
On l’installe prestement et on redémarre avec le nouveau noyau RT.
La commande « uname -a » permet de vérifier cela.
Si on exécute l’application en tant qu’utilisateur lambda on n’observe qu’un léger mieux :
Par contre, si on exécute l’application en tant qu’administrateur (root) on passe dans une autre dimension :
Il faut avoir certains droits, root les a tous, pour exécuter une application en temps réel. C’est normal vu que votre application peut potentiellement utiliser toute la ressource processeur au détriment des autres tâches.
Mais on obtient alors des statistiques d’ordonnancement qui montrent que la périodicité est bien plus stable que ci-dessus.
Bien sûr, pour qualifier un système il faudrait réaliser des tests à plus long terme. Mais cet article n’a pour ambition que d’afficher les capacités Temps Réel de « Ada for Automation ».
La vue suivante montre le serveur Modbus TCP en service :
Et celle-ci les clients Modbus TCP, le client 2 ne trouve pas le serveur correspondant et pour cause, il n’y en a pas :
Quelques minutes plus tard :
Et ça donne quoi avec une période de 1ms ?
Hé bien ça fonctionne !
Évidemment, avec du Modbus TCP, avoir une tâche qui tourne à la milliseconde n’est pas raisonnable, ça ne sert pas à grand chose.
Par contre, avec les solutions de communication Hilscher ça prend un autre relief ! 🙂
Cordialement,
Stéphane