Rapport - the Patrice Kadionik`s HomePage

Transcription

Rapport - the Patrice Kadionik`s HomePage
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
MEUNIER Eddy
MARTINEZ Johan
CABRISSEAU Carène
YAKINE Nihale
E3
Option SE
Projet Systèmes Embarqués
Noyaux Linux Temps-Réel embarqués
sur une carte Xilinx Virtex5
avec processeur PowerPC
Professeur encadrant : Patrice Kadionik
Année 2013/2014
1
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Sommaire
I. Présentation générale
1
. Introduction
a. Objectifs
b. Noyau Linux Vanilla
c. Carte Xilinx Virtex5
d. PowerPC 440
2. Communication : PC hôte <-> Carte Xilinx
3. Noyaux patchés Xenomai et preempt-rt
a. Concept Temps-Réel
b. Patch Xenomai
c. Patch Preempt-RT
II. Travaux Pratiques
1. TP0: Prise en main de l’environnement
2. TP1: Application “hello world” (TP4)
3. TP3: Portage du noyau Linux Vanilla
4. TP4: Portage du noyau Linux Xenomai
5. TP5: Portage du noyau Linux PREEMPT-RT
III. Conclusion
Année 2013/2014
2
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
I. Présentation Générale
1. Introduction
a. Objectifs
Le but de ce projet était d’étudier et de tester le portage de deux noyaux Linux temps-réel,
Xenomai et Preempt-RT, sur une carte FPGA. Différents outils de test ont été utilisés afin de
comparer les performances de ces noyaux par rapport au noyau standard Vanilla.
Les deux cartes proposées pour le portage des noyaux Linux sont la FPGA Virtex5 PowerPC
440 et l’ARM9. Cependant, sur consigne du professeur encadrant, nous nous sommes focalisés sur
la première carte. S’il le temps le permettait, nous devions réaliser par la suite le même travail sur
la deuxième carte.
Notre groupe de projet a été composé de quatre étudiants : Eddy MEUNIER, Carène
CABRISSEAU, Johan MARTINEZ et Nihale YAKINE. Nous avons travaillé sur ce projet pendant
environ quatre mois dans la salle de TP SE et nous avons amélioré nos compétences en matière
d’électronique, d’informatique et de mesures de performances.
Comme énoncé précédemment, le premier objectif de ce projet a été de porter les noyaux
Vanilla, Xenomai et Preempt-RT sur la carte cible. Ensuite nous devions mesurer les performances
de chaque noyau Linux patché afin de comparer leur efficacité respective. L’utilisation de ces patchs
est nécessaire afin qu’un noyau Linux non temps-réel devienne un noyau Linux temps-réel. Le
troisième objectif de ce projet était de structurer notre rapport sous forme de travaux pratiques
afin que les étudiants de l’année suivante puissent réutiliser notre travail durant les séances de TP.
Ils pourront ainsi, en suivant nos directives et ayant des captures d’écran comme bases, effectuer le
portage des noyaux Linux patchés Xenomai et Preempt-RT en un temps réduit.
b. Noyau Linux Vanilla
Généralement, un système embarqué doit respecter des contraintes temporelles fortes
(hard Real Time) et doit posséder un système d’exploitation Temps Réel.
La question d’utiliser un système d’exploitation Temps Réel ou non se pose plus aujourd’hui
pour des raisons évidentes :
 Simplification de l’écriture de l’application embarquée
 Portabilité
 Evolutivité
 Maîtrise des coûts
Année 2013/2014
3
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Cependant, avant de porter les noyaux Linux patchés Temps Réel, nous nous sommes
intéressés au portage du noyau Linux standard dans la carte. Cette approche permet de mieux
maîtriser notre environnement et ainsi être plus à l’aise lors du portage de Xenomai et Preempt_RT.
Depuis 2001, Linux est en train de conquérir le domaine des systèmes embarqués. En effet,
Linux possède des qualités reconnues dans l’environnement standard du PC grand public :
 Open source : gratuit et ouvert
 Stable et efficace
 Extensible et sécurisé
 Aide rapide en cas de problèmes par la communauté Internet des développeurs Linux.
 Nombre de plus en plus important des logiciels disponibles
 Connectivité IP standard
Linux possède aussi d’autres atouts très importants pour les systèmes embarqués :
 Portage sur porcesseurs autres que x86 : PowerPC, ARM, MIPS, 68K, ColdFire, NIOS,
