Manuel de suivi dynamique Solaris

Rapports et calculs de stabilité

Le compilateur D exécute les calculs de stabilité de chaque description de sonde et instruction d'action dans vos programmes en D. Vous pouvez utiliser l'option dtrace -v pour afficher un rapport sur la stabilité de votre programme. L'exemple suivant utilise un programme écrit sur la ligne de commande :


# dtrace -v -n dtrace:::BEGIN'{exit(0);}'
dtrace: description 'dtrace:::BEGIN' matched 1 probe
Stability data for description dtrace:::BEGIN:
        Minimum probe description attributes
                Identifier Names: Evolving
                Data Semantics:   Evolving
                Dependency Class: Common
        Minimum probe statement attributes
                Identifier Names: Stable
                Data Semantics:   Stable
                Dependency Class: Common
CPU     ID                    FUNCTION:NAME
  0      1                           :BEGIN

Vous pouvez également souhaiter combiner l'option dtrace - v à l'option -e, afin d'indiquer à dtrace de compiler votre programme en D sans l'exécuter de manière à pouvoir déterminer la stabilité du programme sans devoir activer les sondes et exécuter votre programme. Voici un autre exemple de rapport de stabilité :


# dtrace -ev -n dtrace:::BEGIN'{trace(curthread->t_procp);}'
Stability data for description dtrace:::BEGIN:
        Minimum probe description attributes
                Identifier Names: Evolving
                Data Semantics:   Evolving
                Dependency Class: Common
        Minimum probe statement attributes
                Identifier Names: Stable
                Data Semantics:   Private
                Dependency Class: Common
#

Notez que dans notre nouveau programme, nous avons référencé la variable curthread en langage D, dont le nom est stable mais la sémantique des données privée (ce qui signifie qu'en les consultant, vous accédez aux détails d'implémentation privés du noyau). Ce statut se reflète désormais dans le rapport de stabilité du programme. Les attributs de stabilité dans le rapport du programme sont calculés en sélectionnant la classe et le niveau de stabilité minimale en dehors de la plage de valeurs correspondantes de chaque triplet d'attributs d'interface.

Les attributs de stabilité d'une description de sonde sont calculés à l'aide des attributs de stabilité minimale de tous les champs de description de sonde spécifiés conformément aux attributs publiés par le fournisseur. Les attributs des fournisseurs DTrace disponibles sont présentés dans le chapitre traitant de chaque fournisseur. Les fournisseurs de DTrace exportent un triplet d'attributs de stabilité pour chacun des quatre champs de description de toutes les sondes publiées par ce fournisseur. Par conséquent, la stabilité d'un nom de fournisseur peut être plus élevée que celle des sondes individuelles exportées. Par exemple, la description de la sonde :

fbt:::

indiquant que DTrace doit suivre les E/S de toutes les fonctions du noyau, possède une stabilité plus grande que la description de la sonde :

fbt:foo:bar:entry

qui nomme une fonction bar() interne spécifique dans le module du noyau foo. Par souci de simplicité, la plupart des fournisseurs utilisent un seul ensemble d'attributs pour toutes les valeurs individuelles nom:fonction:module émises. Les fournisseurs spécifient également des attributs pour le tableau args[], la stabilité des arguments de sonde variant d'un fournisseur à l'autre.

Si aucun champ de fournisseur n'est spécifié dans une description de sonde, cette description reçoit les attributs de stabilité Instable/Instable/Commun car elle peut aboutir à des sondes de fournisseurs qui n'existent pas encore lorsqu'utilisée sur une prochaine version de Solaris. Le cas échéant, Sun n'est pas en mesure de garantir la stabilité et le comportement à venir de son programme. Vous devez toujours spécifier explicitement le fournisseur lors de l'écriture des clauses de votre programme en D. En outre, chaque champ de description de sonde qui contient des caractères correspondant au modèle (reportez-vous au Chapitre4Structure de programme D) ou des variables de macro comme $1 (reportez-vous au Chapitre15Scripts) est traité comme s'il n'était pas spécifié car il est possible de développer ces modèles de description pour les adapter aux fournisseurs et aux sondes revus par Sun dans les versions ultérieures de DTrace et du système d'exploitation Solaris.

Les attributs de stabilité sont calculés pour la plupart des instructions en langage D en s'appuyant sur la classe et la stabilité minimale des entités figurant dans l'instruction. Par exemple, les entités en langage D ci-après possèdent les attributs suivants :

Entité 

Attributs 

Variable curthread en langage D intégrée

Stable/Privé/Commun 

Variable x en langage D définie par l'utilisateur

Stable/Stable/Commun 

Si vous écrivez l'instruction de programme en D suivante :

x += curthread->t_pri;

les attributs résultant de l'instruction sont Stable/Privé/Commun, les attributs minimaux associés aux opérandes curthread et x. La stabilité d'une expression est calculée à l'aide des attributs de stabilité minimale de chaque opérande.

Toutes les variables en D que vous définissez dans votre programme reçoivent automatiquement les attributs Stable/Stable/Commun. Par ailleurs, les attributs Stable/Stable/Commun sont affectés de manière implicite aux opérateurs en D et à la grammaire du langage D. Les attributs Privé/Privé/Inconnu sont toujours attribués aux références aux symboles du noyau utilisant l'opérateur (`) car ils reflètent les artefacts d'implémentation. Les types que vous définissez dans le code source de vos programmes en D, et plus particulièrement celui qui est associé à l'espace de noms de types C et D, reçoivent les attributs Stable/Stable/Commun. Les types définis dans l'implémentation du système d'exploitation et fournis par d'autres espaces de noms reçoivent les attributs Privé/Privé/Inconnu. L'opérateur de stabilisation de type en langage D intègre une expression dont les attributs de stabilité correspondent aux valeurs minimales des attributs de l'expression d'entrée et des attributs du type de sortie stabilisé.

Si vous utilisez le préprocesseur C pour intégrer des fichiers d'en-tête système en C, ces types sont associés à l'espace de noms de type C et reçoivent les attributs Stable/Stable/Commun, le compilateur D n'ayant pas d'autre choix que de supposer que vous assumez la responsabilité de ces déclarations. Vous pouvez toutefois vous tromper sur la stabilité de votre programme si vous utilisez le préprocesseur C pour intégrer un fichier d'en-tête contenant des artefacts d'implémentation. Vous devez toujours consulter la documentation correspondant aux fichiers d'en-tête que vous intégrez pour déterminer les niveaux de stabilité appropriés.