CEA LIST
Transcription
CEA LIST
CEA LIST Compilation et noyau d'exécution dans l'approche OASIS pour la réalisation des systèmes temps-réel multitâche et déterministe Vincent DAVID [email protected] Laboratoire d' Intégration des Systèmes et des Technologies Objectifs, contexte, concepts – Le déterminisme et la sûreté de fonctionnement – L’approche OASIS La mise en œuvre dans une chaîne d’outils – Compilation et génération de code – Runtime et noyau d’exécution Focus sur dimensionnement, testabilité et mise au point Perspectives avancées – Aspects distribués – Systèmes critiques/non critiques Laboratoire d' Intégration des Systèmes et des Technologies Bref historique Réacteur 1300 MW : système de CC numérique (1ère génération avec logiciels classés de sûreté 1E) – 1985, 8 unités P4, 12 unités P’4 et P’’4 – plus de 350 années de fonctionnement réacteur cumulées (2003) Réacteur 1450 MW : système de CC numérique (2ème génération) – 1996, 4 unités N4 – plus de 30 années de fonctionnement réacteur cumulées (2003) Etapes principales du projet OASIS – – – – 1993 Æ 1995 : analyse des différentes approches 1996 Æ 2000 : élaboration des concepts OASIS et outils prototypes 2001 Æ 2003 : pré-industrialisation 2003 Æ 2006 : industrialisation dans le cadre du projet QDS/OASIS Partenaires – 1993 Æ 2000 : CEA – EDF – FRAMATOME – 2001 Æ 200x : CEA – FRAMATOME (AREVA-NP) Laboratoire d' Intégration des Systèmes et des Technologies Objectifs : performances et sûreté Diminuer les coûts de développement, de qualification et d’architecture – plus faciles à concevoir, à réaliser, à maintenir (productivité) – plus faciles à tester, à vérifier et à valider (productivité et qualification) – plus performants, trouver le bon dimensionnement (meilleure intégration) Meilleures intégration, modularité et flexibilité – permettre un fonctionnement « multitâches » • avec des échelles de temps multiples – « composants » temps-réel, interface et comportement parfaitement définis et maîtrisés • interactions déterministes des « composants » • (pré-)certification générique de systèmes à logiciel prépondérant – réduire le nombre de composants matériels (ECU, réseaux…) Meilleure sûreté de fonctionnement des ECU – garantir un fonctionnement déterministe, indépendamment des problèmes d’ordonnancement – supporter des mécanismes de détection et de confinement d’anomalies de fonctionnement (ségrégation) => Approche multitâche orientée temps-réel et sûreté de fonctionnement Laboratoire d' Intégration des Systèmes et des Technologies Sûreté de fonctionnement Confiance fondée sur quelques grands principes 1. robustesse, tolérance aux fautes (détection et confinement d’anomalies, modes dégradés, etc.) 2. maîtrise des mécanismes mis en œuvre (ex : problèmes des logiciels à interruptions) 3. déterminisme comportemental (reproductibilité des tests : les mêmes causes impliquent les mêmes effets) 4. application du principe de diversification (prévenir les pannes de cause commune, ex : redondance ou div. fonct., etc.) 5. défense en profondeur OASIS s’attaque aux points 1, 2, 3 et facilite la mise en œuvre du point 4 (meilleure intégration) Laboratoire d' Intégration des Systèmes et des Technologies S’inspirer du multitâche, mais viser le déterminisme système Ne pas introduire de sources d’asynchronismes dans la conception des applications (e.g. pas d’entrées/sorties sous interruptions) – dominer les asynchronismes dus aux temps d’exécution variables • pour garantir le déterminisme • pour maîtriser le dimensionnement (performances) Proposer un modèle multitâche communiquant – avec un partage sécurisé des ressources – sur des cibles matérielles standards Simplifier les problèmes de coordination des activités exprimées en conception Définir une approche modulaire/compositionnelle – interactions entre modules totalement spécifiées et maîtrisées – réduire les difficultés de mise au point, de tests et de validation (test et déterminisme) Laboratoire d' Intégration des Systèmes et des Technologies Le fonctionnement TT dans OASIS Le système est cadencé par le temps réel (Time-Triggered) – tous les traitements prennent place entre deux instants du système (mais pas forcément consécutifs) : • les exécutions asynchrones sont synchronisées (synchronisme) au début et à la fin des traitements : isochronisme réel indépendant du matériel – tous les transferts de données entre « tâches » ont lieu à la transition entre deux traitements Intervalle de temps spécifié Td Date de début au plus tôt Tf … Date de fin au plus tard AE … temps physique Durée d’exécution effective Cohérence temporelle des échanges (liée aux mécanismes de communication OASIS) – encapsulation des données et des traitements (donnée protégée et un seul producteur) – les valeurs des données sur lesquelles travaille une AE ne sont pas sensibles entre Td et Tf X ∈ p1 déb H 1 H 2 fin p t0 2 – – – principe d’observabilité strict mise à jour implicite et automatique aux rythmes définis dimensionnement automatique et protection des tampons, optimaux et sûrs X( t 0 )=X( )=X(déb ) Laboratoire d' Intégration des Systèmes et des Technologies Cohérence temporelle Agent consultant décalé (-2) X0 Agent producteur du flot X2 X1 X0 X2 X1 X0 Agent consultant en phase (0) tφ Laboratoire d' Intégration des Systèmes et des Technologies Ordonnancement et dimensionnement Les valeurs des données sont indépendantes – des durées d’exécution réelles, de la politique d’ordonnancement, de la fragmentation des AE => Le comportement temps-réel est indépendant de l’ordonnancement Une condition nécessaire et suffisante de dimensionnement – un surgraphe représente tous les comportements temporels possibles d’une tâche du point de vue des synchronisations temporelles 0 1 (2) (3) 4 5 … Hω – la composition de ces surgraphes permet de connaître tous les intervalles temporels partagés par les traitements de chaque tâche • le produit synchronisé est l’opération mathématique de composition des surgraphes • le « graphe » obtenu contient TOUS les entrelacements possibles des traitements – engendre un système d’équations et d’inéquations temporelles => Démonstration du dimensionnement [ICECCS 98, ISOLA 07] Laboratoire d' Intégration des Systèmes et des Technologies Objectifs, contexte, concepts – Le déterminisme et la sûreté de fonctionnement – L’approche OASIS La mise en œuvre dans une chaîne d’outils – Compilation et génération de code – Runtime et noyau d’exécution Focus sur dimensionnement, testabilité et mise au point Perspectives avancées – Aspects distribués – Systèmes critiques/non critiques Laboratoire d' Intégration des Systèmes et des Technologies Mise en œuvre d'OASIS et choix primordiaux Pas de rupture culturelle de l'entreprise, mais une rupture technologique pour la sûreté – – – utilisation d’environnement et de plateforme standard : C, gcc, gld, etc. portabilité et pérennité des développements qualité des outils (taille des problèmes traités, performances, traçabilité, etc.) Description aisée d’une conception OASIS – – Le temps, les agents, les communications, etc. Fusionner les aspects OASIS et les aspects algorithmes classiques Limiter les erreurs – – – ª Approche déclarative (spécification du besoin) plutôt qu’impérative (appels de fonctions ou de primitives) Contrôle de la conception (cohérence du modèle) et moyens d’analyses d’une conception (à différents niveaux) Dégager le concepteur des calculs (sur le temps, le dimensionnement, etc.), des problèmes de codage Définition du langage ΨC et compilation de la conception OASIS décrite Extension complète du langage C : – – – – – Multitâche : définition des tâches (agent), de leur code algorithmique dont leur point d’entrée (body start) Communications inter-agents : interfaces et manipulations des flots de données temps-réel et des messages temporels Comportement temps-réel : au sein des algorithmes de calcul, expression du temps et des synchronisations temporelles (advance, before, …) Le code ΨC et l’algorithmique des agents se base sur les instructions du langage C (fonctions C, intr. préprocesseur, etc.) Englobe la norme C ISO/CEI 9899:1989 (ANSI-C) et sa bibliothèque standard Laboratoire d' Intégration des Systèmes et des Technologies Exemple d’écriture du ΨC Un agent avance dans le temps par sauts successifs le long d’une échelle de temps (horloge de base de la tâche) définie par le concepteur pour chaque agent – Les sauts peuvent être de longueurs différentes (comme ci-dessous 1-3-1) … Hω temps clock HBASE= gtc1(0, 1); /* 1 ms */ application demo(inittime=99) with HBASE; agent ag1tst(starttime= 1) with HBASE { body start { /* proc 1 */ advance(1); /* proc 2 */ advance(3); /* proc 3 */ advance(1); } } Initialisation TT : – Chaque tâche démarre à partir d’un instant spécifié de son horloge de base après le démarrage TT de l’application – La valeur initiale du temps TT de l’application est elle aussi prédéfinie par le concepteur Laboratoire d' Intégration des Systèmes et des Technologies Structuration d’une application ΨC Outils supports de conception, de génération de code, d’analyse, de dimensionnement, support d’exécution et de simulation – compilation : expression des algorithmes avec le cadencement temps-réel – production automatique du code exécutable et des graphes de contrôle et des structures de communication – noyau générique d'exécution temps-réel orienté sûreté – exécution réelle en temps réel ou simulé (‘simulation exacte’ car un seul comportement possible) sur une API noyau différente (e.g. POSIX) – dimensionnement des ressources d’exécution (tampons, etc.) Comme pour une chaîne de développement standard C – Unité de compilation séparée des codes sources : fichiers .psy contenant un ou plusieurs agents • Puis compilation de toute l’application (ensemble de fichiers Ψ qui la compose) – Maîtrise du processus de compilation ‘front-end’ • Lors de la 1ère phase de compilation, création d’une arborescence (par fichier Ψ) – Catalogues conservés pour traçabilité et qualification – Documentation (e.g. graphes format graphviz) engendré pour traçabilité et qualification • Dans la 2ème phase de compilation, création d’un répertoire avec le code généré pour tous les éléments de l’application – Possibilité d’utiliser du code algorithmique en bibliothèque ou pré-compilé et de ne l’introduire que lors de la phase d’éditions de liens & construction du binaire Généricité et réutilisation au de-delà d’une chaîne de développement standard – Réutilisation d’agents génériques au niveau de leur code binaire (sans les recompiler, seule l’édition de liens est impactée) au sein d’applications ΨC Laboratoire d' Intégration des Systèmes et des Technologies Chaîne de génération de code OASIS simplifiée Codes ΨC Application Outil de documentation Documentation Elaborée Outils d’analyse et de vérification CNS Dimensionnement Compilation (1) Tables Doc. ... Compilation (2) Codes C Tâches Application Codes C Runtime Application Exécution exacte en temps simulé Code C CS/μΝ Code cible.s Codes Objets Tâches Application Codes Objets Runtime Application Code objet CS/μΝ Segmentation Images mémoires Edition de lien finale Laboratoire d' Intégration des Systèmes et des Technologies Code Exécutable Le compilateur ΨC, cyc (1/3) C’est un Lexeur/Parseur/Checkeur : – Analyse lexicale, syntaxique de tout le Ψ et le C – Analyse sémantique de tout le Ψ et une grande partie du C – NB : Les vérifications entre les différentes unités de compilation sont faites dans la deuxième phase de compilation C’est un Générateur de code : – Traduction du code exécutable en C avec insertion de fonctions spéciales – Traduction de la structure du code (pour la compilation des graphes de contrôle) – Extraction d’éléments de déclaration (les types, etc.) Il a été réalisé : – Sans récursivité – Sans gestion dynamique de la mémoire – Pour que le code soit engendré via une seule fonction pour permettre traduction en ligne/colonne Toutes ces opérations sont traçables et lisibles Laboratoire d' Intégration des Systèmes et des Technologies Le compilateur ΨC, cyc (2/3) Le ΨC est plus typé que le C : – En vue d’une vérification exhaustive de la cohérence de tous les types de l’application et du runtime typé, le compilateur ΨC tague ou retague : • Les noms de variables liées aux communications (par des noms et non par des numéros) • Les noms de type de struct/union/enum • Les noms de typedef Couple ( parseur ΨC ; parseur compilateur C ) – Organisation de la compilation pour démasquer une erreur s’il en existe une pour permettre une détection • Soit au niveau de cyc (e.g. interfaces de communication) • Soit au niveau du compilateur C – S’appuie sur le retaggage – Pour permettre une analyse plus approfondie par des outils d’analyse statique complémentaires • Exemple : lint / script PsyLint et qac / script PsyQac – Pour permettre d’autres couplages comme • Réalisation d’un outil d’extraction & mise en forme automatique des commentaires pour élaborer la réprésentation graphique des algorithmes ΨC et C Laboratoire d' Intégration des Systèmes et des Technologies Le compilateur ΨC, cyc (3/3) Sens d’une erreur – Pas de warning : c’est correct ou c’est incorrect – Une seule erreur stoppera la suite de la génération de code – Mais cyc tente de poursuivre l’analyse jusqu’à 50 erreurs Vérifications effectuées – Les mots réservés (_psy) – Les erreurs de syntaxes et sémantique ΨC • Ex : next indéfini, continue hors boucle, instructions inatteignables, etc. – Calcule et vérifie les horloges et les contraintes d’inclusion – Les déclarations Ψ, omises, multiples – Des règles supplémentaires • Ex : */const/volatile/void dans une struct d’une temporelle ou mesbox • Ex : pas de goto arrière, label manquant, pas de goto entrant dans un scope Intègre de la programmation défensive (saturation des tables internes et incohérences) Laboratoire d' Intégration des Systèmes et des Technologies Compilation de graphes (1/3) Point de départ : code ΨC de chaque agent Le compilateur a construit pour chaque fichier .psy, son arbre de syntaxe abstraite – il contient toutes les règles de grammaire utilisées • dont les instructions C conditionnelles et toutes les instructions Ψ (advance, …) – et leur agencement dans le code (tient compte des boucles, branchements conditionnels) Des graphes intermédiaires sont engendrés (Psy1 et Psy1g fic.psy) pour pouvoir – se limiter aux seuls nœuds/arcs intéressants du point de vue du flot d’exécution et des contraintes temporelles – calculer les contraintes temporelles de chaque portion de code (date de début au plus tôt, date de fin au plus tard ou échéances) Après réduction, on obtient un graphe minimal par agent contenant – Les contraintes temporelles de chaque traitement de l’agent – Tous leurs enchaînements possibles dans le code l’agent C’est le graphe de contrôle d’exécution de l’agent Laboratoire d' Intégration des Systèmes et des Technologies Compilation de graphes (2/3) Caractéristiques d’un graphe de contrôle d’exécution : – Contient des nœuds de 4 types : advance, update, send, when • Pour chaque nœud, il est possible de les lier au code source de l’agent via leur numéro – Contient des arcs orientés qui correspondent à des portions de code exécutable • Congruence entre les arcs et des lignes du code source • Un arc pourrait ne jamais être parcouru lors de l’exécution (car dépendant de la logique d’instructions conditionnelles précédentes) • Un arc peut contenir plusieurs branches conditionnelles Ce graphe détermine tous les appels possibles de l’agent au micronoyau Tous les comportements temporels possibles d’un agent sont inclus dans son graphe de contrôle d’exécution – Élément de base autonome et indépendant Laboratoire d' Intégration des Systèmes et des Technologies Compilation de graphes (3/3) Les graphes de contrôle d’exécution sont utilisés – Pour être animé, dans le cadre d’une exécution réelle en temps simulé (sans la machine cible) – Pour contrôler l’exécution : ils sont stockés dans le runtime de l’agent Pour connaître tous les points de synchronisation temporels d’un agent, il est nécessaire de parcourir le graphe d’exécution – Définition des points de synchronisation : séparation temporelle entre deux traitements (traits verticaux dans les chronogrammes) – Muni de tables complémentaires (bornes de boucles, période & phase des horloges) – Afin de le déployer dans le temps et de déterminer les états temporels équivalents (congruence temporelle et de valeur d’indices de boucles) – Obtention d’un nouveau graphe où seuls les nœuds de synchronisations temporelles (advance) sont conservés : le surgraphe d’un agent Laboratoire d' Intégration des Systèmes et des Technologies Notion de surgraphe d’un agent … Hω temps clock HBASE= gtc1(0, 1); /* 1 ms */ application demo(inittime=99) with HBASE; agent ag1tst(starttime= 1) with HBASE { body start { /* proc 1 */ advance(1); /* proc 2 */ advance(3); /* proc 3 */ advance(1); } } compilation Laboratoire d' Intégration des Systèmes et des Technologies Calcul du surgraphe d’un agent (1/4) AgDemo (MS) Horloge HB=5*MS Inittime 1000s Lecture des données d’un coupleur toutes les 5 ms Laboratoire d' Intégration des Systèmes et des Technologies Calcul du surgraphe d’un agent (2/4) Laboratoire d' Intégration des Systèmes et des Technologies Calcul du surgraphe d’un agent (3/4) A.S.A. (1) Laboratoire d' Intégration des Systèmes et des Technologies Calcul du surgraphe d’un agent (4/4) Graphe de contrôle (2) (4) Surgraphe (3) Traces d’exécution simulée Laboratoire d' Intégration des Systèmes et des Technologies La compilation ΨC et la génération de code C (1/2) Chaîne de compilation : – gère différentes unités de compilation, les numéros de lignes pour les codes d’erreurs (cf. traçabilité), etc. – calcule les contraintes temporelles – calcule les dimensions des tampons Code exécutable engendré directement à partir de la conception en ΨC – génération des données et codes de runtime pour chaque agent – génération des données de runtime de l’application pour le Noyau En ΨC, il n’existe que des primitives de programmation déclaratives : – pas d’appel noyau direct, tout est compilé à partir de la description haut niveau Après compilation, une seule primitive d’exécution (!) : – – – – demander le changement de nœud dans le graphe de contrôle la sémantique est compilée dans la runtime avec ses tables le graphe de contrôle de l’automate de chaque agent est fourni à la runtime le contrôle de cohérence est assuré par le Noyau Laboratoire d' Intégration des Systèmes et des Technologies La compilation ΨC et la génération de code C (2/2) Traçabilité de la génération de code C à partir du ΨC – Dans la structuration des fichiers engendrés • Nommage en fonction des unités de compilation séparés et de leur rôle • Conservation des tables de calculs intermédiaires – Au sein des fichiers engendrés eux-mêmes • Traduction incrémentale en ligne et en colonne pour – Les codes engendrés et des codes applicatifs algorithmiques conservés Respect de la mise en forme du fichier source Ψ initial qui permet – Une mise au point efficace lors de la compilation : le report d’erreur se fait par rapport au fichier initial – Un interfaçage correct avec outils de mise au point existant dans la chaîne de compilation C standard tel que • Analyse / mise au point du code binaire (e.g. gdb, ddd) – Points d’arrêt au sein du code Ψ, du code engendré ou du code applicatif • Couverture de code (e.g. gcov) quand couplé à l’outil d’exécution exacte POSIX en temps simulé Laboratoire d' Intégration des Systèmes et des Technologies Anomalies, déterminisme et modularité Quelques défauts résiduels peuvent toujours être présents – le nombre de défauts non révélés doit être aussi bas que possible – certains défauts peuvent être activés sans être détectés par le test • Exemple de non déterminisme : lecture d’une mauvaise adresse contenant une valeur dépendante de l’instant physique de l’accès (dans ce cas, le comportement observé sera dépendant de l’implantation, de la vitesse du processeur, de l’ordonnancement) Principe de déterminisme fort dans OASIS – la conséquence d’une anomalie doit être déterministe • il faut confiner les anomalies et maîtriser leurs conséquences • forte intégration => nouveaux mécanismes de détection et de confinement déterministes – il faut • détecter à l’exécution toutes les tentatives de violation de la séparation des tâches • contrôler le dimensionnement des ressources d’exécution (tampons, quotas CPU, etc.) • contrôler l’enchaînement séquentielle des actions, etc. – l’impact d’une anomalie de fonctionnement est maîtrisé et déterministe Définit une architecture logicielle modulaire – généricité des tâches au niveau du code objet (binaire) • pas de recompilation • seulement le runtime à engendrer et l’édition de liens à refaire – permet une approche multi-fournisseur Laboratoire d' Intégration des Systèmes et des Technologies Organisation défensive des programmes exécutables Mode d’exécution utilisateur Code et données d’une tâche … Code et données d’une tâche Codes et données applicatifs trap Prolongement du contexte d’une tâche dans la couche système Mode d’exécution privilégié Prolongement du contexte d’une tâche dans la couche système Données relatives d’une application (runtime) Code de la couche système move sr Données et code du micro-noyau horloge – – (gestion de l’allocation du processeur aux tâches et gestion du temps) contextes d’exécution distincts hors de CS et différents internes à CS, contexte μN indépendant segmentation particulière des exécutables et des données • – – – – Code générique (Noyau) conception orienté sûreté et exploitation spécifique des mécanismes de protection liés au H/W contrôle de conformité de l’exécution de chaque tâche contrôle toutes les hypothèses de dimensionnement (quotas, tampons, etc.) les préemptions de tâches sont toutes contrôlées par le μNoyau atomique CS 100% préemptible Laboratoire d' Intégration des Systèmes et des Technologies Noyau générique d’exécution (1/2) Le Noyau n’est pas un moniteur standard – c’est un exécuteur orienté sûreté des graphes de contrôle d’exécution de chaque tâche Des mécanismes de détection et confinement d’anomalies de fonctionnement – les tentatives de violation d’un quota de temps imparti ou la violation d’un graphe de contrôle ou la violation du dimensionnement d’un tampon – conception orienté sûreté et exploitation spécifique des mécanismes de protection liés au H/W (MMU –descripteurs statiques- et mode privilégié) (brevet d’invention) – l’impact d’une anomalie de fonctionnement est maîtrisé et déterministe Le μNoyau est un automate cadencé par le temps (programme séquentiel non préempté) : – la seule source d’interruption (l’horloge système) est utilisée pour la détection et le confinement d’anomalies et les synchronisations temporelles – les préemptions de tâches sont toutes contrôlées par le μNoyau – la CS est entiérement lock-free/wait-free (100% préemtible) • activité incluse dans la gestion des quotas Laboratoire d' Intégration des Systèmes et des Technologies Noyau d’exécution sur IA32 (2/2) Portabilité – – Couche système écrite en C Micronoyau écrit en C pour toutes les parties indépendantes du matériel (assembleur sinon) Mise en œuvre des E/S matérielles spécifiques sur Intel IA32/PC-AT (IO_S) – – Dont les fonctions spécifiques avec droits superviseur restreints pour effectuer les opérations d’E/S (in/out) Pour que chaque agent puisse faire appel aux fonctions d’E/S qui nécessitent ces privilèges avec contrôle d’accès Contrôle de l’initialisation et de la configuration des chipsets au démarrage (définition du mode INIT_S) – – Une fois que le BIOS a donné la main au bootloader OASIS, il n’est plus jamais utilisé Bootloader OASIS • Permet de télécharger les images noyau séparément des images applicatives sur mémoire statique de la carte via les ports réseaux – Gestion d’un protocole de communication pour le téléchargement par paquets – Contrôle des réceptions via un protocole spécifique et cryptage des binaires • Contrôles sur les chipsets – Non utilisés : mis en mode désactivé – Utilisés : configuration puis avant la fin de la séquence de démarrage vérification de la conformité de la configuration mise en œuvre Performance – Temps de passage dans le micronoyau de moins d’une microseconde Laboratoire d' Intégration des Systèmes et des Technologies Editions de liens, segmentation mémoire (1/2) Psyld réalise l’édition de liens de tous les _.o d’une application pour la plateforme cible – Première édition de liens entre chaque agent avec ses librairies et sa partie de runtime correspondant • Segmentation mémoire – Implantation du pont (interface entre le noyau générique et une application) – Implantation de chaque agent – Alignement de tous les segments pour pagination • genMMU fait les tables MMU correspondantes – Compilation des tables – Implantation – Seconde édition de liens entre toutes les morceaux • Produit le résultat _.ex – NB : le Noyau n’est pas recompilé, ni relinké Ldint réalise l’édition de liens de tous les _.o d’une application pour la simulation exacte sur POSIX – Idem avec programme principal (main en bibliothèque : inter.o) et sans implantation mémoire Laboratoire d' Intégration des Systèmes et des Technologies Editions de liens, segmentation mémoire (2/2) Organisation de la mémoire telle que – Les piles des agents sont séparées • Placées dans des segments tels que tout débordement est détecté par la protection mémoire – Pas de translation d’adresse : mapping direct (bijection) entre adresses logiques et physiques • Facilite la détection d’erreur • Permet une mise au point aisée – Pas de dépendances cachées que ce soit • Via les librairies applicatives • Via le code couche système – Toutes les tables de symboles sont conservées • Globales (tables systèmes, tables de protection mémoire, etc.) • Locales aux agents (données/fonctions locales, en bibliothèque, etc.) Laboratoire d' Intégration des Systèmes et des Technologies Mise au point - exécution en temps simulé (1/2) Objectif : exécuter une application écrite en ΨC dans un environnement standard comme POSIX (machine de développement) L’outil repose sur le principe de déterminisme logique et temporel d’OASIS – Résultats indépendant de l’ordonnancement des traitements des agents L’écoulement du temps réel peut être simulé Réutilisation (après la fin de Psy2) pour compilation – Du code engendré lors de la compilation et relatif à l’application – Du runtime de chaque agent – De la couche système – Des fichiers C du micronoyau Seuls les fichiers assembleurs et les fichiers relatifs à la cible ne sont pas réutilisés On peut alors parler d’exécution du code réel en temps simulé – Gestion du temps via la fonction heureCourante Laboratoire d' Intégration des Systèmes et des Technologies Mise au point - exécution en temps simulé (2/2) Fonction centrale de l’outil : ordonnancement – – – – Faire progresser le temps et gérer l’activation des agents Synchroniser les données d’entrée vis-à-vis de l’heure globale Dater les changements de contexte Servir les appels systèmes (et éventuellement stocker une trace de ces appels) 1 processus POSIX par agent et 1 processus POSIX pour l’outil d’exécution exacte en temps simulé Options pour l’outil -t nom_fichier_trace –m nombre_de_lignes_engendrés -s[p] : exécution séquentielle[parallèle] en temps simulé -r : exécution temps-réel en time-sharing dans le « grain » POSIX -R : exécution temps-réel POSIX dans le « grain » POSIX avec priorité (par défaut) Obtention de traces exactes exploitables pour la V&V d’une application – Pour l’analyse du comportement temporel d’un agent – Pour une pré-analyse de charge (vis-à-vis des quotas) – Pour l’établissement d’une politique de test via des scénarios temporels Laboratoire d' Intégration des Systèmes et des Technologies Mise au point sur cible Objectif : être capable de mettre au point sur cible, i.e. d’insérer des points d’arrêt – Positionnement points d’arrêt en fonctionnement temps-réel • En s’appuyant sur l’exécution cadencée par le temps – Concernant des applications multitâches • Possibilité de mise au point agent par agent – Quelque soit le code concerné, applicatif ou système (Ψ et C) Noyau indépendant des applications – Remplacement du noyau standard par celui instrumenté pour mise au point (via lien série) • « Hook » sur le lien série pour lire l’ordre d’arrêt et échanger des données pour la mise au point • Sans changement de l’applicatif – Point d’arrêt initial au démarrage du système puis dépendant de l’utilisateur Maîtrise de la construction de l’empreinte mémoire linéaire – Possibilité d’utiliser outils standards de mise au point (gdb) • Par instrumentation du compilateur C – Pour analyser ou injecter des valeurs directement en mémoire • Pour données internes ou d’I/O • Assistance au processus de test d’intégration & validation Laboratoire d' Intégration des Systèmes et des Technologies Synthèse Conciliation du déterminisme et du multitâche – objectifs de sûreté et de performances des systèmes critiques embarqués – maîtrise des applications temps-réel développées – maîtrise du dimensionnement Avantages – – – – permet autant de rythmes de temps de cycles que nécessaire permet de tenir plus facilement la charge sur les temps de cycle permet des démonstrations de sûreté dès l’étape de conception difficultés de conception (diagrammes temporels) séparées des difficultés de dimensionnement (ordonnancement) – portabilité et pérennité grandement facilitées • coûts de modification et de maintenance mieux maîtrisés • véritable approche modulaire pour la composition de tâches temps-réel – exécution réelle en temps-réel ou simulé sans machine cible – nombreux mécanismes de détection et de confinement d’anomalies de fonctionnement • ségrégation, comportements extrêmes mieux maîtrisés Transfert industriel dans le domaine nucléaire pour AREVA NP (2003-2006) – respect des normes et recommandations en vigueur • standard industriels : C, IA32, etc. • exigences de sûreté : CEI 60880, RFS – plateforme innovante QDS/OASIS – qualification : système classé de sûreté, catégorie A Laboratoire d' Intégration des Systèmes et des Technologies Objectifs, contexte, concepts – Le déterminisme et la sûreté de fonctionnement – L’approche OASIS La mise en œuvre dans une chaîne d’outils – Compilation et génération de code – Runtime et noyau d’exécution Focus sur dimensionnement, testabilité et mise au point Perspectives avancées – Aspects distribués – Systèmes critiques/non critiques Laboratoire d' Intégration des Systèmes et des Technologies Dimensionnement / tampons de communication (1/2) Principe – Le concepteur exprime les besoins en communication, les outils de génération de code calcule la taille des tampons pour la mise en œuvre – Calculer automatiquement un majorant le plus proche possible du maximum atteignable par analyse des informations statiques recueillies lors de la compilation Pour les variables temporelles – Calcul réalisé grâce aux tables extraites de la compilation – La taille d’un tampon local par consultant a une taille égale à celle spécifiée dans son interface – La taille du tampon global est calculé en fonction des sauts maximums dans le temps du producteur et des consultants vis-à-vis de la période de l’horloge associée à la variable temporelle (indépendamment de l’ordonnancement) Laboratoire d' Intégration des Systèmes et des Technologies Dimensionnement / tampons de communication (2/2) Pour les messages – Calcul de la densité d’émission des messages (N, λ) : il y aura un maximum de N messages envoyés par l’agent toutes les λ unités de temps • Utilisation des surgraphes pour lesquels on a conservé le nœud send (éventuellement « déplié » N fois) • Recherche de tous les circuits temporels passant par un nœud send pour trouver le circuit de valeur minimum λ – Dimension d’un tampon = N*(1+E(Tmax/λ) ) • Calcul de Tmax : – Pour les zones d’émissions, égal à la somme de l’échéance du message et du saut maximum dans le temps de l’agent récepteur (advance) – Pour la zone de réception, égal à la somme de la durée que le message est autorisé à rester dans le tampon et du saut maximum dans le temps de l’agent récepteur Laboratoire d' Intégration des Systèmes et des Technologies Dimensionnement CPU / principes Cadencement TT d’une tâche décrit dans la conception – Encapsulation du comportement temporel dynamique dans le surgraphe issu de la compilation • Enchaînement dynamique des AE d’une tâche • Echanges de données inter-tâches Ordonnancement dynamique de l’exécution – Qui respecte le cadencement TT issu de la conception • Exécution du graphe de chaque tâche séparément contrôlé par le noyau – Ordonnancement guidé par les échéances • Optimal pour le modèle OASIS • Obtention d’une CNS pour savoir si la propriété de ponctualité est vérifiée – Démonstration hors-ligne du dimensionnement • Basée sur la connaissance des quotas des AE (majorants des temps d’exécution) • Surveillance en ligne – Des quotas (dimensionnement AE) » Instrumentation du noyau possible pour évaluation des temps d’exécution – Et des échéances (dimensionnement application) Laboratoire d' Intégration des Systèmes et des Technologies Dimensionnement CPU / mise en oeuvre Construction mathématique de la CNS – Composition des tâches : dépliage « temporel » de chaque surgraphe – La composition des surgraphes des tâches permet de connaître tous les intervalles temporels partagés par les traitements de chaque tâche • Le produit synchronisé est l’opération mathématique de composition des surgraphes • Le « graphe » obtenu contient TOUS les entrelacement possibles des traitements A partir de ce graphe, on peut engendrer un système d’équations et d’inéquations temporelles – les équations traduisent le fait qu’un traitement peut être réparti sur plusieurs intervalles TT (quelque soit la politique d’ordonnancement) – les inéquations dites « de charge » traduisent que sur un intervalle TT, le temps d’exécution pris par les traitements (ou portions de) est inférieur à la durée de l’intervalle ªLa condition formelle à vérifier est le système d’équations et inéquations linéaires Laboratoire d' Intégration des Systèmes et des Technologies Dimensionnement CPU / illustration (1/3) INIT N7 Q10 Q1 E12 1Ω Π 2Ω Q1 Q10 E11 0 N6 INIT 1 E3 N1 E1 E2 E4 N8 E7 3Ω N3 E9 Q20 Q10 Q10 α.Q20 β.Q20 1 E5 N2 Q20 Etats (N) N5 E0 INIT α+β+γ=1 N9 E6 E10 2 E8 N4 Q11 ... ω2 γ.Q20 3 ω1 4 2 5 1 6 7 1 Q10 +α.Q20 ≤ dTT Laboratoire d' Intégration des Systèmes et des Technologies 6 7 ... temps Dimensionnement CPU / illustration (2/3) La propriété de ponctualité à vérifier représente le fait que : – Sur chaque fenêtre temporelle, la somme des temps d’exécution des parties d’AE de chaque tâche doit être inférieure à la durée de la fenêtre temporelle – Mieux que la condition suffisante classique : la somme des facteurs de charge normalisés par tâche • Lorsque les maxima de chaque AE ne sont pas atteints simultanément Cela engendre les contraintes suivantes – Pour chaque arc du produit synchronisé • Une inéquation sur les portions d’AE exécutés dans l’intervalle (identifié par j) Σ[i=1..n] αij . Q( AEi ) ≤ k with αij in [0,1] – Pour les nœuds de terminaison des AE du produit synchronisé • Une équation sur les variables libres α par AE (identifié par i) Σ[j=1..p] αij = 1 Laboratoire d' Intégration des Systèmes et des Technologies Dimensionnement CPU / illustration (3/3) α+β+γ=1 Etats (N) INÉQUATIONS TEMPORELLES ÉQUATIONS E0 : Q1_0 alpha1_0 + Q2_0 alpha2_0 <= k ; E1 : Q1_0 alpha1_1 + Q2_0 alpha2_1 <= k ; E2 : Q1_0 alpha1_2 + Q2_0 alpha2_2 <= k ; E3 : Q1_0 alpha1_3 + Q2_0 alpha2_3 <= k ; E4 : Q1_1 alpha1_4 + Q2_0 alpha2_4 <= k ; E5 : Q1_1 alpha1_5 + Q2_0 alpha2_5 <= k ; E6 : Q1_0 alpha1_6 + Q2_0 alpha2_6 <= k ; E7 : Q1_1 alpha1_7 + Q2_0 alpha2_7 <= k ; E8 : Q1_1 alpha1_8 + Q2_0 alpha2_8 <= k ; E9 : Q1_0 alpha1_9 + Q2_0 alpha2_9 <= k ; E10:Q1_1 alpha1_10 + Q2_0 alpha2_10 <= k ; E11:Q1_1 alpha1_11 + Q2_0 alpha2_11 <= k ; E12:Q1_0 alpha1_12 + Q2_0 alpha2_12 <= k ; alpha1_0 = 1 ; alpha2_0 + alpha2_1 + alpha2_2 = 1 ; alpha2_0 + alpha2_1 + alpha2_7 = 1 ; alpha2_0 + alpha2_10 + alpha2_11 = 1 ; alpha1_1 = 1 ; alpha1_2 = 1 ; alpha1_3 = 1 ; alpha2_3 + alpha2_1 + alpha2_2 = 1 ; alpha2_3 + alpha2_1 + alpha2_7 = 1 ; alpha2_3 + alpha2_10 + alpha2_11 = 1 ; alpha1_4 + alpha1_5 = 1 ; alpha2_4 + alpha2_5 + alpha2_6 = 1 ; alpha1_6 = 1 ; alpha1_7 + alpha1_8 = 1 ; alpha2_8 + alpha2_9 + alpha2_2 = 1 ; alpha2_8 + alpha2_9 + alpha2_7 = 1 ; alpha1_9 = 1 ; alpha1_10 + alpha1_11 = 1 ; alpha1_12 = 1 ; alpha2_12 + alpha2_1 + alpha2_2 = 1 ; alpha2_12 + alpha2_1 + alpha2_7 = 1 ; alpha2_12 + alpha2_10 + alpha2_11 = 1 ; Q10 Q10 α.Q20 β.Q20 1 2 Q11 ... ω2 γ.Q20 3 ω1 4 2 5 1 6 7 1 Q10 +α.Q20 ≤ dTT Laboratoire d' Intégration des Systèmes et des Technologies 6 7 ... temps Dimensionnement CPU / résolution Résolution d’un problème classique de résolution de contraintes – L’existence d’une solution garantit un dimensionnement correct En fait, mieux qu’un critère binaire, ce système permet de caractériser le dimensionnement optimal : – Remplacer le membre droit de chaque inéquation h0 – Rechercher sa valeur minimum (h0)min telle que le système ait une solution • Si (h0)min < 1, garantie de dimensionnement et obtention de la valeur de réserve CPU • Sinon, on obtient l’évaluation de la surcharge CPU • Dans tous les cas, on a aussi un cas d’exécution des AE des tâches atteignant cette charge Le produit synchronisé représente la complexité exacte de l’entrelacement des AE des tâches dans le temps – Mais toujours quelque soit le découpage dynamique qui sera réalisé par l’algorithme d’ordonnancement implanté dans le noyau • Maîtrise fine des asynchronismes liés aux temps d’exécution (quotas) et au parallélisme d’exécution Laboratoire d' Intégration des Systèmes et des Technologies Dimensionnement CPU / bilan Dans une réalisation avec OASIS – On tire parti des avantages en terme de flexibilité et disponibilité de l’ordonnancement dynamique – Tout en apportant une garantie hors-ligne de sa faisabilité Le dimensionnement est basé sur l’évaluation de majorants sûrs du temps d’exécution – C’est un problème différent de la connaissance des WCET • Car ils n’influent pas sur le comportement du système • En cas de viol de quota – Identification de l’AE défaillante avant qu’elle n’influe sur l’ensemble des tâches à exécuter – Ségrégation de la défaillance au sein de l’AE et de la tâche et maintien de disponibilité du système » Impact limité à l’AE de l’agent, possibilité de continuer l’exécution des autres agents – L’applicatif impacté peut en tenir en compte pour adapter ses traitements – Définition d’une méthodologie novatrice pour leur évaluation hors-ligne Illustration sur un exemple simplifié avec deux tâches périodiques : Tâche A Tâche B temps Réserve CPU dimensionnée sur chaque fenêtre : - pour une l’occurrence du pire cas A - pour l’occurrence du pire cas B Tâche A Tâche B temps Réserve CPU dimensionnée sur la fenêtre : - pour une l’occurrence du pire cas A simultanément avec celui de B - plus rare => gain en terme de marges Laboratoire d' Intégration des Systèmes et des Technologies Dimensionnement CPU / en-ligne Garantie dynamique du dimensionnement CPU : – À chaque fois qu’une synchronisation temporelle est requise • ajout d’un traitement de temps bornée • avec comme échéance la prochaine synchronisation temporelle – Les changements de contexte sont imputés aux quotas de chaque traitement des agents Concept d’agent « bouclier » : incorporation d’un agent supplémentaire – Ayant pour cycle d’exécution celui de la plus petite période d’horloge manipulée – Ayant un temps d’exécution fixé (algorithme séquentiel sans instruction conditionnelle) – Si l’application s’exécute en présence de cet agent, on a une garantie du dimensionnement correct en-ligne Au delà, on peut paramétrer le temps d’exécution du code de l’agent bouclier – En faisant varier le paramètre, on peut déterminer une marge sûre du dimensionnement du CPU en-ligne (pour validation) Laboratoire d' Intégration des Systèmes et des Technologies Ce qu’apporte OASIS pour le test (1/2) Mêmes objectifs et potentiel de test que pour les approches séquentielles – Le comportement dynamique du système temps-réel est prédictible et invariant : • Tous les tests sont reproductibles – Recherche exhaustive du pire des cas : tous les comportements sont accessibles et testables – Chaque agent est testable séparément (facilite la réutilisation) • Modularité du code source jusqu’au binaire Capacité d’évaluer et de tester – Les performances temps-réel (cf. dimensionnement) – Le comportement fonctionnel d’une application (tout ou en partie) Le modèle inclue les aspects temps-réel – Les graphes de contrôle représentent le comportement dynamique des agents et contiennent les contraintes temporelles – Le déterminisme permet de faire des campagnes de tests reproductibles • Maîtrise temporelle de l’injection des données d’entrées • Invariance du comportement de l’application entière Laboratoire d' Intégration des Systèmes et des Technologies Ce qu’apporte OASIS pour le test (2/2) Tests de mise au point – Démarche de conception incrémentale • aspects modulaires pris en compte, mise au point sans machine cible – Utilisation des graphes issus de la compilation (dont les graphes de contrôle) • Génération des chronogrammes induits et comparaison avec les spécifications Tests de validation – – – – Signification d’un résultat associé à un scénario d’entrée spécifié Analyse de traces d’exécutions Couverture des graphes de contrôle Injection de fautes : • Modification du code binaire • Simulation de pannes (ex : capteurs) Laboratoire d' Intégration des Systèmes et des Technologies Objectifs, contexte, concepts – Le déterminisme et la sûreté de fonctionnement – L’approche OASIS La mise en œuvre dans une chaîne d’outils – Compilation et génération de code – Runtime et noyau d’exécution Focus sur dimensionnement, testabilité et mise au point Perspectives avancées – Aspects distribués – Systèmes critiques/non critiques Laboratoire d' Intégration des Systèmes et des Technologies Contexte multicalculateur avec composants standards Problèmes posés par le calcul distribué – recherche d’un placement optimal (performance) et sûr (SFC, etc.) – garantie de l’intégrité et l’uniformité des informations – dérive non uniforme des horloges locales Composants standards (Components Off-The-Shelf - COTS) – diffusion à grande échelle, robustesse de certains composants – pas entièrement conforme avec les exigences (effort d’intégration et d’adaptation) => Objectif : garantir le transport de l’information bout à bout (TR+SdF) Continuité et intégration avec le modèle OASIS – intègre déjà de manière réaliste les contraintes temporelles • délais de communication jamais estimés comme nuls • diffusion avant l’échéance, approvisionnement après l’échéance – couches systèmes et matérielles transparentes pour le développeur – application conçue indépendamment de l’architecture Interface TDMA avec Ethernet standard (physical layer) – aucune collision par construction (une collision devient une erreur) – garantir par construction la ponctualité des communications – dimensionnement et ordonnancement statique du réseau • pour vérifier et valider le réseau hors-ligne • pour détecter un comportement fautif => Cadencement global des communications connu de tous Laboratoire d' Intégration des Systèmes et des Technologies Contenu et contenant des paquets Cycle réseau calculé automatiquement pour chaque application Contenu (Lettres) – structure d’encapsulation des variables temporelles et des messages Contenant (Paquets & Segments) – Lettre créée Espace lettre réservé dimensionnement hors-ligne et constant Segments Entête Queue Champ “données” ª Durant l’exécution, la longueur du contenant est indépendante de la quantité de son contenu ª Communications répétitives et prédictibles Facilite la vérification du dimensionnement – – théorie (résolution du système d’équations et d’inéquations) • le pire des cas est calculable pratique • le pire des cas est systématique Laboratoire d' Intégration des Systèmes et des Technologies Concept de communications intégrées Préserver la couche système et le μNoyau – – maintenir le niveau de sûreté atteint disposer d’une solution modulaire – Concept d’ombre – – clone mémoire du producteur localisée sur chaque CPU consommateur Concept de pilote – – Cadencement du réseau par construction, un seul CPU occupe le média de communication à un instant donné Optimisation possible (A-TDMA) – – utilisation du mécanisme de détection de porteuse « chevauchement » de plages par construction • • tâche TT de la couche système contrôle les préparations et réceptions seulement entre deux émetteurs consécutifs inversion de paquets impossible ª espace entre deux paquets consécutifs optimal PRODUCTEUR OMBRE CONSOMMATEUR Remplissage du paquet Extraction des données par le consommateur Mise à jour de l’ombre Transfert du paquet PILOTE COUCHE SYSTEME CPU1 µNOYAU BUS PILOTE COUCHE SYSTEME CPU2 µNOYAU Laboratoire d' Intégration des Systèmes et des Technologies Apports de la solution Extension transparente et intégrée Gestion des communications performante et sûre – parallélisme des communications • pas de problème de sections critiques • pas d’opérations séquentielles d’élaboration des paquets ªles tâches communiquent à leur propre rythme en parallèle ªle pilote se limite à indiquer l’emplacement des paquets en corrélation avec la plage prévue – Occupation du réseau optimale • pas de perte de bande passante inutile – μNoyau déclenche précisément la transmission • plages de longueur nécessaire et suffisante ª Ponctualité toujours garantie pour toutes les données transférées Laboratoire d' Intégration des Systèmes et des Technologies OASIS pour les architectures SMP Modèle et implémentation d’OASIS déjà parallèle : – OASIS sur monoprocesseur est parallèle multi-tâche – Synchronisation uniquement par le temps – Couche système lock-free (pas de verrous) • Complètement préemptive – Système cadencé par le temps (TT) de sûreté • Tous les paramètres des tâches sont connus Pour le portage SMP, seuls quelques éléments doivent être complétés : – Assurer la consistance mémoire dans la couche système • Ajout de barrières de mémoire (spécifie l’ordre des opérations mémoires) par des instructions assembleur spécifiques – Besoin de synchronisation de l'horloge entre les processeurs • Utilisation d'une horloge unique – Algorithmes d'ordonnancement multiprocesseur • Plusieurs solutions de mise en œuvre (ordonnancement optimal global, partitionnement des tâches par cœurs, …) Du point de vue des applications, c’est complètement transparent – Seuls le noyau et la chaîne de génération de code sont impactés Laboratoire d' Intégration des Systèmes et des Technologies Systèmes critiques/non critiques (1/2) Vers une intégration plus poussée Other Application(s) – réduire les marges de dimensionnement CPU • pire cas souvent peu réaliste avec les caches Application(s) non safety-critical software Standard OS … – cohabitation tâches critiques et non critiques – déterminisme du système de calcul Other appli.-level System Layer Other-SL • pour les parties critiques (SdF) • quid des parties non critiques temps-réel ? safety-critical tasks Task-level System Layer « OASIS » - SL « OASIS » - μK Une vision statique du partage des ressources n’est plus satisfaisante Conception et réalisation d’un logiciel système de base permettant – la coexistence de différentes couches systèmes («OS») dans le même ECU • une couche système orientée sûreté (e.g. noyau de type OASIS) • avec une couche système typique du domaine non critique (API quelconque) – la cohérence et la protection d’échanges de données autorisés entre les deux couches systèmes – un partage sûr des ressources qui sont localement nécessitées par chaque couche système • apporter des garanties pour tous les niveaux de criticités • à moduler selon la catégorie, mais le temps-réel est partout… => La cohabitation de différents niveaux de criticité est possible Laboratoire d' Intégration des Systèmes et des Technologies OASIS Systèmes critiques/non critiques (2/2) Approches classiques de la coexistence: – Partitionnement statique des ressources (y compris temporel) • Mais impose des contraintes sur l’accès dans chaque partition (e.g. ordonnancement non optimal) – Priorité du critique sur le non critique • Mais pas de contrôle sur l’utilisation des ressources du non critique (e.g. on ne sait pas quand le non critique s’exécute) Constat – Pour une garantie de bon fonctionnement, il faut connaitre le besoin en ressource des tâches (comme fait dans OASIS) – Le non-critique s'exécute avec peu de contraintes additionnelles, le critique est garanti Structuration du système pour permettre le partage dynamique et sûr des ressources: – Hiérarchie de composants, • chaque niveau définit le partage des ressources de ses sous-niveaux – politiques différentes selon le niveau de criticité • la connaissance des ressources utilisées par un composant est complète – chaque niveau responsable des ressources de ses sous-niveaux – même en présence d'interactions/transferts de ressources transverses entre composants – Interaction dynamiques (transferts de ressources, communications) entre les composants basées sur un modèle de protection unique (capacités) • L'impact d'une défaillance d'un composant est limité et connu – Telle que toute tâche est considérée comme potentiellement malicieuse (y compris tâches critiques) • Les ressources ne sont jamais perdues (redémarrage d'un sous-système possible) Laboratoire d' Intégration des Systèmes et des Technologies