FPGA comme co-processeur de Xenomai/Linux temps-réel RTOS G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS FPGA comme co-processeur de Xenomai/Linux temps-réel Environnement matériel Mise en œuvre Gwenhaël Goavec-Mérou, J.-M Friedt 30 décembre 2016 1 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Pourquoi un ordonnanceur G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS Environnement matériel Cas du bare-metal (sans OS). Un processeur • n’exécute qu’une instruction par cycle d’horloge ; • n’as qu’un seul fil de traitement ; • présente des sauts sur interruptions. Mise en œuvre ⇒ mise en place d’une machine à état basique pour la gestion des événements. Mais : • priorité statique ; • pas d’évolution en cours de fonctionnement. v o l a t i l e char c ; volatile received char ; volatile timer fired ; void t i m e r i s r () { /∗ s o m e t h i n g ∗/ t i m e r f i r e d = 1; } void u s a r t i s r () { c = USART DR ; received char = 1; } i n t main ( ) { received char = 0; t i m e r f i r e d = 0; i n i t u s a r t () ; while (1) { i f ( received char ) { /∗ do s o m e t h i n g ∗/ received char = 0; } if ( timer fired ) { /∗ do o t h e r t h i n g ∗/ t i m e r f i r e d = 0; } SLEEP MODE ; } } 2 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Ordonnanceur G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS Environnement matériel Mise en œuvre Un système d’exploitation est multi-tâche : ⇒ un seul processus peut être exécuté à la fois Mais de nombreux processus concurrents sont chargés dynamiquement et attendent d’obtenir la ressource CPU (commandes ps aux ou htop). ⇒ utilisation d’un ordonnanceur pour distribuer le temps CPU entre les processus concurrents. Processus défini par : • une priorité (plus la priorité est haute plus la tâche va s’exécuter rapidement/fréquemment) ; • un état (running, runnable, sleeping ) L’ordonnanceur donne le type de politique du système (temps-partagé, temps-réel) 3 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Principe du temps partagés G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS Environnement matériel Mise en œuvre Système GNU/Linux ⇒ ordonnancement temps-partagé. But : donner l’impression à l’utilisateur que tous les processus s’executent en parallèle. • équité d’accès aux ressources CPU → tous les processus disposent d’un timeslice (ou quantum) de temps ; • processus décrit par une priorité dynamique. • préemption régulière des tâches afin de rendre le système réactif (mais au dépends des latences). 4 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Principe de préemption G. Goavec-Mérou Bases OS temps-partagé Type de basculement entre tâches : timeout timeslice I/O access OS temps-réel task1 RUNNING RUNNABLE Au dela des processeurs FPGA task1 task2 RUNNABLE task2 Conclusion sur les OS RUNNING SLEEPING RUNNING RUNNABLE RUNNING scheduler scheduler Environnement matériel Mise en œuvre Dépassement de la tranche de temps allouée task1 task2 RUNNING Accès bas niveau RUNNABLE RUNNABLE RUNNING scheduler event Dans tous les cas, l’ordonnanceur va choisir la tâche la plus prioritaire (la même pouvant reprendre la main). évenement externe (interruption) 5 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Évolution de la priorité G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs En parallèle de l’élection d’un nouvelle tâche, celle qui a été préemptée voit sa priorité évoluer, selon un ensemble de critères : FPGA • accès IO ; Conclusion sur les OS • ancienneté ; Environnement matériel • durée du traitement ; Mise en œuvre • ... Limitation ⇒ comportement non prédictif. Il n’est pas possible de prévoir à priori quel processus aura la main suite à un événement. Certitude qu’une tâche ne s’exécutera pas dans un temps borné 6 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel stabilité d’une tâche périodique G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS Environnement matériel Signal périodique avec sleep() (système non chargé. 50µs/div) Signal périodique avec sleep() (système chargé. 50µs/div) Signal périodique sur timer (système non chargé. 10ms/div) Signal périodique sur timer (système chargé. 10ms/div) Mise en œuvre 7 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs Concepts de temps-réel Idée reçue erronée : le temps réel est une question de vitesse. Une définition : un système informatique est soumis à des contraintes temps réel si l’instant auquel il parvient au terme d’une opération entre en considération dans la validité du résultat de cette opération But : FPGA • fournir un environnement à comportement prédictif ; Conclusion sur les OS • garantir des latences bornées Environnement matériel Mise en œuvre Hiérarchie des solutions : • temps-réel matériel (FPGA) • temps-réel dur (latences de l’ordre de quelques dizaines de µs) • temps-réel mou (Real Time Linux 1 , modif. de l’ordonnanceur) • absence de borne (non temps-réel) Nombreuses solutions existantes (PREEMPT RT de RTLinux, RTAI, VxWorks, ...). Nous allons étudier une solution de temps réel dur : Xenomai 1. http://www.marketwatch.com/story/ the-linux-foundation-announces-project-to-advance-real-time-linux-20158 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Xenomai : une solution coopérative G. Goavec-Mérou Au dela des processeurs FPGA Conclusion sur les OS Environnement matériel Mise en œuvre • conserver les capacités d’un système GNU/Linux pour les tâches généralistes/non contraintes temporellement ; • adjoindre la possibilité d’exécuter des tâches temps-réels. Principe : • abstraction du matériel : IPipe ; • chaque noyau est exécuté dans un domaine disposant d’une priorité ; • une tâche temps-réel peut Domaine 1 Domaine 2 Process. temps−reel Process. Linux Xenomai Noyau Linux utilisateur OS temps-réel Xenomai s’exéecute en parallèle de Linux. But : noyau OS temps-partagé skins Bases ADEOS/I−pipe utiliser des pilotes Linux et réciproquement Materiel Basculement de domaine ⇒ changement d’ordonnanceur. 9 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Stabilité d’une tâche périodique G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS Environnement matériel Signal périodique avec sleep() (système non chargé. 50µs/div) Signal périodique avec sleep() (système chargé. 50µs/div) Signal périodique sur timer (système non chargé. 50µs/div) Signal périodique sur timer (système chargé. 50µs/div) Mise en œuvre 10 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS Inversion de priorité Risque de bloquage de l’ordonnanceur si une tâche de faible de priorité pose un mutex qui empêche une tâche de forte priorité de continuer son exécution 2 Principe : 1 un thread de priorité basse prends un mutex puis se fait préempter ; 2 un thread de priorité forte est bloqué sur le même mutex ; 3 un troisième thread de priorité prends la main et ne la rends pas. ⇒ le thread de priorité moyenne bloque le thread de forte priorité. mutex_lock(m1) Environnement matériel Mise en œuvre task1(99) task2(50) task3(10) RUNNABLE RUNNING SLEEPING RUNNING RUNNABLE RUNNING mutex_lock(m1) SLEEPING RUNNABLE event event 2. A. Statsenko, The First Bug on Mars (2016), à http://www.viva64.com/en/b/0462/, et les transparents qui y sont cité http://www.slideshare.net/jserv/priority-inversion-30367388 11 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Le temps réel : application G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs Exemple de l’acquisition d’une image : sur un OS multitâches, il faut couper toutes les interruptions pendant la capture des pixels ⇒ perte du scheduler (monotâche) et de la communication réseau. FPGA Conclusion sur les OS Environnement matériel Mise en œuvre Exemple d’une carte son implémentée de façon logicielle → exploitation de la Queued ADC (tampon) 3 3. S. Guinot, J.-M Friedt, La réception d’images météorologiques issues de satellites : utilisation d’un système embarqué, GNU/Linux Magazine France, Hors Série 24 (Février 2006) 12 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Au dela des processeurs ... G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS • Ajouter des périphériques pour décharger les processeur : coprocesseurs dédiés pour décharger le processeur de tâches spécifiques complexes (codec audio, ethernet). • Alternative au temps réel : le matériel reconfigurable se charge des opérations rapides et décharge le processeur de tâches immédiates (UART, FIFO, ADC du coldfire par exemple). Environnement matériel Mise en œuvre www.armadeus.org 13 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Coprocesseur matériel dans les microcontroleurs G. Goavec-Mérou Bases OS temps-partagé Analog Devices ADuC7026 : quelques cellules de portes logiques OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS Environnement matériel Mise en œuvre (Re)configurables depuis le firmware PLACLK PLAELM0 PLAELM1 PLAELM2 PLAELM3 PLAELM4 PLAELM5 = = = = = = = 0 x0003 ; 0 x0018 ; 0x00CC ; 0 x000A ; 0 x0058 ; 0 x0246 ; 0 x0258 ; // C l k S o u r c e c o n f i g u r a t i o n // o u t p u t = P0 . 4 , P0 . 5 ... PLADIN=0 x f f f f ; 14 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Matériel reconfigurable : le FPGA G. Goavec-Mérou • Le FPGA permet de s’adapter à chaque nouvelle application Bases OS temps-partagé OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS sans nécessiter d’ajouter du matériel (théorique : mise en forme des signaux). • Caméra : le flux vidéo impose la cadence des données • Une approche CPU seul avec OS nécessite de couper toutes les interruptions (et donc d’arrêter l’OS) • ici, le FPGA stocke l’image, puis la transfère au CPU Environnement matériel Mise en œuvre 15 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel G. Goavec-Mérou Bases OS temps-partagé OS temps-réel FPGA+CPU • le CPU est en charge des tâches non-temps réel (réseau, communication homme-machine, pré et post-traitements) • le FPGA est en charge des tâches respecant un temps réel dur (ici, remplir une FIFO de données d’un ADC rapide) Au dela des processeurs FPGA Conclusion sur les OS Environnement matériel Mise en œuvre 16 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Temps-réel matériel : FPGA G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS Environnement matériel Mise en œuvre Composant naturellement parallèle ⇒ tous les traitements sont effectués en même temps. Les traitements ne reposent pas sur un jeu d’instruction, une ALU et une unité de contrôle, mais sur la combinaison d’éléments de logique simple. Comportement : • parfaitement prédictible ; • latences connues par avance et toujours identiques ; • traitements contraints par le temps de propagation (période de l’horloge). 17 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Conclusion G. Goavec-Mérou Bases OS temps-partagé OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS Environnement matériel Temps-partagé : • adapté à un poste de travail. Fluidité de basculement ; • impossible de déterminer les bornes des latences. Temps-réel : • latences bornées ; Mise en œuvre • comportement prédictible ; • mais temps-réel logiciel ⇒ fluctuations des latences exprimées en dizaines de µs. 18 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel G. Goavec-Mérou Bases OS temps-partagé Environnement matériel Le matériel utilisé, une carte Armadeus Systems APF27, dispose d’un processeur générique couplé à un FPGA. Un bus de communication rapide connecte les deux composants (fig 1). OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS Environnement matériel Mise en œuvre Figure – Environnement matériel utilisé : carte APF27. La communication entre CPU et FPGA se fait en utilisant le protocole wishbone. Méthodologie également valable pour le bus AXI (carte Redpitaya, Zedboard à base de Zynq et de0nanoSoc ou de1Soc à base de SocFPGA). 19 / 20 FPGA comme co-processeur de Xenomai/Linux temps-réel Mise en application G. Goavec-Mérou Bases • qualification du temps-partagé et du temps-réel ; OS temps-partagé • exploitation du FPGA, découverte de la communication OS temps-réel Au dela des processeurs FPGA Conclusion sur les OS Environnement matériel Mise en œuvre CPU-FPGA, création d’un design pour compter la période d’un signal connecté au composant. • démonstration sur plateforme Armadeus Systems APF27 (processeur iMX27) • possibilité de faire fonctionner Xenomai sur OlinuxinoA13micro sur un noyau ancien : procédure décrite dans http://jmfriedt.free.fr/A13_v2.pdf (p.8) en utilisant l’archive buildroot de https://github.com/trabucayre/buildroot-a13-olinuxino API Xenomai : www.xenomai.org/documentation/trunk/html/api/group__task.html et exemple www.xenomai.org/documentation/xenomai-2.4/html/api/trivial-periodic_ 8c-example.html 20 / 20