Linux et le temps réel - Meetup du 15 octobre 2015
1. Linux et le Temps réel - 15 Octobre 2015 1
www.ciose.fr
Linux et le Temps réelLinux et le Temps réel
Partie 1Partie 1
C. CharreyreC. Charreyre
christian.charreyre@ciose.frchristian.charreyre@ciose.fr
http://www.ciose.frhttp://www.ciose.fr
https://twitter.com/CIOinfoindushttps://twitter.com/CIOinfoindus
http://fr.slideshare.net/charreyrehttp://fr.slideshare.net/charreyre
2. Linux et le Temps réel - 15 Octobre 2015 2
www.ciose.fr
Licence
Attribution-Noncommercial-Share Alike 4.0 International
You are free:
to Share - copy and redistribute the material in any medium or format
to Adapt - remix, transform, and build upon the material
The licensor cannot revoke these freedoms as long as you follow the license terms.
Under the following conditions:
Attribution — You must give appropriate credit, provide a link to the license, and indicate if
changes were made. You may do so in any reasonable manner, but not in any way that
suggests the licensor endorses you or your use.
NonCommercial — You may not use the material for commercial purposes.
ShareAlike — If you remix, transform, or build upon the material, you must distribute your
contributions under the same license as the original.
No additional restrictions — You may not apply legal terms or
technological measures that legally restrict others from doing
anything the license permits.
License text : http://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
3. Linux et le Temps réel - 15 Octobre 2015 3
www.ciose.fr
CIO en quelques mots
Société d'ingénierie en systèmes embarqués :
électronique et logiciel
Au service de nos clients depuis 1990
15 spécialistes en embarqué et temps réel
Expert en Linux embarqué depuis 2000,
OpenEmbedded et Yocto depuis 2008
CA annuel : 1 500 000 €
Siège à Saint-Étienne
Agence à Marseille
Agréé CIR
4. Linux et le Temps réel - 15 Octobre 2015 4
www.ciose.fr
C. Charreyre en quelques
mots
Associé au sein de CIO
Responsable des technologies Linux embarqué
Formateur Linux embarqué (avec Captronic et
en direct)
30 ans dans l'embarqué et le monde Unix / Linux
Fervent promoteur du logiciel libre
Membre de Medinsoft – Commission Logiciel
Libre
5. Linux et le Temps réel - 15 Octobre 2015 5
www.ciose.fr
Caractéristiques d’un
système Temps Réel
Principales caractéristiques attendues :
Délai de réponse à une IT borné et connu
Possibilité d’activer une tâche de manière périodique
avec un jitter borné
Scheduling basé sur un niveau de priorité fixe
Gestion fine du temps
6. Linux et le Temps réel - 15 Octobre 2015 6
www.ciose.fr
Caractéristiques de Linux
Linux est un OS de la classe généraliste (comme
Windows)
Le but principal de l’OS est d’affecter le processeur
à tous les process sur une durée moyenne :
Le scheduler privilégie l’avancée de tous les process au
détriment du déterminisme
Tous les process obtiennent le processeur au bout d’un
certain temps
Il existe une priorité « temps réel »
(sched_setscheduler() avec SCHED_FIFO ou
SCHED_RR)
En pratique, elle ne permet pas d’obtenir des
performances de temps réel dur
7. Linux et le Temps réel - 15 Octobre 2015 7
www.ciose.fr
Le scheduler de Linux
Source : Programmation Système en C sous Linux – Christophe Blaess
8. Linux et le Temps réel - 15 Octobre 2015 8
www.ciose.fr
États d'un processus
Un processus en sommeil attend une ressource
ou un événement extérieur
C'est le kernel qui place le processus en
sommeil
ex: écriture sur un device lent, le driver met le
processus en sommeil puis le rend de nouveau
éligible
Deux types de mises en sommeil :
interruptible : réveil sur l'arrivée d'un signal
ininterruptible : réveil seulement sur l'arrivée d'une
interruption au niveau du kernel (cf ex. ci dessus)
Transitions entre les états Running et Stopped
liées aux signaux SIGSTOP et SIGCONT
9. Linux et le Temps réel - 15 Octobre 2015 9
www.ciose.fr
Fonctionnement
multi tâches - Priorité
Le noyau doit assurer la répartition du
processeur entre les différents processus
Les transitions entre états s'effectuent sous le
contrôle du noyau
Lorsqu'un processus s'endort, le noyau
réattribue immédiatement le processeur à un
autre processus en attente
Cependant, cela ne suffit pas pour assurer une
bonne répartition du processeur
Le noyau préempte un processus actif pour
réattribuer le processeur sur la base des
critères d'ordonnancement
Linux est un système multi tâches préemptif
10. Linux et le Temps réel - 15 Octobre 2015 10
www.ciose.fr
Fonctionnement
multi tâches - Priorité
Un processus préempté passe à l'état Ready
De même un processus à l'état Sleeping qui se
réveille passe par l'état Ready, et éventuellement
après à l'état Running
Pour élire un processus, Linux se base sur 2
priorités :
valeur statique affectée au processus au démarrage (peut
être partiellement modifiée par appel système)
valeur dynamique remise à jour à chaque scheduling du
processus, fonction de la priorité statique et autres facteurs
plus le processus utilise le temps CPU imparti, plus sa
priorité dynamique baisse et vice versa
plus un processus a une priorité dynamique élevée, plus le
processus obtient une tranche de temps longue
mécanisme destiné à établir un temps partagé entre les
processus, et à assurer une avancée de tous (classe d'OS
généraliste type Windows...)
11. Linux et le Temps réel - 15 Octobre 2015 11
www.ciose.fr
Mécanismes
d'ordonnancement
3 types d'ordonnancement possibles,
définis au niveau du processus :
FIFO
Round Robbin
Other
Ordonnancement FIFO :
Principe de file attente
Une liste de processus par priorité statique
Le 1er processus de la file de + haute priorité
s'exécute jusqu'à ce qu'il relâche le processeur
Il est alors repoussé en fin de liste
Si aucun autre processus prêt à cette priorité,
passage aux priorités moindres
12. Linux et le Temps réel - 15 Octobre 2015 12
www.ciose.fr
Mécanismes
d'ordonnancement
Ordonnancement FIFO (suite) :
Dès qu'un processus de priorité supérieure est de
nouveau prêt, attribution immédiate du processeur
Type d'ordonnancement le plus égoïste car un
processus de plus forte priorité peut mobiliser le
processeur en permanence
13. Linux et le Temps réel - 15 Octobre 2015 13
www.ciose.fr
Mécanismes
d'ordonnancement
Ordonnancement Round Robbin :
Variante de l'ordonnancement FIFO
Au sein d'un niveau de priorité, chaque processus
dispose d'une tranche de temps fixe.
A la fin de celle-ci, il est interrompu, mis dans l'état
Prêt, et repoussé à la fin de la liste de ce niveau de
priorité
Ceci introduit une notion de partage du temps au
sein d'un niveau de priorité
Ordonnancement Other
Ordonnancement par défaut de Linux
Calcul d'une priorité dynamique en fonction de la
priorité statique et de la consommation du
processeur
Influe sur quantum de temps attribué
14. Linux et le Temps réel - 15 Octobre 2015 14
www.ciose.fr
Caractéristiques de Linux
Jusqu'en 2.4, le kernel ne peut être préempté : pas de
scheduling durant la durée d’un system call
En 2.6, préemption = option de configuration
Le kernel présente des sections non interruptibles
même en mode préemptible (handler d'IT + spinlocks)
Jusqu'en 2.4, la durée de sélection du process élu lors
du scheduling se dégrade avec le nombre de process
Process AProcess A
UserUser
System CallSystem Call
Process AProcess A
KernelKernel
Spinlock : Masquage ITSpinlock : Masquage IT
(Section critique)(Section critique)
IRQIRQ
IRQIRQ
HandlerHandler
Process AProcess A
KernelKernel
FinFin
System CallSystem Call
SchedulerScheduler
Process BProcess B
UserUser
Wake upWake up
process Bprocess B
15. Linux et le Temps réel - 15 Octobre 2015 15
www.ciose.fr
Solutions vers le Temps
Réel
Optimisation du code système :
Réduction des sections critiques dans le code kernel
Introduction de points de rescheduling dans les
systems calls
Création de patches du kernel
Utilisation d’une extension temps réel
16. Linux et le Temps réel - 15 Octobre 2015 16
www.ciose.fr
Kernel Preemptive patch –
Linux 2.4
Kernel preemptive patch :
– http://kpreempt.sourceforge.net
Solution MontaVista (commerciale)
Ce patch traite la non préemptabilité du kernel
standard
Le patch ne peut rien contre les spinlocks de longue
durée présents dans le code kernel (protection des
sections critiques)
17. Linux et le Temps réel - 15 Octobre 2015 17
www.ciose.fr
Benchmark du preemptive
patch
Résultats du benchmark Audio latency
(http://www.gardena.net/benno/linux/audio/)
avec et sans patch preemptive kernel
while(1)
{
time1=my_gettime();
waste 80% of the CPU of the duration of one audio
fragment (noop loop)
time2=my_gettime();
write(audio_fd,playbuffer,fragmentsize);
time3=my_gettime();
}
18. Linux et le Temps réel - 15 Octobre 2015 18
www.ciose.fr
Benchmark du preemptive
patch
Graphiques pour le cas de test ‘Write disk
stress’ :
Mesures de latence de traitement d’échantillons
audio sous diverses conditions de stress
Write disk stress consiste à copier un très gros
fichier sur le disque dur
Ligne jaune = durée d’un échantillon audio
Ligne blanche = durée de traitement mesurée =
time3 – time1
Ligne verte = simulation de traitement calée sur 80%
de la durée de l’échantillon = time2 – time1
19. Linux et le Temps réel - 15 Octobre 2015 19
www.ciose.fr
Benchmark sur Kernel
2.4.6 natif
20. Linux et le Temps réel - 15 Octobre 2015 20
www.ciose.fr
Benchmark sur Kernel
2.4.6 + patch preemptive
21. Linux et le Temps réel - 15 Octobre 2015 21
www.ciose.fr
Real Time Scheduler patch
– Linux 2.4
Real Time scheduler patch
http://rtsched.sourceforge.net/ ou
Solution MontaVista (commerciale)
Ces solutions créent un scheduler temps réel
efficace au dessus du scheduler Linux.
Le scheduler TR traite les priorités SCHED_RR et
SCHED_FIFO et passe la main au scheduler Linux
pour les autres cas.
Ce patche traite la dégradation du temps de
sélection du process élu du kernel standard
(algorithme en O(n))
Ne sert plus sur un kernel 2.6.x qui a un algorithme
en O(1)
22. Linux et le Temps réel - 15 Octobre 2015 22
www.ciose.fr
CONFIG_PREEMPT_RT Patch
Patches précédent dédiées aux vieux kernels
(2.4)
Actuellement : linux-rt (CONFIG_PREEMPT_RT
patch)
Patch qui est géré dans la branche linux-rt de Ingo
Molnar
Applicable sur kernels 2.6.x et 3.x
Suit les versions de kernel vanilla
Rend le kernel presque entièrement préemptible, y
compris pour les spinlocks et les handlers d'IRQ
Remplace les spinlocks par des mutexes avec
héritage de priorité
Les IRQ handlers deviennent des threads kernel
Voir https://rt.wiki.kernel.org/index.php/Main_Page
23. Linux et le Temps réel - 15 Octobre 2015 23
www.ciose.fr
CONFIG_PREEMPT_RT Patch
Des inquiétudes sur la soutenabilité
(développeurs + funding) jusqu'à Q3 2015
Annonce début Octobre de la création d'un projet
RTL (Real Time Linux) sous l'égide de Linux
Foundation, basé sur ce patch
Objectif ultime : merge du patch dans le kernel
upstream ?
24. Linux et le Temps réel - 15 Octobre 2015 24
www.ciose.fr
Extensions temps réel
Idée : disposer d’un RTOS en dessous du kernel
Linux
Linux tourne comme tâche idle du RTOS
Nécessité de partager le développement entre
éléments Real Time et éléments Linux
Des IPC pour échanger entre composants RT et
composants Linux
25. Linux et le Temps réel - 15 Octobre 2015 25
www.ciose.fr
Extensions temps réel
Les principales solutions :
RTLinux divisé en 2 produits
RTLinux Free qui relève de la licence GPL et de la
licence Open RTLinux Patent License. Ne semble plus
téléchargeable.
RTLinux Pro qui relève d’une licence commerciale
(Wind River)
RTAI et plus récemment Xenomai qui relèvent de la
licence GPL
RTAI développé par Institut Polytechnique de Milan
https://www.rtai.org/
Xenomai (http://www.xenomai.org/) implémente des
skins des RTOS traditionnels
26. Linux et le Temps réel - 15 Octobre 2015 26
www.ciose.fr
Principe de
fonctionnement
Application d’un patch sur le kernel pour
permettre l'utilisation de l'extension temps réel.
RTOS additionnel sous forme de Kernel
Module(s)
Développement de tâches du RTOS sous forme
de kernel modules ou de process Linux (LXRT /
Xenomai)
Le scheduler Linux ne gère pas les tâches
temps réel et ne fonctionne que lorsque le
RTOS lui laisse le processeur