MicroBlaze…
 Taille du noyau modeste compatible avec les tailles de mémoires utuilisées dans un système
embarqué (<1 Mo)
 Différentes distributions proposées suivant le domaine : routeur IP, PDA, téléphone…
 Support du chargement dynamique de modules qui permet d’optimiser l’empreinte
mémoire du noyau
 Migration rapide et en douceur pour un spécialiste Linux à Linux embarqué; ce qui réduit
les temps de formation (et les coûts…)
Le noyau Linux Vanilla est un noyau non temps-réel qui a les caractéristique suivante :
 Open source : gratuit
 Fiable pour les systèmes embarqués
 Bonnes performances
 Bonne portabilité
Il ne s’agit pas d’un noyau Temps Réel car il possède de longues sections de code où tous les
évènements extérieurs sont masqués (non interruptibles). De plus, le noyau Linux n’est pas
préemptible durant toute l’exécution d’un appel système (structure monolithique) par un
processus et ne le redevient qu’en retour d’appel système (mode user). Il n’est pas non plus
préemptible durant le service d’une interruption ISR (Interrupt Sub Routine).
L’ordonnanceur de Linux essaye d’attribuer de façon équitable le CPU à l’ensemble des
processus (ordonnancement de type “old aging” mise en œuvre pour favoriser l’accès CPU aux
processus récents). C’est une approche égalitaire.
Dans un système, le rôle de l’ordonnanceur est d’assurer aux utilisateurs un temps de
réponse moyen acceptable. Ceci signifie un temps de réponse compris entre deux temps critiques.
Année 2013/2014
4
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Figure 1. Comparaison TR et non TR
Cependant nous pouvons observer certaines limites en terme d’ordonnancement. Il y a
l’apparition de retard causés par :
 Le temps de latence d’une interruption
 Le temps de traitement de la routine d’interruption (ISR)
 Le temps de latence de l’ordonnanceur
 Le temps de traitement de l’ordonnanceur
Figure 2. Gestion du temps (avec retards)
Cependant cette approche égalitaire peut être dangereuse et critique dans certaines
applications de l’embarqué tel que dans l’aérospatiale où il faut que les tâches les plus prioritaires
se déclenchent avant les autres.
Afin d’avoir un noyau Linux Temps Réel, il faut que le temps, entre le moment où une
interruption est détectée et le moment où nous ordonnons une autre tâche, soit compris dans un
intervalle de temps ciblé.
C’est pourquoi des patchs tels que Xenomai ou Premmpt-RT sont utilisés afin qu’un noyau
Linux devienne un noyau Temps Réel. Nous détaillerons ce concept dans la partie 2.
Année 2013/2014
5
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
c. Carte Xilinx Virtex5
La carte sur laquelle nous avons travaillé et porté les différents noyaux Linux est la carte
FPGA PowerPC Virtex5 suivante :
Figure 3. Carte FPGA Xilinx Virtex5
Il s’agit d’une possédant un FPGA Virtex5 de chez Xilinx et un processeur PowerPC 440 de
chez IBM.
La carte ML507 possède les caractéristiques notables suivantes :
 FPGA Xilinx Virtex5
 1 Mo de mémoire SRAM
 32 Mo de mémoire FLASH
 Un port Ethernet
 Un port RS232
 Un port JTAG
 Une interface USB maître/esclave
Nous nous sommes servis des trois ports cités ci-dessus afin de communiquer avec la carte
Année 2013/2014
6
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
d. PowerPC 440
Le processeur présent sur la carte, et sur lequel nous avons donc travaillé, est le processeur
PowerPC 440 de chez IBM :
Figure 4. Processeur PowerPC 440
Le processeur possède les caractéristiques notables suivantes :
 Processeur Hardcore
 32 bits
 Fréquence : 400 MHz
 Coeur : PPC440
 Flexible d’utilisation
 Bonnes performances
 Faible consommation d’énergie
 MMU
 Unité de gestion de données et d’instructions
Année 2013/2014
7
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
2. Communication : PC hôte <-> Carte Xilinx ML507
L’environnement de travail de ce projet est constitué d’un PC host et de la carte Xilinx.
Toutes les manipulations et les configurations se font sur le PC hôte, pour ensuite être envoyées à la
carte.
La communication entre ces deux élément est assurée par :
Figure 5 : Schéma de communication

