Preuves d'ingénierie11 min de lecture

Le noyau temps réel ne suffisait pas : notre essai de commande Linux à 10 ms

Deux contrôleurs, une limite de gigue d'une milliseconde et plusieurs configurations en échec. Voici les chiffres et leurs limites.

Banc d'essai de temporisation avec deux contrôleurs, modules d'E/S, oscilloscope et histogrammes de gigue

À propos de l’auteur

Dr. Mehran Kiani-Oshtorjani

Ingénieur en logiciels industriels et simulation

Mehran Kiani-Oshtorjani est ingénieur mécanicien et développeur logiciel. Son travail couvre la simulation temps réel, les systèmes hydrauliques, le contrôle industriel et les logiciels connectés. Sa recherche doctorale à LUT University portait sur des méthodes de calcul efficaces pour les systèmes industriels temps réel.

Points clés pour l’ingénierie

  • PREEMPT_RT seul dépassait encore la limite de gigue d'une milliseconde sur les deux appareils.
  • PREEMPT_RT avec SCHED_FIFO priorité 80 a réussi quatre essais en régime établi.
  • Ces résultats concernent un profil pilote précis de 10 ms, pas une homologation temps réel générale.

La gigue est une distribution, pas un adjectif

Qualifier Linux de déterministe sans préciser période, charge, durée et maximum n'aide aucune décision. Il faut vérifier que le pire cas observé reste dans le budget temporel de la machine.[3][4][5]

PREEMPT_RT rend davantage de chemins noyau préemptibles. SCHED_FIFO change la priorité entre tâches prêtes. Les deux traitent des causes différentes.[2][3]

Fixer le contrat d'acceptation avant l'essai

Pour réussir à 10 ms, la gigue devait rester sous 1 ms, sans cycle manqué ni dépassement, avec un âge d'instantané inférieur à 20 ms et une publication sous 1 ms.[1]

La configuration qui réussit

PREEMPT_RT avec SCHED_FIFO priorité 80 réussit sur les deux contrôleurs. La gigue maximale des quatre essais va de 0,063612 à 0,094448 ms, sans cycle manqué, dépassement ni croissance mémoire.[1]

ContrôleurChargeGigue max.Âge instantanéPublicationManqué / dépassement
ANon0,085877 ms1,982421 ms0,096610 ms0 / 0
BNon0,063612 ms9,277714 ms0,064073 ms0 / 0
AOui0,094448 ms3,851881 ms0,081295 ms0 / 0
BOui0,067025 ms9,068315 ms0,079147 ms0 / 0

Les échecs expliquent la réussite

Les configurations standard ou ajustées atteignaient 2,258783 à 3,662989 ms. PREEMPT_RT sans FIFO s'améliorait, mais échouait encore à 1,014743 et 1,340064 ms.[1][2][3]

  • Mesurer toute la configuration d'ordonnancement.
  • Sortir réseau, journalisation et E/S bloquantes du thread cyclique.
  • Archiver les échecs avec les meilleurs résultats.

Ce que cela prouve, et ce que cela ne prouve pas

Les données permettent de poursuivre le pilote à 10 ms. Elles ne prouvent ni validation finale, ni temporisation E/S, ni comportement longue durée, ni exactitude des valeurs, ni aptitude à la sécurité fonctionnelle.[1]

Restent à tester le démarrage à froid sous charge, les profils 100 ms, la contention sur un même cœur, la fraîcheur backend et la valeur de bout en bout.[1]

Le prochain essai doit chercher à casser le résultat

  1. Démarrer à froid avec toutes les charges.
  2. Faire concurrencer service et runtime sur le même cœur.
  3. Tester assez longtemps pour voir température et rotations de journaux.
  4. Mesurer les E/S physiques en plus des horodatages logiciels.
  5. Publier données brutes, configuration et échecs.

Questions fréquentes

PREEMPT_RT garantit-il une commande déterministe ?

Non. Matériel, pilotes, priorités, charge et application déterminent toujours le résultat mesuré.

Pourquoi SCHED_FIFO ?

Il permet au thread de commande prioritaire de préempter les tâches normales, à condition que son travail soit borné et surveillé.

S'agit-il d'une validation de production ?

Non. Il s'agit de quatre essais pilotes en régime établi sur deux appareils, avec des limites publiées.

Sources et normes

  1. MCR Demo 1 steady-state 10 ms timing evidenceBootCtrl, 26 July 2026
  2. PREEMPT_RT theory of operationLinux kernel documentation
  3. sched(7): overview of CPU schedulingLinux man-pages project
  4. clock_nanosleep(2): high-resolution process sleepLinux man-pages project
  5. Cyclictest documentationLinux Foundation Real-Time Linux project

BootCtrl Engineering a vérifié pour la dernière fois les affirmations techniques et les liens sources le 26 juillet 2026. Les déclarations produit sont confrontées aux dépôts d’implémentation actuels ; les éléments de feuille de route ne sont pas présentés comme disponibles.

Définir le budget temporel avant le contrôleur

Apportez période, chemin E/S, charge et critères d'échec. Nous en ferons un pilote mesurable.

Parler d'un pilote