FPGA comme co-processeur de Xenomai/Linux - J.-M Friedt

publicité
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
Téléchargement