La Liaison Ethernet :
Ethernet est un protocole de réseau local à commutation de paquets, qu’on a utilisé principalement
pour stresser le noyau pour la mesure de performances à travers l’envoi de trams sous forme de
pings ( voir plus loin).
Pour utiliser la liaison Ethernet, il faut commencer par configurer le réseau via la commande:
ifconfig eth0 192.168.168.4.117

Le bus JTAG :
Le bus JTAG est un bus série synchrone composé des 5 signaux de contrôle suivants :
·
TMS, (Test Mode Select) Signal d'activation de la communication JTAG,
·
TCK, (Test ClocK) Horloge,
·
TDI, (Test Data Input) Entrée des données,
·
TDO, (Test Data Output) Sortie des données,
·
TRST, (Test ReSeT) Réinitialisation. Ce signal optionnel est actif au niveau bas.
Ce bus sert essentiellement à faciliter et automatiser le test des cartes électroniques numériques.
Elle consiste à donner un accès auxiliaire aux broches d'entrée-sortie des composants numériques
Année 2013/2014
8
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
fortement intégrés.
Cependant le JTAG n'est pas limité aux tests de continuité. Il est possible de tester des mémoires en
écrivant puis relisant des valeurs de test. Il est même possible de cette manière de programmer des
mémoires non-volatiles. Ainsi dans le cas de notre projet on utilisait le bus JTAG pour écrire dans la
RAM les données du RAM DISK, Cela se fait par la commande :
[Xilinx EDK] ./goml507
La configuration du noyau se fait sur le PC host pour ensuite être envoyé et finalement exécuté sur
la carte cible, ces manipulations se font grâce au deux logiciels : Uboot et Minicom

Uboot :
U-Boot n'est pas un BIOS (ou firmware) comme ceux que l'on trouve sur les PC, il s'apparente
davantage à un contrôleur. Il est basé sur le projet Open Source nommé U-Boot
(sourceforge.net/projects/u-boot). Il a été grandement amélioré par les frères Frieden et Andrea
Vallinotto avec certainement d'autres personnes de l'équipe AmigaOS 4.
Le rôle de U-Boot est d'initialiser le matériel et de lancer le processus de démarrage du système.

