5 conseils pour un multi-threading sans peine

Publié par Nicolas le

Aperçu des résultats obtenus par Tracealyzer

Le multi-threading sans peine : cinq conseils simples pour sortir de l’enfer du débogage

Johan Kraft , CEO et fondateur de Percepio ABPar le Dr Johan Kraft, Directeur technique, Percepio

L’un des aspects les plus sous-estimés d’une application RTOS multithread est qu’il ne suffit pas de simplement regarder le code pour comprendre pleinement le comportement et les performances de l’application. Il faut savoir comment les différentes parties communiquent entre elles, et disposer de beaucoup d’autres informations : combien de temps faut-il pour exécuter les tâches, y a-t-il des conditions de concurrence potentielles ou des blocages, les exigences de timing sont-elles respectées, etc.

Il peut exister de nombreuses différences entre ce que doit faire l’application et ce qu’elle fait réellement, et ces différences sont à la fois difficiles à voir dans le code et difficiles à tester. Il s’agit d’un défi pour tous les développeurs qui travaillent avec du code multithread, qu’ils utilisent un RTOS ou Linux, et ce défi est mieux géré avec des outils de diagnostic de trace visuelle qui donnent un aperçu de ce que j’appelle le « côté obscur » du code — il devient alors littéralement possible de voir comment il se comporte lors de son exécution.

Une chronologie visuelle est un bon point de départ. Voir les événements logiciels, les messages et l’exécution des tâches étalés dans le temps est important dans de nombreuses situations, par exemple lorsque l’emplacement précis d’un bug ne ressort pas de manière évidente des symptômes – l’ordinateur peut être phénoménal dans les calculs et les recherches dans les journaux de texte, mais souvent l’on ne sait pas exactement quoi rechercher. En matière de reconnaissance visuelle de formes, le cerveau humain excelle.

Aperçu des résultats obtenus par Tracealyzer
Une chronologie visuelle montrant les événements logiciels donne un aperçu du fonctionnement interne de l'application intégrée et constitue un bon point de départ si l'on a besoin d'approfondir la recherche de bogues

Une meilleure compréhension lors du débogage signifie qu’il y aura moins de conjectures et de meilleures chances de trouver la ou les causes profondes. C’est également d’une grande aide dans les cas où une méthode traditionnelle comme l’arrêt du système sur des points d’arrêt ne peut pas être utilisée.

Qu’en est-il du débogage utilisant printf ? Oui, printf est facile à utiliser et parfois c’est vraiment tout ce dont l’on a besoin, mais son prix est élevé. Placer des impressions de débogage dans du code d’application urgent est risqué et ne s’adapte pas bien aux applications plus complexes et aux processeurs plus rapides. De plus, printf est généralement assez lent, puisqu’il prend de l’ordre de plusieurs millisecondes par impression. Une solution optimisée pour le suivi des événements logiciels peut être 100 fois plus rapide, ce qui permet de collecter beaucoup plus d’informations sur la même période.

Veillez à mesurer le timing et les performances tout au long du projet de développement. Si c’est bien fait, vous avez la garantie de pouvoir détecter et résoudre tout problème pendant le développement plutôt que dans une course contre la montre juste avant la date de livraison promise.

Le respect des spécifications de synchronisation est crucial pour les systèmes temps réel qui ont des exigences strictes, mais il est également important pour l’expérience utilisateur de presque tous les systèmes embarqués. Personne n’apprécie un écran tactile ou un routeur wifi lent qui ne fournit pas le débit promis. Encore une fois, la cause première peut ne pas être évidente à partir du code source, et le simple fait de passer à un processeur plus rapide pourrait ne rien apporter si le véritable problème est une mauvaise conception logicielle.

Si vous vous retrouvez dans « l’enfer du débogage » avec un projet, avec des quantités massives de débogage qui vous prennent toute votre énergie et empêchent le projet d’avancer, les diagnostics de trace visuelle peuvent vous aider. Le non-respect des meilleures pratiques en matière de conception logicielle pour les applications à base de RTOS est souvent un facteur majeur, et cela peut se manifester par exemple sous la forme de performances médiocres, d’une charge de processeur élevée ou d’erreurs passagères.     De nombreuses dépendances entre les tâches sont un autre signal courant indiquant que la conception pourrait être améliorée.

Même les systèmes mal architecturés peuvent fonctionner aujourd’hui, mais ils auront un comportement complexe et chaotique combiné à une faible testabilité, ce qui augmentera le risque de bogues insaisissables qui pourront s’infiltrer dans les appareils de production. Et ils seront presque certainement fragiles, de sorte que de petits changements dans le code ou dans l’environnement risqueront de provoquer leur échec.

Les diagnostics de trace visuelle aident le développeur à analyser et à améliorer la conception de ses logiciels et à garantir un comportement stable et fiable du système. Si vous pouvez détecter les défauts de conception des logiciels au plus tôt, moins de modifications seront nécessaires pour les corriger. Les améliorations de conception peuvent également conduire à de meilleures performances et à une réactivité accrue du système, ce qui à son tour pourrait vous permettre de sélectionner un processeur plus rentable pour réduire les coûts de la liste de matériel ou d’utiliser une fréquence d’horloge plus basse pour une durée de vie plus longue de la batterie.

Utilisez votre outil de traçage pour diffuser en continu les données de trace vers l’ordinateur hôte, où vous pourrez stocker des enregistrements très longs si nécessaire et même afficher les données en direct sur l’écran. Le Trace Streaming vous permet par exemple de surveiller les tests du système ou de traquer des erreurs rares et difficiles à reproduire.   Les diagnostics de trace visuelle permettent de repérer les anomalies dans des aperçus visuels de haut niveau et d’analyser des événements spécifiques pour découvrir exactement ce qui s’est passé.

Enfin, les diagnostics de trace visuelle peuvent être réalisés sous forme de solution purement logicielle ne nécessitant aucun matériel supplémentaire, pas même une sonde de débogage. Cette solution suppose un certain coût en termes d’utilisation de la mémoire et du processeur, mais pas plus que cela. Vous pouvez le laisser dans votre système tout au long du développement, des tests et même du déploiement si vous le souhaitez. Disposer de ces informations à toutes les étapes permet à chacun d’en profiter au quotidien.

Cette approche permet de consigner toutes les informations pertinentes de votre application, y compris les données internes et les états qui ne sont pas exposés pendant l’exécution. Les données peuvent être tracées en parallèle avec la chronologie d’exécution visuelle pour fournir un aperçu approfondi de votre application au moment de l’exécution. Vous pouvez ainsi créer un excellent produit qui bat la concurrence.

Suivez ces cinq bonnes pratiques pour obtenir la visibilité dont vous avez besoin sur le comportement en temps réel au niveau du système afin d’améliorer la qualité des produits et d’accélérer le développement afin d’écourter les délais de commercialisation.

Plus d'informations

Voir cet article dans la revue ‘L’Embarqué“.

Plus d’information sur Tracealyzer.


0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *