Manuel de suivi dynamique Solaris

Compilation et instrumentation

Lorsque vous écrivez des programmes classiques dans Solaris, vous utilisez un compilateur pour convertir le code source de votre programme en code objet exécutable. Lorsque vous utilisez la commande dtrace, vous demandez au compilateur du langage D utilisé précédemment d'écrire le programme hello.d. Une fois compilé, votre programme est envoyé au noyau du système d'exploitation en vue d'être exécuté par DTrace. Les sondes nommées dans votre programme sont activées et le fournisseur correspondant exécute l'instrumentation nécessaire pour les activer.

L'ensemble de l'instrumentation dans DTrace est complètement dynamique : les sondes ne sont activées que lorsque vous les utilisez. Aucun code instrumenté n'est présent pour les sondes inactives ; votre système ne rencontre donc aucune dégradation des performances lorsque vous n'utilisez pas DTrace. Lorsque votre tentative est terminée et que la commande dtrace se ferme, toutes les sondes utilisées sont automatiquement désactivées et leur instrumentation supprimée, restaurant votre système à son état exact d'origine. Il n'existe aucune réelle différence entre un système sur lequel DTrace est inactif et un système sur lequel le logiciel DTrace n'est pas installé.

L'instrumentation de chaque sonde est réalisée de façon dynamique sur le système d'exploitation en cours d'exécution en direct ou sur les processus utilisateur sélectionnés. À aucun moment le système ne passe à l'état de veille ou de pause et le code d'instrumentation n'est ajouté que pour les sondes que vous activez. Ainsi, l'impact de l'utilisation de DTrace sur la sonde se limite uniquement aux actions que vous demandez à DTrace d'exécuter : aucune donnée étrangère ne fait l'objet d'un suivi, aucun “commutateur de suivi” d'envergure n'est activé sur le système et l'instrumentation DTrace dans son ensemble est conçue pour être aussi efficace que possible. Ces fonctions vous permettent d'utiliser DTrace en production pour résoudre des problèmes effectifs en temps réel.

La structure DTrace prend également en charge un nombre arbitraire de clients virtuels. Vous pouvez exécutez autant d'expériences et de commandes DTrace que vous le souhaitez, à condition de ne pas dépasser la limite de capacité de mémoire de votre système. Les commandes fonctionnent toutes de manière indépendante en utilisant la même instrumentation sous-jacente. Cette même fonction permet également à un nombre quelconque d'utilisateurs différents présents sur le même système d'utiliser DTrace simultanément : les développeurs, les administrateurs et les techniciens peuvent tous travailler ensemble ou sur des problèmes différents sur le même système en utilisant DTrace, sans qu'il n'y ait d'interférence entre eux.

Contrairement aux programmes écrits en C et C++ et à l'instar des programmes écrits dans le langage de programmation JavaTM les programmes D de DTrace sont compilés dans un formulaire intermédiaire sécurisé exécuté lors du déclenchement des sondes. Ce formulaire intermédiaire est validé à des fins de sécurité lorsque votre programme est examiné pour la première fois par le logiciel de noyau DTrace. L'environnement d'exécution DTrace gère également toutes les erreurs d'exécution susceptibles de se produire pendant l'exécution de votre programme D, comme la division par zéro, le déréférencement de mémoire non valide, etc. et les consigne dans un rapport. Il est donc impossible de créer un programme DTrace non sûr, qui risquerait d'endommager par inadvertance le noyau Solaris ou l'un des processus en cours d'exécution sur votre système. Ces fonctions de sécurité vous permettent d'utiliser DTrace dans un environnement de production, sans risque d'arrêt brutal ou d'endommagement de votre système. Si vous faites une erreur de programmation, DTrace la consigne dans un rapport et désactive votre instrumentation. Vous pouvez alors corriger l'erreur et réessayer. Les fonctions DTrace de création de rapports d'erreurs et de débogage sont décrites ultérieurement dans ce manuel.

Le diagramme suivant présente les différents composants de l'architecture DTrace, notamment les fournisseurs, les sondes, le logiciel de noyau DTrace et la commande dtrace.

Figure 1–1 Aperçu de l'architecture DTrace et de ses composants

Architecture DTrace : l'utilitaire de noyau et les fournisseurs, une interface pilote entre le noyau et la bibliothèque et la bibliothèque prenant en charge un ensemble de commandes.

Maintenant que vous avez assimilé le fonctionnement de DTrace, revenons à la présentation du langage de programmation D pour commencer à écrire des programmes plus intéressants.