Minicom :
C’est un programme de contrôle de modem et d'émulation de terminal pour les Unix-like. Il peut
être comparé à HyperTerminal dans Windows. Ce programme a été écrit par Miquel van
Smoorenburg d'après le populaire Telix pour MS-DOS. Minicom apporte une émulation totale ANSI
et VT100, un langage de script externe, et d'autres choses encore
Pour ouvrir la fenêtre « mincom » il suffit de taper la commande minicom dans le terminal.
3. Noyaux patchés Xenomai et Preempt-RT
Ce n'est pas que Linux n'est pas rapide ou efficace, mais dans certains cas la rapidité n’est
pas suffisante. Ce qu'il faut plutôt, c'est la capacité de répondre de façon déterministe aux délais
d’ordonnancement avec des tolérances spécifiques. Nous allons voir différentes solutions
permettant d’obtenir un noyaux Linux temps réel et la façon dont ils atteignent le temps-réel en
étudiant les deux patchs qui nous intéressent dans ce projet, à savoir Xenomai et Preemp-RT.
Année 2013/2014
9
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
a. Concept Temps-Rèel
La définition suivante de temps réel prépare le terrain afin de discuter des différentes
architectures temps réel existantes. Cette définition provient de Donald Gillies dans le temps réel
Computing FAQ:
“Un système temps réel est celui dans lequel l'exactitude des calculs dépend non seulement de la
correction logique du calcul, mais aussi sur le moment où le résultat est produit. Si les contraintes
de temps du système ne sont pas remplies, une défaillance du système aurait eu lieu.”
En d'autres termes, le système doit être déterministe pour garantir un comportement de
synchronisation lors d’une phase de variation du système d’exploitation (du cas le moins important
au pire cas). Notons que la définition ci-dessus ne parle pas de la performance, parce que le temps
réel n'est pas une question de vitesse: il s'agit de la prévisibilité.
Par exemple, en utilisant un processeur moderne rapide, Linux peut fournir une réponse
typique d'interruption de 20μs, mais parfois la réponse peut être beaucoup plus longue. C'est le
problème fondamental: ce n'est pas que Linux n'est pas rapide ou efficace, c'est juste qu’il n'est pas
déterministe.
Quelques exemples montreront ce que tout cela signifie. La figure 6 ci-après illustre la
mesure de la latence d'interruption.
Figure 6. Mesure du temps de réponse
Quand une interruption arrive , le CPU est interrompue et commence le traitement des
interruptions. Une certaine quantité de travail est effectué pour déterminer quel événement a eu
lieu et, après un temps de travail, la tâche requise est envoyé pour faire face à l'événement (c’est un
“changement de contexte” ). Le délai entre l'arrivée de l'interruption et l'expédition de la tâche
Année 2013/2014
10
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
requise (en supposant que c'est la tâche la plus prioritaire à l'expédition) est appelé le temps de
réponse. En temps réel, le temps de réponse doit être déterministe et le délai dans le pire cas doit
être connu.
Un exemple utile de ce procédé est l’airbag dans véhicules d'aujourd'hui. Lorsque le capteur
qui fait état d'une collision du véhicule interrompt le CPU, le système d'exploitation doit envoyer
rapidement la tâche qui déploie le coussin gonflable plutôt que de laisser le traitement d’une tâche
en temps non réel intervenir. Un coussin gonflable qui se déploie une seconde plus tard que prévu
est plus acceptable qu’un coussin qui ne se déploie pas du tout.
Le concept de temps-réel peut être divisé en deux approches différentes:
- Un système d'exploitation qui peut supporter les délais voulus des tâches en temps réel est
appelé un système en temps réel dur. Mais ce temps réel dur n'est pas nécessaire dans tous les cas.
- Si un système d'exploitation peut prendre en charge les délais en moyenne, il est appelé un
système temps réel souple.
Les systèmes à temps réel durs sont ceux dans lesquels, manquer une échéance peut avoir
un résultat catastrophique (comme le déploiement d'un coussin gonflable trop tard). Les systèmes
à temps réel souples peuvent manquer des délais sans que l’ensemble du système ne soit perturbé
(comme la perte d'une image de la vidéo par exemple).
Maintenant que nous avons un aperçu des exigences du temps réel, regardons quelquesunes des architectures temps réel Linux.
b. Patch Xenomai
L'histoire de Xenomai est un peu tumultueuse. L'explication de M. Franke établit une synthèse et un
« arbre généalogique » très clairs auquel le lecteur pourra se reporter.
Xenomai est un système d'exploitation temps réel qui a Linux pour tâche de fond. Linux est
alors préempté comme une simple tâche. Les tâches gérées par Xenomai apportent ainsi une
garantie d'exécution temps réel dur. Qui dit deux systèmes d'exploitation, dit deux ordonnanceurs
et au moins deux problèmes : comment partager le matériel, et comment faire interagir les tâches
Linux et Xenomai entre-elles.
Comment alors faire cohabiter ces deux OS sur le même matériel ? Pour l'accès au CPU et à
la mémoire, il n'y a pas de problème car Linux est une tâche. Mais si une interruption (timer,
carte…) arrive, qui va la traiter ? La figure 7 illustre ce problème :
Année 2013/2014
11
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Figure 7. Problème de cohabitation des 2 OS.
La solution consiste à intercaler une couche entre le matériel et les systèmes d'exploitation.
Cette couche de virtualisation (ou hyperviseur, ou encore couche d'abstraction matérielle) s'appelle
ADEOS. ADEOS est un nanokernel qui va capturer les évènements pour ensuite les dispatcher vers
Xenomai ou Linux, mais pas dans n'importe quel ordre. Le but étant tout de même d'avoir un OS
temps réel, il est impératif que Xenomai soit le premier à les traiter. Si elles ne sont pas pour lui,
elles sont alors « passées » à Linux. On obtient donc l’architecture suivante pour un noyau Linux
patché avec Xenomai :
Figure 8. Architecture de Xenomai
Année 2013/2014
12
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Afin de faire face aux évènements, on utilise aussi le principe de pipeline appelé I-Pipe
(pour Interrupt-Pipe). Chaque événement traité par I-Pipe est traité à l'égard de leur priorité,
sachant que Linux est une tâche de priorité inférieure pour Xenomai.
c. Patch Preempt-RT
Linux-rt (où RT signifie en anglais « Real Time », littéralement « temps réel ») est une
branche du noyau Linux initiée par Ingo Molnar dans le but de répondre aux contraintes d'un
système temps réel. L'application du patch officiel PREEMPT-RT sur le noyau Linux standard lui
confère des fonctionnalités temps réel. Il ne fait que modifier le fonctionnement du noyau standard
sans ajouter un second noyau ou une couche de virtualisation temps réel, pas comme Xenomai.
Son fonctionnement est également très simple. Il rend préemptible la majeure partie du
code du noyau, notamment les sections critiques et les gestionnaires d’interruptions. Grâce à cela,
les tâches se voient attribuer une priorité, et les tâches de haute priorité peuvent prendre la main
sur celle de moindre priorité. Il modifie également certains mécanismes pour réduire les temps de
latences induits par le fonctionnement du système. Ce patch met aussi en place un mécanisme de
protections contre le problème connu sous le nom d'inversion de priorité par l'utilisation de
sémaphore à héritage de priorité.
II. Travaux Pratiques
1. TP0 : Prise en main de l’environnement
But : Mise en œuvre du système d’exploitation Linux embarqué Vanilla sur le processeur PowerPC
440 de la carte ML507.
Nous allons voir comment compiler le noyau Linux embarqué (Vanilla) avec son RAM Disk exécuté
par le PowerPC de la carte cible.
Nous adopterons les conventions suivantes :
Commande Linux PC hôte pour le développement croisé :
host% commande Linux
Commande Linux PC hôte pour le développement Xilinx :
[Xilinx EDK]$
Année 2013/2014
13
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Commande Linux embarqué sur la carte cible ML507 :
root#
• On démarre le PC sous Linux. Puis on se connecte sous le nom guest, le mot de passe est : guest.
• On se crée un répertoire de travail à son nom et on s’y place :
host% cd
host% mkdir mon_nom
host% cd mon_nom
Etablir le schéma de l’environnement de développement :
- Matériels.
- Liaisons : série, réseau…
- Logiciels et OS utilisés.
On se connecte à la carte cible ML507 en utilisant l’outil minicom en utilisant une autre fenêtre de
terminal. Ce terminal nous permettra d’interagir avec le système Linux embarqué exécuté par le
processeur PowerPC de la carte cible ML507.
Pour sortir du minicom, il suffit de taper la combinaison de touches : CTRL A, Z pour
accéder au menu et taper q pour quitter.
Procédure à suivre:
Dans son répertoire à son nom, recopier le fichier tp-ml507-ppc-linux.tgz sous
présent dans le répertoir de l’enseignant:
host% cp /home/kadionik/tp-ml507-ppc-linux.tgz .
Décompresser et installer le fichier tp-ml507-ppc-linux.tgz. Il faudra au
préalable se connecter comme superutilisateur car la décompression du fichier tpml507-ppclinux.tgz crée des points d’entrée de périphériques dans le système de fichiers root (sous /dev) qui
sera ensuite utilisé par le noyau Linux embarqué pour la carte cible ML507 :
host% su
host# tar –xvzf tp-ml507-ppc-linux.tgz
host# exit
host%
Année 2013/2014
14
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Puis on se place dans le répertoire ml507-ppc-linux/. L’ensemble du travail sera
réalisé à partir de ce répertoire ! Les chemins seront donnés par la suite en relatif
par rapport à ce répertoire...
host% cd ml507-ppc-linux
On compile le noyau Linux pour la carte cible ML507. Que fait le shell script go ?
host% cd linux
host% ./go
On télécharge par le JTAG le fichier de programmation ml507.bit du circuit FPGA
Virtex-5 de la carte cible ML507. Que fait le shell script load-design ?
host% cd ml507-ppc-linux
host% mbsdk
[Xilinx EDK]$ ./load-design ml507
Télécharger par le JTAG le fichier noyau Linux avec son RAM disk dans la RAM de la carte cible
ML507 puis lancer le noyau Linux embarqué. Que fait le shell script goml507 ?
[Xilinx EDK]$ cd ml507-ppc-linux
[Xilinx EDK]$ ./goml507
Réponses aux questions:
Que fait le shell script go ?
On cross-compile (on crée l’exécutable) le noyau Linux pour la carte cible ML507. En effet cette
cross-compilation permet de passer d’une architecture x86 (PC hôte) à l’architecture powerpc pour
la carte ML507.
Que fait le shell script load-design ?
Il charge dans l’environnement Xilinx le fichier de programmation qui configure les périphériques
de la carte Xilinx.
[Xilinx EDK] : développement Xilinx
Année 2013/2014
15
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Figure 9 : Commande load-design
Que fait le shell script goml507 ?
Il permet de télécharger le fichier compilé du noyau Linux dans la carte cible.
Figure 10 : Commande goml507
Synthèse : On a compilé puis téléchargé dans la carte cible le noyau Linux Vanilla grâce au fichier
de programmation ml507bit.
Année 2013/2014
16
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
2. TP1 : Application « Hello Wordl ! »
Nous allons rajouter une application dans le RAM disk utilisé par le noyau
Linux embarqué exécuté par le processeur PowerPC de la carte cible ML507.
Se placer dans le répertoire ml507-ppc-linux/ :
host% cd ml507-ppc-linux
Se placer ensuite dans le répertoire tst/hello/ et modifier le fichier hello.c afin de
créer le fameux « Hello World! » :
host% cd tst/hello
host% gedit hello.c
Compiler l’application hello pour la carte cible ML507. Que fait le shell script go ?
host% ./go
Installer l’application hello dans le système de fichiers root qui servira de base au RAM
Disk. Que fait le shell script goinstall ?
host% ./goinstall
Se placer dans le répertoire ramdisk/ pour regénérer le RAM disk. Le système de
fichiers root est sous root_fs/ et notre application hello a été précédemment copiée
sous root_fs/bin/ :
host% cd ml507-ppc-linux
host% cd ramdisk
host% ls root_fs/bin
Régénérer le RAM disk. Il faudra le faire en étant superutilisateur pour l’utilisation du
périphérique /dev/loop. Que fait le shell script goramdisk-16M ?
host% su
host# ./goramdisk-16M
host# exit
host%
Année 2013/2014
17
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Installer le nouveau RAM disk pour qu’il soit utilisé lors de la prochaine compilation du
noyau Linux. Que fait le shell script goinstall ?
host% ./goinstall
Recompiler le noyau Linux pour la carte cible ML507. Que fait le shell script ./go?
host% cd ml507-ppc-linux
host% cd linux
host% ./go
Réponses aux questions
*************************Fichier hello.c***************************
#include <stdio.h>
#include <stdlib.h>
int main ()
{
printf("Hello World!");
}
return 0;
Que fait le shell script ./goinstall ?
Il copie l’application « hello » dans le répertoire root_fs (répertoire de la machine qui regroupe le
systèmes de fichiers root, base pour le RAM disk, qui sont présents dans le noyau Linux).
Figure 11: Commande goinstall
Année 2013/2014
18
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Que fait le shell script goramdisk-16M ?
On regénère le RAM disk avec la nouvelle application « hello » pour qu’il sache qu’elle est dans le
répertoire root_fs.
Figure 12 : Commande goramdisk-16M
Que fait le shell script goinstall ?
Il installe les applications dans le répertoire RAM disk (dans le répertoire dans lequel on se trouve).
Année 2013/2014
19
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Figure 13: Commande goinstall
Que fait le shell script ./go?
Le shell script permet de recompiler le noyau Linux afin que le nouveau RAM Disk contenant
l’application soit prise en compte.
Enfin, on télécharge de nouveau le noyau Linux compilé dans la carte cible à l’aide de ./goml507 et
on tape l’application hello : Hello World ! (application que l’on appelle à partir de la carte cible à
l’aide du minicom).
Figure 14 : Commande go
Synthèse : On a donc importé une application « hello » dans le noyau Linux que l’on a téléchargé
dans la carte cible. On a exécuté cette application directement à partir de la carte à l’aide du
minicom.
3. Portage du noyau Linux Vanilla
Le but de ce TP est de réaliser une mesure de performances à l’aide de l’outil cyclictest. Etude
Année 2013/2014
20
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
menée pour un noyau Vanilla non chargé puis chargé.
Le cyclictest permet de mesurer les temps de latence entre deux threads périodique. La valeur
pertinente à étudier est la valeur maximale donnant le temps de latence maximum. on peut alors
juger de l’efficacité du système d’exploitation selon la contrainte.
L’outil stress permet de chargé le noyau en consommant le temps processeur.
Le ping permettra de stresser d’avantage le noyau en générant des interruptions.
Procédure à suivre:
Relever les temps latence entre les threads pour le noyau Vanilla non-chargé:
root # cyclictest -n -p 99 -i 1000
Donner la signification des arguments passés en paramètres.
On va maintenant charger le noyau via un autre terminal en utilisant la commande stress.
Pour se faire on doit se connecter à la carte à partir d’un nouveau terminal (Penser à vérifier
la configuration réseaux avec la commande ifconfig).
host% telnet ml05
ml507 login: root
Charger le noyau et relever la nouvelle valeur donnée par le cyclictest
root # stress -c 20 -i 20
Donner la signification des arguments passés en paramètres.
Nous allons utiliser la commande ping afin de stresser d’avantage le noyau.
host% ping -s @IP_carte_cible
Relever la nouvelle valeur du cyclictest.
Année 2013/2014
21
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Valeurs Trouvées:
Temps de latence pour noyau non-chargé: 68 us
Figure 15: cyclictest noyau Vanilla non-chargé
Année 2013/2014
22
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Temps de latence pour noyau chargé: 155us
Figure 16: Cyclictes noyau Vanilla chargé
Année 2013/2014
23
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Temps de latence pour noyau chargé avec ping: 25 us
Figure 17: Cyclictest Vanilla chargé+ping
Année 2013/2014
24
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
4. Portage du noyau Linux Xenomai
Dans cette partie nous allons mettre en place un noyau Linux Xenomai. Le patch Xenomai est à
télécharger sur Internet selon la version du noyau Vanilla utilisé.
Si les sources Xenomai ne sont pas dsponibles dans le répertoire du travail, récupérer les sources
Xenomai compatible avec la vesion de vanilla utilisé et eavleec processeur powerPC sur ,le site :
http://download.gna.org/xenomai/stable/
Puis les décompresser par la commande :
host% tar –xvjf fichier.tgz
Maintenant on passe à l’application du patch ADEOS pour powerPC aux sources du noyau Vanilla :
Etablir le lien symbolique pour la bonne version de Xenomai :
host% ln -s linux -2.6.35-xenomai/ linux
Vérifier bien que le fichier “ipipe” se situe dans le fichier “goppc -ipipe-2.6.35”
host% grep -r ipipe kernel
Cross-compilez le « ipipe » :
host% ./goppc-ipipe-2.6.35
Se placer en mode super utilisateur puis copiez le fichier de cross compilation « goinstall » dans le
répertoire « goppc-xenomai »
host% su
host% cp goppc-xenomai goinstall
Exécuter le fichier généré lors de la compilation
host% ./goinstall
Recompilez le noyau Linux afin que le nouveau RAM disk soit utilisé :
host% ./go
(dans le répertoire linux de ml507… )
Charger le noyau linux compilé dans la carte cible :
Année 2013/2014
25
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
host% cd ml507-ppc-linux
host% mbsdk
[Xilinx EDK] ./goml507
Dans un terminal accéder à l’outil minicom en tapant et vérifier le chargement du noyau patché.
Vous remarquerez la présence d’un ensemble d’outil de test que nous allons exploiter pour faire les
mesures de performances.
Se placer dans répertoire usr/xenomai/bin puis relever les temps latence entre les threads pour le
noyau Xenomai non-chargé:
host% cd /usr/xenomai/bin
root # cyclictest -n -p 99 -i 1000
Figure 18: Cyclictest Xenomai non-chargé
Faire de même pour le noyau Xenomai chargé. Utiliser l’outil stress à partir d’un autre terminal et en
agissant via la liaison Ethernet..
host% telnet ml507
root# stress –c 20 –i 20
Année 2013/2014
26
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Figure 19: Cyclictest Xenomai chargé
Faire de même pour le noyau Xenomai chargé + ping.
Valeur trouvée : 204 us.
Conserver les valeurs calculées pour une étude comparative.
La commande latency permet d’évaluer le temps qui s’écoule entre le moment où le processeur
stoppe une tâche courante afin d’exécuter une une tâche prioriataire.
Relever cette valeur (maximale) pour un noyau chargé puis chargé+ping.
root# latency -t0 -p 1000
Figure 20: Latency Xenomai chargé
Année 2013/2014
27
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Figure 21 : layency Xenomai chargé + ping
Expliquez et commentez les valeurs mesurée.
Synthèse:
Nous avons pu voir la mise en œuvre du noyau Xenomai. L'application du patch Xenomai sur les
sources du noyau Linux Vanilla permet de réaliser du Temps Réel dur et d'avoir des temps de latence
bornés de quelques dizaine de µs même en cas de très forte charge du système.
5. Portage du noyau Linux PREEMPT-RT
Dans cette partie nous allons appliquer le patch PREEMPt-RT aux sources du noyau Vanilla, a fin de
modifier les fichiers sources d'origine pour leur appliquer des corrections et/ou des modification
capables de faire du temps réel mou.
On commence par télécharger la dernière version du patch preempt-rt
« patches - 3.10.24 - rt22.patch.bz2 ».
Créer un répertoire de travail.
host% mkdir Linux+PREEMPT-RT
Récupérer les sources du patch Preempt-RT associé au noyau depuis le site internet.
Année 2013/2014
28
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
host% wget https://www.kernel.org/pub/linux/kernel/projects/rt/3.10/patches/3.10.24-rt22.patch.bz2 »
Décompresser le patch.
host% tar -xvjf patches-3.10.24-rt22.patch.bz2
Appliquez le le patch PREEMPT-RT aux sources du noyau
Host% cd linux-3.10.24
Host% patch -p1 < ../patch-3.10.24-rt22.patch
Créer le lien symbolique pour le noyau Preempt-RT.
Modifier les fichiers goconfig et godefconfig afin de cross-compiler pour une architecture
PowerPC 440 Virtex5. Puis lancer l’interface de configuration.
host% cat godefconfig
(modifier le code)
Figure 22: fichier modifié godefconfig
host% cat goconfig
(modifier le code)
Figure 23 : Fichier modifier goconfig
host% ./godefconfig
host% ./goconfig
Année 2013/2014
on lance le menu de configuration
29
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Figure 24 : Commande godefconfig et goconfig
Configurer le noyau PREEMPT-RT : Kernel Options -> Preemption Model -> Fully Premptible
Kernel (RT)
Vérifier que les options permettant d’utiliser les outils de mesures de performance sont
validées.
Enregistrer et quitter l’interface de configuration.
Figure 25 : Configuration du noyau
Année 2013/2014
30
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Compiler alors le noyau PREEMPT-RT.
host% ./go
Figure 26: Commande go
Réaliser le portage de ce nouveau noyau Preempt-RT(Méthodologie vue en amont).
Dans le minicon vérifier le bon chargement du noyau PREEMT-RT et la présence des outils
de test.
Preemp-RT
Noyau non-chargé
Noyau chargé
Noyau chargé + Ping
Cyclictest (us)
25
67
103
Preempt-RT
Noyau chargé
Noyau chargé+ Ping
Latency min
(us)
8.2
8.3
Latency max
(us)
41.3
105,2
Faire les mesures de latence pour un noyau chargé et chargé + ping. Comparer les résultats
obtenus.
Que déduire du patch PREEMT-RT ?
Année 2013/2014
31
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
Synthèse:
L'application de ce patch sur les sources du noyau Linux vanilla permet de faire du Temps Réel mou et
d'avoir des temps de latence de l’ordre d’une centaine de us. Le respect des contraintes temporelles
est important dans le cas d'applications spécifiques comme le traitement de flux multimédia et la
musique.
Cyclictest et latency globaux :
Que pouvez-vous déduire des performances des 3 noyaux ?
Année 2013/2014
32
Meunier - Cabrisseau - Martinez - Yakine
Rapport Projet SE
III. Conclusion
Ce projet fût l’occasion de réaliser différents portages de systèmes d’exploitation. Nous avons alors
pu apprendre la méthodologie à suivre afin d’embarquer ces systèmes sur le support fourni. Nous
avons de plus eu une réelle approche de ce que nous pouvions retrouver en terme de performances
selon que le noyau soit standard (Vanilla sans traitement Temps-Réel), à Temps-Réel Mou
(PREEMPT-RT) ou dur (XENOMAI).
Nous avons pu observer les vitesses de traitement par le processeur PowerPC 440 selon le système
embarqué. Il nous apparait que celui si met en exergue les spécificités liées aux 2 noyaux « RT »:
- Temps de latence chez Xenomai d’une dizaine de us
- Temps de latence chez Preempt-RT d’une centaine de us
L’ordonnancement veut alors que le noyau Xenomai traite bien plus vite les sollicitations externes
(contraintes dures) dans 100% des cas
Cependant les valeurs faibles de cyclictest dans le cas de l’étude du noyau Preempt-RT indique que
celui-ci optimise le déclenchement des processus (threads) pour le traitement de tâche. Le
caractère préemptible est bien marqué.
Ainsi, à travers la rédaction des TP qui pourront servir de base aux prochains élèves nous avons pu
analyser le comportement du processeur PowerPC en embarquant différents type de système
d’exploitation. Au vue des résultats, nous pouvons conclure que celui-ci est adapté au traitement
temps réel dur comme mou.
D’autres tests auraient sûrement permis d’arriver à ces conclusions (jitter, timer….) et une
progression plus rapide dans le projet nous aurait peut être laissé le temps de réaliser une étude
similaire avec un processeur ARM.
Année 2013/2014
33

Documents pareils