Table of Contents

La surveillance de la charge du processeur dans les appareils embarqués est un aspect fondamental du développement de systèmes embarqués qui influe directement sur la performance, la fiabilité et la longévité du système. La compréhension de la charge du processeur dans un système embarqué est importante, mais souvent négligée, et sert de pas vers l'analyse de la capacité de votre processeur à respecter les délais du système.

Comprendre la charge et l'utilisation du processeur dans les systèmes embarqués

Avant de plonger dans les techniques de mesure, il est essentiel de comprendre ce que signifie la charge du processeur dans le contexte des systèmes embarqués et pourquoi elle diffère des environnements informatiques à usage général.

Définition de la charge et de l'utilisation du processeur

Les experts en temps réel intégrés définissent l'utilisation du noyau comme le temps agrégé pendant lequel le noyau exécute le code d'application (temps actif) divisé par le temps total d'observation. La charge CPU est la quantité de temps que le CPU consacre au traitement du code actif jusqu'à la quantité de temps que le CPU passe en état Idle sans traitement actif, ce qui signifie simplement le temps que le CPU consacre au traitement des tâches jusqu'à la quantité de temps que le CPU consacre au repos et au fait de rien.

L'utilisation du processeur est simplement le rapport du temps qu'un processeur consacre à faire du vrai travail sur une période donnée. Cette mesure fournit des informations cruciales sur l'efficacité de votre système intégré à utiliser ses ressources de traitement et sur la question de savoir s'il y a suffisamment de salle de tête pour des fonctionnalités supplémentaires ou des pics de charge inattendus.

Utilisation de CPU par rapport à CPU : Clarification terminologique

Les ingénieurs du monde UNIX connaissent le terme CPU load qui se réfère à un concept différent : quel est le nombre moyen de tâches d'exécution et d'attente à un moment précis, ce qui est utile dans les scénarios où un système est surchargé. Cependant, les ingénieurs logiciels embarqués utilisent les termes CPU load et CPU utilizent interchangeablement pour signifier l'utilisation du CPU.

Pourquoi le CPU charge la surveillance importe

La mesure précise de la charge du processeur sert à de multiples fins critiques dans le développement de systèmes intégrés :

  • Analyse de la schedulabilité: L'importance de la charge du processeur vient du fait qu'elle est utilisée comme facteur pour déterminer la schedulabilité de notre conception. Cela permet de s'assurer que toutes les tâches peuvent respecter leurs échéances dans diverses conditions d'exploitation.
  • Marges de sécurité:[ Dans les systèmes critiques de sécurité, il y a une marge pour la charge du processeur pour les produits livrés, par exemple dans Automotive, la charge du processeur suggérée est de 65 à 70%. Cette salle de tête permet des pics de charge inattendus et des ajouts de fonctionnalités futurs.
  • Consommation d'énergie: La charge du processeur a également un impact immédiat sur la consommation d'énergie, et cela peut être un non-aller sur les systèmes où ce point est critique.
  • Optimisation du système:[ L'utilisation du processeur, combinée à une analyse de la synchronisation, vous indique si les tâches et les RSI s'exécutent dans le délai requis et combien de puissance de traitement ils ont besoin pour leur réussite.
  • Sélection de logiciels :[ Les ingénieurs en systèmes pourraient payer pour plus de puces qu'ils n'en ont besoin, ou ils pourraient être dangereusement près de surtaxer leur processeur actuel, donc il est essentiel de retirer le calcul des niveaux d'utilisation des processeurs de mesure.

Méthodes fondamentales pour calculer la charge CPU

Il existe plusieurs techniques pour déterminer la charge du processeur dans les environnements intégrés, chacune avec ses propres avantages, ses limites et les cas d'utilisation appropriés. Le choix de la méthode dépend des capacités matérielles, de la précision requise, des contraintes de mesure et de la phase de développement.

Méthode de surveillance de la tâche de l ' Idle

La méthode de surveillance des tâches inactives est l'une des approches les plus courantes et les plus simples pour mesurer l'utilisation des processeurs dans les systèmes embarqués dotés d'un RTOS.

Comment fonctionne la surveillance des tâches de la branche

Le temps de repos est le temps que le CPU n'est pas occupé, et si le système d'exploitation (OS) a une tâche de ralenti, le temps de ralenti est simplement le temps que la tâche de ralenti est en cours. Dans des situations idéales non chargées, la tâche de ralenti exécuterait un nombre de fois connu et constant pendant toute période de temps définie (une seconde, par exemple), et la plupart des systèmes fournissent une interruption basée sur le temps que vous pouvez utiliser pour comparer un compteur de boucle de fond de lancement libre à cette constante connue.

La façon la plus simple de définir l'utilisation de 0% est d'augmenter un compteur dans votre tâche de ralenti et de voir combien de nombres de ralenti se produisent pendant une période de mesure. Si aucun travail n'est fait (en plus de l'interruption du minuteur), alors cela représente le nombre maximum de nombres de ralenti et 0% d'utilisation.

Considérations relatives à la mise en œuvre

Une fois que vous déterminez les nombres maximums de ralenti, aucun code ne peut être ajouté à la tâche de ralenti, car cela changerait les nombres maximums de ralenti. La tâche de ralenti devrait rester aussi minimale que possible pour maintenir la précision de mesure. De plus, il est préférable d'aligner votre temps de mesure sur le délai le plus court de votre projet; cela dépend des objectifs de la mesure d'utilisation du CPU.

Le calcul de l'utilisation du processeur par cette méthode est simple :

Utilisation du processeur (%) = 100 - (Centures de la poche / Centures maximales de la poche × 100)]

Mesure du temps d'exécution de la tâche

Cette méthode consiste à mesurer directement le temps d'exécution de chaque tâche et à calculer la charge CPU agrégée en fonction des fréquences et des temps d'exécution des tâches.

Approche de la formule mathématique

La charge totale du processeur est égale à la somme de (fréquence × temps d'exécution de la tâche la plus défavorable de la tâche) cette formule fournit une charge maximale théorique du processeur basée sur des scénarios d'exécution la plus défavorable, qui est particulièrement utile pendant la phase de conception.

Mise en œuvre de la mesure des temps d'exécution

Pour mesurer la charge CPU, vous devez la mesurer dans une fenêtre de temps et cette fenêtre est normalement choisie pour être égale à la fenêtre du cycle principal de votre agendar, puis dans chaque tâche supportée lue au début de la tâche et terminer la valeur de tic timer actuelle puis soustraire les deux lectures et les enregistrer dans une variable globale. Cette approche fournit une visibilité en temps réel dans la consommation CPU réelle plutôt que dans les scénarios théoriques les plus défavorables.

La mise en œuvre comprend généralement:

  1. Capturer un horodatage au début de chaque tâche en utilisant un minuteur haute résolution
  2. Capturer un autre horodatage à la fin de la tâche
  3. Calcul de la différence pour déterminer le temps d'exécution de la tâche
  4. accumulant ces valeurs pour toutes les tâches
  5. Diviser le temps d'exécution total par la fenêtre de mesure pour obtenir le pourcentage d'utilisation du processeur

Mesure de contre-basée matérielle

De nombreux microcontrôleurs et processeurs modernes fournissent des compteurs de performance matérielle qui peuvent suivre diverses mesures, y compris les cycles CPU, l'exécution d'instructions, les coups/miss de cache, et plus encore.

Avantages des comptoirs de matériel

  • Minimal Overhead: Les compteurs de matériel fonctionnent indépendamment de l'exécution du logiciel, introduisant pratiquement aucune mesure de frais généraux
  • Haute précision: Les mesures précises du cycle fournissent des informations détaillées sur le comportement du processeur
  • Méthodes multiples:[ Au-delà de la simple utilisation du processeur, les compteurs de matériel peuvent suivre les performances du cache, les prédictions de branches et d'autres événements architecturaux
  • Non intrusif:[ Les mesures n'affectent pas le comportement temporel du système mesuré

Approche de mise en œuvre

La mise en place du compteur de matériel varie selon l'architecture du processeur.

  • Configuration des unités de surveillance des performances (PMU) pour le compte d'événements spécifiques
  • Valeurs du compteur de lecture à intervalles de mesure
  • Calcul de l'utilisation en fonction des comptes de cycle par rapport au temps écoulé
  • Utilisation des unités DWT (Data Watchpoint and Trace) sur les processeurs ARM Cortex-M

Méthode du compteur de boucles de fond

Un compteur de lancement libre est incrémenté à chaque fois à travers la boucle de fond, et ce compteur utilise une variable qui, lorsqu'il est incrémenté, est autorisé à déborder. En utilisant une tâche périodique (comme une tâche de 25ms de période) pour surveiller l'utilisation du processeur, la plupart des systèmes fournissent une interruption basée sur le temps que vous pouvez utiliser pour comparer le compteur de boucle de fond à une constante connue.

Cette méthode fonctionne en établissant un taux de comptage de base lorsque le système est en panne, puis en comparant les taux de comptage réels pendant l'exploitation pour déterminer le temps passé dans le travail productif par rapport aux boucles en panne.

Méthodes de calcul automatisées

La méthode automatisée calcule, en temps réel, le temps moyen passé dans la boucle de fond. Il y a deux avantages principaux à faire calculer le temps moyen de la boucle de fond à compléter, à vider : Vous pouvez détecter avec précision la préemption (plutôt que de faire une supposition à partir de données d'histogramme), et la détection de la préemption vous permet de jeter les données moyennes qui ont été biaisées par le traitement d'interruption.

Cette approche élimine la nécessité de caractériser manuellement et s'adapte automatiquement aux changements de code, ce qui la rend plus durable pour les projets à long terme.

RTOS-Spécifique CPU Surveillance de charge

Les systèmes d'exploitation en temps réel fournissent souvent des mécanismes intégrés et des API pour la surveillance de la charge du processeur, ce qui facilite la mise en œuvre et la standardisation des projets.

Contrôle de chargement du processeur FreeRTOS

FreeRTOS, l'une des plateformes RTOS embarquées les plus populaires, offre plusieurs mécanismes de suivi de l'utilisation du processeur.

Configuration des statistiques d'exécution

FreeRTOS a un mécanisme pour profiler le temps d'exécution des tâches à travers un crochet de style macro dans le programmeur de tâches préemptif, et les pistes de crochet lorsque le contexte des tâches change, essentiellement le point dans le temps où une tâche débloquée avec une priorité plus élevée (ou un round robin) est prévue pour la tranche suivante.

Pour activer les statistiques d'exécution dans FreeRTOS, vous devez :

  1. Régler configGENERATE RUN TIME STATS à 1 dans FreeRTOSConfig.h
  2. Définir portCONFIGURE TIMER FOR RUN TIME STATS() pour configurer un minuteur haute résolution
  3. Définir portGET RUN TIME COUNTER VALUE() pour retourner la valeur de timer en cours
  4. Utilisez vTaskGetRunTimeStats() pour récupérer des statistiques formatées

Fonction de crochet d'aiguille

La fonction de crochet de ralenti fournit un autre mécanisme pour le calcul de la charge CPU. En incrémentant un compteur dans le crochet de ralenti et en le comparant à un maximum connu, vous pouvez déterminer l'utilisation globale du système. Par définition, lorsque le ralenti ne fonctionne pas, vous consommez des cycles d'exécution de tâches, donc vous devez seulement suivre le temps de ralenti.

Statistiques du CPU de Zephyr RTOS

Zephyr RTOS fournit des statistiques d'exécution de threads à travers ses services de noyau. Le système suit le temps d'exécution pour chaque thread et fournit des API pour interroger ces informations. Les principales fonctionnalités sont les suivantes:

  • Suivi du temps d'exécution par fil
  • Surveillance des fils de poche
  • Collecte de statistiques configurables avec des frais généraux minimes
  • Intégration avec les méthodes de travail du système pour la présentation des rapports périodiques

Autres plates-formes RTOS

La plupart des plateformes RTOS commerciales et open-source offrent des capacités similaires:

  • ThreadX: Fournit une trousse de profil d'exécution pour une analyse détaillée des performances
  • VxWorks: Offre des outils de profilage complets et des capacités de visionneur système
  • RTEMS: Comprend les statistiques d'utilisation du processeur et le support de profilage
  • Micrium μC/OS: Caractéristiques des statistiques intégrées des tâches et du suivi de l'utilisation du CPU

Techniques de mesure externe

En plus des méthodes de mesure basées sur des logiciels, les outils et techniques externes peuvent fournir des informations précieuses sur l'utilisation des processeurs sans modifier le logiciel intégré.

Méthode de basculement GPIO

La méthode de basculement GPIO consiste à régler une broche GPIO haute lorsque le processeur est actif et faible lorsque le moteur est au ralenti, puis à mesurer le cycle de travail externe.

Technique multimètre

La technique multimètre, qui utilise un multimètre comme instrument de mesure, vous permet de déterminer l'utilisation moyenne du processeur et de déterminer l'utilisation du processeur agrégé pour l'ensemble de l'application, plutôt que des tâches individuelles.

Étapes de mise en œuvre:

  1. Configurer une broche GPIO comme sortie
  2. Réglez la broche haut dans l'entrée de tâche au ralenti
  3. Réglez la broche basse dans la sortie de la tâche au ralenti
  4. Connectez un multimètre en mode tension DC à la broche
  5. La tension de lecture (en pourcentage de VCC) représente l'utilisation du processeur

Cependant, si l'application fluctue, elle est considérée comme rafale (c'est-à-dire que l'utilisation du processeur varie considérablement d'un intervalle de temps à l'autre), et la technique multimètre permet de moyennes des applications rafales qui peuvent conduire à des inexactitudes grossières.

Oscilloscope/Technique d'analyse logique

La technique d'analyse optique et d'oscilloscope fonctionne en suivant graphiquement le cycle de travail pour déterminer l'utilisation du processeur agrégé à l'aide d'un analyseur logique ou d'un oscilloscope. Cette méthode permet d'obtenir une visibilité plus détaillée sur les modes d'utilisation au fil du temps, ce qui permet d'analyser les charges de travail en rupture et d'identifier les modes périodiques.

Avantages sur la technique multimètre:

  • Représentation visuelle des modes d'utilisation
  • Capacité de capturer des pics et des vallées transitoires
  • Analyse en corrélation avec le temps avec d'autres signaux du système
  • Capacités de déclenchement pour capturer des événements spécifiques

Déboguer les sondes et les outils de trace

Les sondes de débogage modernes et les outils de trace offrent des capacités d'analyse de charge CPU sophistiquées sans nécessiter d'instrumentation de code.

SEGGER vue du système

SEGGER SystemView permet d'enregistrer et de visualiser en temps réel les événements RTOS, y compris la charge CPU. Il utilise les capacités de trace du processeur (comme le Macrocell embarqué de trace d'ARM) pour capturer les données d'exécution avec une intrusion minimale.

  • Visualisation en temps réel de la charge du processeur
  • Analyse du temps d'exécution par tâche
  • Suivi des changements de contexte
  • Analyse des interruptions
  • Vue chronologique du comportement du système

Percepio Tracealyzer

Tracealyzer offre un traçage et une analyse complets de RTOS, y compris des mesures de charge CPU détaillées. Il prend en charge plusieurs plates-formes RTOS et fournit des informations sur:

  • Tendances de l'utilisation des processeurs dans le temps
  • Modèles d'exécution des tâches
  • Analyse du temps de réponse
  • Statistiques sur l'utilisation des ressources

Lauterbach TRACE32

Les débogueurs TRACE32 fournissent un profilage assisté par le matériel et une analyse de performance. Ils peuvent mesurer l'utilisation du processeur sans frais de logiciel, ce qui les rend idéales pour les systèmes critiques au moment où l'intrusion de mesure doit être minimisée.

Techniques avancées d'analyse de charge CPU

Au-delà de la mesure de l'utilisation de base, les techniques avancées fournissent des informations plus approfondies sur le comportement du système et les caractéristiques de performance.

Mesure de charge interrompue

Lorsque le programme fonctionne, les interruptions se produisent également et doivent être gérées par le processeur et ils peuvent se produire à tout moment, pendant que la tâche est simple est en cours ou entre les tâches, de sorte que le suivi du temps passé dans les gestionnaires d'interruption est nécessaire. Le traitement d'interruption peut consommer des ressources CPU importantes, et la séparation de la charge d'interruption de la charge de tâche fournit des informations d'optimisation précieuses.

Les approches de mise en œuvre comprennent :

  • Réglage d'un drapeau ou basculement d'une broche GPIO lors de l'interruption de l'entrée/sortie
  • Utiliser des compteurs d'interruption imbriqués pour gérer l'interruption de la préemption
  • Temps d'exécution par interruption pour une analyse détaillée
  • Calculer la charge d'interruption globale séparément de la charge de travail

Surveillance de charge de processeur multi-correspondant

La charge du processeur est calculée par cœur (CPU0, CPU1) et la zone mère montre la valeur moyenne de tous les cœurs. L'utilisation pour l'ensemble du processeur est alors la moyenne de toutes les utilisations de cœur individuelles.

Considérations concernant la surveillance multicœur:

  • Suivi des tâches par cœur
  • Frais généraux de communication intercœur
  • Efficacité de l'équilibrage des charges
  • Impact de l'affinité de base sur l'utilisation
  • Considérations relatives aux traitements multiples asymétriques (AMP) et aux traitements multiples symétriques (SMP)

Analyse histographique

En examinant l'histogramme de l'échantillon, vous pouvez estimer que toutes les données au-dessus d'un certain seuil représentent des cas où la tâche de fond a été interrompue, et en utilisant ce seuil, vous rejetteriez toutes les données au-dessus de celui-ci pour calculer une période moyenne de tâches inactives.

Avantages de l'analyse histographique:

  • Identification des schémas de temps d'exécution
  • Détection des anomalies et des aberrations
  • Estimation du temps d'exécution le plus défavorable (WCET)
  • Analyse de la qualité des systèmes en temps réel

Analyse statistique et évolution

La surveillance à long terme de la charge du processeur avec analyse statistique fournit des informations sur le comportement du système sur de longues périodes:

  • Moyenne de déplacement:[ Éliminer les fluctuations à court terme pour identifier les tendances
  • Détection de fuites:[ Identifier les événements d'utilisation maximale et leur fréquence
  • Analyse du pourcentage:[ Comprendre la distribution de l'utilisation (p. ex., utilisation du 95e percentile)
  • Analyse de la correction:[ Relatif à la charge du processeur aux événements externes ou aux états du système

Meilleures pratiques pour une mesure précise de la charge du processeur

La mise en œuvre efficace de la surveillance de la charge du processeur nécessite une attention particulière à plusieurs facteurs clés qui influent sur la précision et l'utilité de la mesure.

Choix d'intervalles d'échantillonnage appropriés

Le temps de mesure peut être arbitraire, mais idéalement, il est préférable d'aligner votre temps de mesure sur le délai le plus court de votre projet; cela dépend des objectifs de la mesure d'utilisation du CPU. La sélection de l'intervalle d'échantillonnage implique l'équilibre de plusieurs facteurs:

  • Trop court: Peut introduire des mesures excessives et capturer le bruit plutôt que des tendances significatives
  • Trop Long: Peut manquer des pics transitoires et ne pas capturer le comportement dynamique
  • Alignement du système:[ L'adéquation des périodes de mesure aux cycles du système (grand cadre, hyperpériode) donne des résultats plus significatifs
  • Application-Spécificité:[ Des délais critiques en temps réel devraient guider la sélection des fenêtres de mesure

Minimiser les mesures en tête

L'acte de mesurer la charge du processeur consomme les ressources du processeur, ce qui pourrait avoir une incidence sur la mesure même de la valeur mesurée.

  • Mesure assistée par ordinateur:[ Tirer parti des compteurs matériels et des capacités de trace lorsque disponibles
  • Instrument efficace:[ Utiliser des mécanismes légers de capture de horodatage
  • Compilation conditionnelle:[ Activer le code de mesure uniquement pendant les phases de développement et d'essai
  • Algorithmes optimisés: Utiliser des structures de données et des calculs efficaces pour les statistiques sur l'exécution
  • Traitement différé:[ Recueillir les données brutes rapidement, effectuer l'analyse pendant le temps de repos ou hors ligne

On pourrait soutenir que l'acte de calculer les nombres inactifs est un travail et que 0 % n'est pas réalisable avec le code d'instrumentation en place, mais ces préoccupations sont négligeables lorsque la période de mesure de l'utilisation du CPU est suffisamment importante.

Impact d'interruption de la manipulation

Essentiellement, deux classes d'interruptions peuvent perturber la boucle de fond : les déclencheurs basés sur les événements et les déclencheurs basés sur le temps, qui sont habituellement initiés par des dispositifs, des modules et des signaux externes au microprocesseur, et lors de la mesure du temps de fond moyen, vous devriez prendre toutes les mesures possibles pour supprimer la chance que ces éléments puissent causer une interruption qui allongerait artificiellement le temps attribué à la tâche de fond.

Pratiques exemplaires pour interrompre la manipulation dans la mesure de la charge du processeur:

  • Track interruption du temps d'exécution séparément de l'exécution de la tâche
  • Compte pour interrompre la nidification et la préemption
  • Envisager d'interrompre la latence dans l'analyse en temps réel
  • Distinguer entre le traitement interrompu et l'exécution de tâches interrompues

Étalonnage et établissement de référence

La mesure précise de la charge du processeur nécessite un étalonnage approprié:

  1. Établir la référence de l'idle :[ Mesurer le système à l'état de ralenti connu pour déterminer la référence d'utilisation de 0 %
  2. Vérifier la pleine charge:[ Créer une condition de charge connue à 100 % pour valider la précision de mesure
  3. Compte rendu des mesures :[ Comprendre et documenter les frais généraux introduits par les instruments de mesure
  4. Recalibration régulière:Recalibration après des changements significatifs de code ou des changements de niveau d'optimisation du compilateur

Vérification croisée avec méthodes multiples

L'utilisation de techniques de mesure multiples permet de faire confiance aux résultats et aide à identifier les artefacts de mesure :

  • Comparer les mesures basées sur des logiciels avec les données de trace matérielle
  • Vérifier les statistiques RTOS par rapport aux instruments manuels
  • Contrôle croisé des tâches sans fin avec la somme du temps d'exécution
  • Utiliser des mesures externes GPIO pour valider les calculs internes

Documentation et rapports

Une documentation complète garantit que les mesures de charge du processeur restent utiles tout au long du cycle de vie du produit:

  • Méthode de mesure:[ Documenter la technique spécifique utilisée et sa configuration
  • Conditions d'essai:[ Enregistrer l'état du système, les conditions d'entrée et les facteurs environnementaux
  • Valeurs de base: Tenir des registres des données d'étalonnage et des mesures de référence
  • Analyse des tendances:[ Trace l'évolution de la charge du processeur dans les versions logicielles
  • Définitions de seuil :[ Documenter les fourchettes d'utilisation acceptables et les marges de sécurité

Exemples pratiques de mise en œuvre

Il est important de comprendre les concepts théoriques, mais des exemples pratiques de mise en oeuvre aident à combler le fossé entre la théorie et la pratique.

Mise en œuvre de la lutte contre les Idles simples

Un compteur de ralenti de base pour les systèmes RTOS simples ou en métal nu:

  1. Définir les variables globales pour le calcul du nombre de ralentis et le calcul de l'utilisation
  2. Mettre en œuvre une interruption périodique de la minuterie (p. ex., 1 seconde)
  3. Dans la boucle de ralenti, incrémenter un compteur de ralenti en continu
  4. Dans le minuteur interrompre, saisir le nombre de ralentis, calculer l'utilisation, et réinitialiser le compteur
  5. Entreposer ou transmettre la valeur d'utilisation pour la surveillance

Considérations clés:

  • Utiliser des variables volatiles pour empêcher l'optimisation du compilateur
  • Débordement du compteur de poignées
  • Minimiser le traitement dans le minuterie interruption
  • Envisager les opérations atomiques pour les systèmes multi-cœurs

Suivi du temps d'exécution des tâches

Pour les systèmes nécessitant des données d'utilisation par tâche:

  1. Configurer un minuteur haute résolution (microseconde ou meilleure résolution)
  2. Créer une structure de données pour stocker le temps d'exécution par tâche
  3. À l'entrée de la tâche, saisissez l'horodatage actuel
  4. À la sortie de la tâche, calculer le temps écoulé et s'accumuler au total de la tâche
  5. Calculer périodiquement le pourcentage d'utilisation pour chaque tâche

Cette approche fournit des informations détaillées sur les tâches qui consomment le plus de ressources du CPU, ce qui permet des efforts d'optimisation ciblés.

Exemple de statistiques sur les temps d'exécution de FreeRTOS

La mise en œuvre de la surveillance de charge CPU dans FreeRTOS implique:

  1. Configuration d'un minuteur avec une résolution plus élevée que la tique système
  2. Activer les statistiques sur les temps d'exécution dans FreeRTOSConfig.h
  3. Mise en œuvre des macros de configuration de minuterie requises
  4. Création d'une tâche de surveillance qui appelle périodiquement vTaskGetRunTimeStats()
  5. Analyser et afficher ou enregistrer les statistiques

Les statistiques sur les durées d'exécution fournissent à la fois le temps d'exécution absolu et le pourcentage d'utilisation pour chaque tâche, ce qui facilite l'identification des opérations à forte intensité de processeurs.

GPIO Toggle pour la mesure externe

Mise en œuvre de la méthode GPIO pour basculer:

  1. Configurer une broche GPIO comme sortie
  2. Réglez la broche haut au début de la tâche au ralenti
  3. Réglez la broche basse lors de la sortie de la tâche de ralenti
  4. Connectez un oscilloscope ou un multimètre pour mesurer le cycle de service
  5. Calculer l ' utilisation du processeur en tant que (100 - pourcentage du cycle d ' essai)

Cette méthode permet de vérifier de façon indépendante les mesures basées sur des logiciels et peut être particulièrement utile pendant les phases d'intégration et d'essai du système.

Pièges courants et comment les éviter

La mesure de la charge du processeur peut être complexe de façon trompeuse, et plusieurs erreurs courantes peuvent conduire à des résultats inexacts ou trompeurs.

Problèmes d'optimisation des compilateurs

Les optimisations de compilateur peuvent interférer avec le code de mesure :

  • ]Les compilateurs peuvent optimiser les compteurs de ralenti si ils ne sont pas déclarés volatils
  • Recommandement du code: Le code de capture de l'amplificateur peut être réordonné, ce qui affecte la précision
  • Effets d'inlignement: L'inligne de fonction peut changer le moment de l'exécution
  • Déroulement de boucle: Peut affecter le comportement de comptage de boucles inactives

Les solutions comprennent l'utilisation de qualificatifs volatils, les barrières de compilation et la vérification du code de montage généré.

Résolution du minuteur et dépassement

Une résolution de minuterie inadéquate ou une manipulation inadéquate du débordement entraîne des erreurs de mesure :

  • Utiliser des minuteurs avec une résolution suffisante pour l'intervalle de mesure
  • Mettre en œuvre une détection et une manipulation appropriées des débordements
  • Envisager d'utiliser des compteurs 64 bits ou des techniques d'extension de débordement
  • Valider la précision du minuteur par rapport à la référence connue

Effets d'intrusion sur la mesure

Le code de mesure lui-même affecte le comportement du système:

  • Effets de cache de l'exécution du code de mesure
  • Changements de latences interrompus dus à l'instrumentation
  • Consommation de bande passante mémoire pour le stockage de statistiques
  • Inversion prioritaire dans les tâches de mesure

Réduire au minimum l'intrusion en utilisant des méthodes assistées par le matériel lorsque c'est possible et en maintenant le code de mesure le plus léger possible.

Hypothèses de base incorrectes

En supposant que les valeurs de base soient incorrectes, on peut faire des erreurs systématiques :

  • Ne pas tenir compte de l'activité de base OS dans l'état "idle"
  • Ne pas envisager les transitions d'état de gestion du pouvoir
  • Ignorer les tâches d'entretien périodique
  • Survol de la DMA et de l'activité périphérique

Toujours établir des niveaux de référence par mesure réelle plutôt que par hypothèses théoriques.

Couverture d'essai insuffisante

La mesure de la charge du processeur dans des conditions limitées fournit une image incomplète:

  • Essai dans diverses conditions d'entrée et schémas de données
  • Inclure les scénarios les plus défavorables et les conditions de contrainte
  • Considérer les facteurs environnementaux (température, tension)
  • Évaluer le comportement à long terme, et pas seulement les instantanés à court terme

Optimisation de la charge du processeur dans les systèmes embarqués

Une fois la charge de CPU mesurée avec précision, l'étape suivante est l'optimisation lorsque l'utilisation dépasse les seuils acceptables.

Stratégies d'optimisation des logiciels

La solution la plus importante consiste à accroître l'efficacité de la solution logicielle, qui réduit également l'impact énergétique du système, et il convient de maintenir en dernier recours l'augmentation ou la perte des ressources matérielles.

Les approches d'optimisation logicielle comprennent :

  • Algorithme Optimisation: Remplacer les algorithmes inefficaces par des solutions de rechange plus efficaces
  • Profilage du code: Identifier et optimiser les points chauds consommant un temps CPU disproportionné
  • Utiliser les drapeaux d'optimisation appropriés et l'optimisation guidée par le profil
  • Sélection de la structure des données:[ Choisissez des structures de données optimisées pour les modèles d'accès
  • ] Optimisation de cache :[ Améliorer la localisation des données et réduire les erreurs de cache
  • Optimisation intermittente:[ Minimiser le temps d'exécution de routine du service d'interruption

Approches architecturales

Diviser le traitement des tâches à effectuer en plusieurs cycles afin que le temps d'exécution des tâches durant chaque cycle diminue et que l'utilisation du CPU diminue.

  • Décomposition de la tâche: Décomposition de tâches importantes en unités plus petites et plus gérables
  • Ajustement de priorité:[ Optimiser les priorités des tâches pour réduire le changement de contexte
  • Polling to Interrupt Conversion: Remplacer les boucles de vote par des approches à interruption
  • DMA Utilisation:[ Décharger le mouvement des données vers les contrôleurs DMA
  • Accélération des logiciels de stockage:[ Utiliser des périphériques matériels dédiés pour les opérations à forte intensité de calcul

Solutions matérielles

Lorsque l'optimisation des logiciels atteint ses limites, des solutions matérielles peuvent être nécessaires :

  • Augmenter la fréquence des horloges CPU afin que le CPU puisse exécuter les tâches plus rapidement et avoir ainsi plus de temps pour exécuter d'autres tâches et une charge plus faible.
  • Utilisation d'un processeur multi-cœur où les tâches peuvent être réparties entre les cœurs.
  • Ajout de coprocesseurs ou d'accélérateurs pour des fonctions spécifiques
  • Mise à niveau vers une famille de processeurs plus puissante
  • Mise en œuvre de l'accélération basée sur le FPGA pour les algorithmes critiques

Considérations relatives à la gestion de l'énergie

L'optimisation de la charge du processeur se croise souvent avec la gestion de la puissance :

  • Voltage dynamique et calibrage de fréquence (DVFS): Régler la vitesse de l'horloge en fonction de la charge
  • Modes de sommeil:[ Entrez les états de faible puissance pendant les périodes de ralenti
  • Clock Patinage: Désactiver les horloges vers les périphériques inutilisés
  • Consolidation de la charge de travail:[ Traitement par lots pour maximiser le temps de sommeil

Normes et exigences de sécurité de l'industrie

De nombreuses industries ont des exigences et des normes spécifiques concernant la charge du processeur dans les systèmes embarqués, en particulier pour les applications critiques en matière de sécurité.

Normes pour l'automobile

Les applications critiques sont fortement réglementées par les normes de l'industrie, comme la norme ISO 26262 pour l'automobile, qui dicte le niveau maximal de charge du processeur pour répondre aux pics de traitement soudain.

Les prescriptions de la norme ISO 26262 comprennent:

  • Analyse et marges de charge du processeur documenté
  • Analyse du temps d'exécution dans les pires cas (WCET)
  • Marges de sécurité pour les augmentations inattendues de la charge
  • Mécanismes de surveillance de la vérification de la charge d'exécution

Normes aérospatiales

Le DO-178C et les normes connexes pour les applications aérospatiales exigent :

  • Analyse et vérification rigoureuses du calendrier
  • Marge démontrée pour les scénarios les plus défavorables
  • Traçabilité des exigences de charge du processeur
  • Vérification indépendante du comportement de la chronologie

Normes relatives aux instruments médicaux

La norme CEI 62304 pour les logiciels d'appareils médicaux exige:

  • Analyse des risques, y compris les défaillances de calendrier
  • Vérification des performances en temps réel
  • Documentation sur l ' utilisation des ressources
  • Essais dans des conditions de contrainte

Automatisation industrielle

La norme CEI 61508 pour la sécurité fonctionnelle dans les systèmes industriels précise:

  • Exigences relatives au niveau d'intégrité de sécurité (SIL)
  • Analyse du calendrier des fonctions de sécurité
  • Surveillance des ressources et détection des défauts
  • Considérations concernant les marges de charge du processeur

Outils et ressources pour l'analyse de charge CPU

Une variété d'outils commerciaux et open-source soutiennent la mesure et l'analyse de la charge du processeur dans les systèmes embarqués.

Outils commerciaux

  • SEGGER SystemView: Analyse et visualisation en temps réel des RTOS (https://www.segger.com/products/development-tools/systemview/)
  • Percepio Tracealyzer: Analyse complète du tracé et des performances des RTOS
  • Lauterbach TRACE32:[ Débogage et profilage assistés par le matériel
  • ARM Development Studio: Outils de profilage et d'optimisation pour les systèmes basés sur l'ARM
  • Green Hills MULTI:[ Environnement de développement intégré avec analyse de performance

Outils Open-Source

  • FreeRTOS Statistiques sur l'exécution: Suivi intégré du temps d'exécution des tâches
  • Retraçage des Zéphyres: Suivi des écrous et des performances
  • LTTng:[ Boîte à outils de trace Linux pour les systèmes Linux embarqués
  • Perfetto: Profilage du système et analyse des traces
  • Valgrind/Callgrind: Profilage des performances pour les systèmes embarqués basés sur Linux

Outils matériels

  • Analyseurs logiques:[ Capturer les motifs de bascule GPIO pour la mesure externe
  • Oscilloscopes:[ Mesurer les cycles de service et les relations de temps
  • Débogueurs JTAG/SWD: Accès au débogage sur puce et aux capacités de trace
  • Analyseurs de puissance: Charge CPU en corrélation avec la consommation d'énergie

Ressources et communautés en ligne

  • Embedded.com: Articles et tutoriels sur les performances des systèmes embarqués (https://www.embedded.com)
  • Forums FreeRTOS:[ Soutien communautaire aux questions liées à la RTOS
  • Dépassement de la pile: Balise de systèmes embarqués pour les questions techniques
  • Reddit r/embed: Discussions communautaires sur le développement intégré
  • Systems embarqués Weekly: Bulletin d'information sur les sujets embarqués

Tendances futures de la surveillance de la charge des processeurs

À mesure que les systèmes embarqués continuent d'évoluer, les techniques et les exigences de surveillance de la charge du processeur progressent.

Intégration de l'apprentissage automatique

Des algorithmes d'apprentissage automatique sont appliqués à l'analyse de charge CPU:

  • Prévisions de charge prévisionnelles basées sur des modèles historiques
  • Détection d'anomalies pour identifier les comportements inhabituels
  • Recommandations d'optimisation automatisées
  • Répartition des ressources adaptatives en fonction des tendances apprises

Surveillance en nuage

Les dispositifs intégrés compatibles avec l'IoT prennent de plus en plus en charge la surveillance en nuage:

  • Surveillance et diagnostic à distance des performances
  • Analyse et comparaison de la charge du processeur à l'échelle de la flotte
  • Mises à jour de l'optimisation en direct
  • Maintenance prédictive basée sur les tendances d'utilisation

Support matériel amélioré

Les processeurs modernes intègrent une surveillance des performances plus sophistiquée :

  • Ensembles de compteurs de performance plus complets
  • Capacités de trace de la partie inférieure de la tête
  • Profilage assisté par le matériel avec une intrusion minimale
  • Surveillance intégrée de la puissance et des performances

Efforts de normalisation

Les efforts déployés par l'industrie pour uniformiser la surveillance du rendement :

  • API communes à toutes les plateformes RTOS
  • Formats normalisés de trace pour l'interopérabilité des outils
  • Pratiques exemplaires et lignes directrices à l'échelle de l'industrie
  • Implémentations de référence en libre accès

Conclusion

Cet article présente plusieurs façons de discerner combien de débit CPU une application embarquée est réellement consommatrice, et vous pouvez utiliser ces informations pour vérifier la conception du logiciel du système par rapport à une charge maximale du processeur. Que vous choisissiez le contrôle de tâches au ralenti, la mesure du temps d'exécution, les compteurs de matériel ou les techniques de mesure externe, la clé est de sélectionner les méthodes appropriées à vos exigences et contraintes spécifiques.

Le succès de la surveillance de la charge du processeur exige une attention à la précision de la mesure, minimisant les frais généraux, un étalonnage approprié et des essais complets dans des conditions réalistes. Avoir une charge élevée du processeur ne signifie pas une mauvaise chose si votre conception respecte tous ses délais, mais cela signifie qu'à l'avenir si vous voulez ajouter d'autres processus au système, cela peut entraîner une surcharge.

En mettant en œuvre les méthodes et les meilleures pratiques décrites dans ce guide, vous pouvez assurer que vos systèmes embarqués fonctionnent efficacement, répondent aux exigences en temps réel et maintiennent des marges de performance adéquates tout au long de leur durée de vie opérationnelle. L'investissement dans la surveillance de la charge du processeur proprement dite rapporte la fiabilité du système, les possibilités d'optimisation et la confiance que votre système embarqué fonctionnera comme prévu dans toutes les conditions.