Linux et le temps réel - Meetup du 15 octobre 2015

777 vues

Publié le

Slides présentés le 15 Octobre lors du Meetup de Aix Marseille Embedded Linux, consacrés au temps réel en environnement Linux.

Publié dans : Logiciels
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
777
Sur SlideShare
0
Issues des intégrations
0
Intégrations
172
Actions
Partages
0
Téléchargements
22
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Linux et le temps réel - Meetup du 15 octobre 2015

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 19. Linux et le Temps réel - 15 Octobre 2015 19 www.ciose.fr Benchmark sur Kernel 2.4.6 natif
  20. 20. Linux et le Temps réel - 15 Octobre 2015 20 www.ciose.fr Benchmark sur Kernel 2.4.6 + patch preemptive
  21. 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. 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. 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. 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. 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. 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

×