Fonction de trace
La fonction de trace permet d'isoler les problèmes système en surveillant les événements système ou les processus sélectionnés. Les événements qui peuvent être surveillés incluent: l'entrée et la sortie vers des sous-routines sélectionnées, des routines de noyau, des routines d'extension de noyau et des gestionnaires d'interruptions.
La trace peut également être limitée au traçage d'un ensemble de processus ou d'unités d'exécution en cours d'exécution, ou elle peut être utilisée pour lancer et tracer un programme.
Lorsque la fonction de trace est active, les informations sont enregistrées dans un fichier journal de trace système. La fonction de trace inclut des commandes permettant d'activer et de contrôler les traces et de générer des rapports de trace. Les applications et les extensions de noyau peuvent utiliser plusieurs sous-routines pour enregistrer des événements supplémentaires.
Pour plus d'informations sur la fonction de trace, voir:
Présentation de la fonction de trace
La fonction de trace se trouve dans l'ensemble de fichiers bos.sysmgt.trace . Pour voir si cet ensemble de fichiers est installé, entrez la commande suivante sur la ligne de commande:
lslpp -l | grep bos.sysmgt.trace
Si une ligne contenant bos.sysmgt.trace est générée, l'ensemble de fichiers est installé, sinon vous devez l'installer.
La fonction de trace système enregistre les événements de trace qui peuvent être formatés ultérieurement par la commande de rapport de trace. Les événements de trace sont compilés dans le noyau ou le code d'application, mais ils ne sont tracés que si le traçage est actif.
La fonction de trace est activée à l'aide de la commande trace ou de la sous-routine trcstart . La fonction de trace est arrêtée à l'aide de la commande trcstop ou de la sous-routine trcstop . Lorsqu'elle est active, la fonction de trace peut être suspendue ou reprise à l'aide des commandes trcoff et trcon ou des sous-routines trcoff et trcon .
Une fois la trace arrêtée avec trcstop, un rapport de trace peut être généré à l'aide de la commande trcrpt . Cette commande utilise un fichier modèle, /etc/trcfmt, pour savoir comment formater les entrées. Les modèles sont installés à l'aide de la commande trcupdate . Pour plus d'informations sur les modèles, voir la commande trcupdate .
Contrôle de la trace
La commande trace démarre le traçage des événements système et contrôle les tailles de mémoire tampon de trace et de fichier journal.
Il existe trois méthodes de collecte des données de trace.
- La méthode par défaut consiste à utiliser 2 mémoires tampon pour collecter en continu des données de trace, en écrivant une mémoire tampon pendant que les données sont placées dans l'autre mémoire tampon. Le fichier journal est renvoyé à la ligne lorsqu'il est saturé.
- La méthode circulaire collecte les données de trace en continu, mais écrit uniquement les données dans le fichier journal lorsque la trace est arrêtée. Ceci est particulièrement utile pour le débogage d'un problème lorsque vous savez quand le problème se produit et que vous souhaitez simplement capturer les données à ce moment-là. Vous pouvez démarrer la trace à tout moment, puis l'arrêter dès que le problème se produit et vous aurez capturé les événements autour du problème. Cette méthode est activée avec l'indicateur de démon de trace -l .
- La troisième option n'utilise qu'une seule mémoire tampon de trace, quitte la fonction de trace lorsque cette mémoire tampon se remplit et écrit la mémoire tampon dans le fichier journal. La trace n'est pas arrêtée à ce stade, mais elle est désactivée comme si une commande trcoff avait été émise. A ce stade, vous souhaiterez généralement arrêter la trace à l'aide de la commande trcstop . Cette option est le plus souvent utilisée pour collecter des données de performances dans lesquelles nous ne voulons pas que la trace effectue de permutation d'i / o ou de mémoire tampon tant que les données n'ont pas été collectées. Utilisez l'indicateur -f pour activer cette option.
Vous souhaiterez généralement exécuter la commande de trace de manière asynchrone, c'est-à-dire que vous souhaitez entrer la commande de trace, puis poursuivre le travail. Pour exécuter la trace de manière asynchrone, utilisez l'indicateur -a ou l'indicateur -x . Si vous utilisez l'indicateur -a , vous devez ensuite arrêter la trace à l'aide de la commande trcstop . Si vous utilisez l'indicateur -x , la trace s'arrête automatiquement à la fin du programme.
Il est généralement souhaitable de limiter les informations qui sont tracées. Utilisez les indicateurs -j events ou -k events pour spécifier un ensemble d'événements à inclure (-j) ou à exclure (-k).
Pour afficher les noms de programme associés aux points d'ancrage de trace, certains points d'ancrage doivent être activés. Elles sont spécifiées à l'aide du groupe d'événements de trace tidhk . Par exemple, si vous souhaitez tracer le point d'ancrage mbuf , 254, et afficher également les noms de programme, vous devez exécuter trace comme suit:
trace -aJ tidhk -j 254
Le traçage a lieu. Pour arrêter le traçage, entrez ce qui suit sur une ligne de commande:
trcstop
trcrpt -O exec=on
L'option -O exec=on trcrpt affiche les noms de programme. Pour plus d'informations, voir la commande trcrpt .
Il est souvent souhaitable de spécifier la taille de la mémoire tampon et la taille maximale du fichier journal. Les tampons de trace nécessitent que la mémoire réelle soit disponible, de sorte qu'aucune pagination n'est nécessaire pour enregistrer les points d'ancrage de trace. Le fichier journal sera rempli à la taille maximale spécifiée, puis sera encapsulé, ce qui entraînera la suppression des données de trace les plus anciennes. Les indicateurs -T size et -L size spécifient la taille des mémoires tampon et la taille maximale des données de trace dans le fichier journal en octets.
La fonction de trace peut également être contrôlée à partir d'une application. Voir les articles trcstartet trcstop .
Enregistrement des données d'événement de trace
Il existe deux types de données de trace.
- données génériques
- est constitué d'un mot de données, d'un tampon de données opaques et de la longueur des données opaques. Cela est utile pour le traçage d'éléments tels que les noms de chemin. Voir l'article sur les canaux de trace génériques dans la page Trace Facility Overview. Vous pouvez le trouver dans Fonction de trace.Remarque: Le traçage de processus ou d'unités d'exécution spécifiques est uniquement pris en charge pour le canal 0. Il n'est pas pris en charge pour les canaux de trace génériques.
- Données non génériques
- C'est ce qui est normalement tracé par le système d'exploitation AIX. Chaque entrée de ce type est constituée d'un mot de crochet et jusqu'à 5 mots de données de trace. Pour une application 64 bits, il s'agit de mots de 8 octets. Le programmeur C doit utiliser les macros TRCHKL0 à TRCHKL5, et TRCHKL0T via TRCHKL5T défini dans le fichier /usr/include/sys/trcmacros.h , pour enregistrer des données non génériques. Si ces macros ne peuvent pas être utilisées, voir l'article sur la sous-routine utrchook .
Génération d'un rapport de trace
Voir l'article de la commande trcrpt pour une description complète de trcrpt. Cette commande permet de générer un rapport de trace lisible à partir du fichier journal généré par la commande trace . Par défaut, la commande formate les données du fichier journal par défaut, /var/adm/ras/trcfile. La sortie trcrpt est écrite dans la sortie standard.
Pour générer un rapport de trace à partir du fichier journal par défaut et l'écrire dans /tmp/rptout, entrez
trcrpt > /tmp/rptout
Pour générer un rapport de trace à partir du fichier journal /tmp/tlog vers /tmp/rptout, qui inclut les noms de programme et les noms d'appel système, utilisez
trcrpt -O exec=on,svc=on /tmp/tlog /tmp/rptout
Extraction des données de trace d'un vidage
Si la trace était active lorsque le système effectue un vidage, elle peut généralement être extraite à l'aide de la commande trcdead . Pour éviter d'écraser le fichier journal de trace par défaut sur le système en cours, utilisez l'option -o output-file .
Par exemple :
trcdead -o /tmp/tlog /var/adm/ras/vmcore.0
crée un fichier journal de trace /tmp/tlog qui peut ensuite être formaté comme suit:
trcrpt /tmp/tlog
Commandes de la fonction de trace
Les commandes suivantes font partie de la fonction de trace:
| Commande | Fonction |
|---|---|
| tracer | Démarre le traçage des événements système. Cette commande permet de contrôler la taille et de gérer le fichier journal de trace ainsi que les mémoires tampon de trace internes qui collectent les données d'événement de trace. |
| trcdead | Extrait les informations de trace d'un vidage système. Si le système s'arrête alors que les fonctions de trace sont actives, le contenu des mémoires tampon de trace internes est capturé. Cette commande extrait les données d'événement de trace du vidage et les écrit dans le fichier journal de trace. |
| trcnm | Génère une liste de noms de noyau utilisée par la commande trcrpt . Une liste de noms de noyau est composée d'une table de symboles et d'une table de symboles de chargeur d'un fichier objet. La commande trcrpt utilise le fichier de liste de noms du noyau pour interpréter les adresses lors du formatage d'un rapport à partir d'un fichier journal de trace. Remarque: Il est recommandé d'utiliser l'option -n trace à la place de trcnm. Cela place les informations de la liste de noms dans le fichier journal de trace au lieu d'un fichier distinct, et inclut les symboles des extensions du noyau.
|
| trcrpt | Formate les rapports des données d'événement de trace contenues dans le fichier journal de trace. Vous pouvez spécifier les événements à inclure (ou omis) dans le rapport, ainsi que déterminer la présentation de la sortie avec cette commande. La commande trcrpt utilise les modèles de formatage de trace stockés dans le fichier /etc/trcfmt pour déterminer comment interpréter les données enregistrées pour chaque événement. |
| arrêttrc | Arrête le traçage des événements système. |
| trcupdate | Met à jour les modèles de formatage de trace stockés dans le fichier /etc/trcfmt . Lorsque vous ajoutez des applications ou des extensions de noyau qui enregistrent des événements de trace, les modèles de ces événements doivent être ajoutés au fichier /etc/trcfmt . La commande trcrpt utilise les modèles de formatage de trace pour déterminer comment interpréter les données enregistrées pour chaque événement. Les produits logiciels qui enregistrent des événements exécutent généralement la commande trcupdate dans le cadre du processus d'installation. |
Trace des appels de fonction et des sous-routines
Les appels et sous-routines suivants font partie de la fonction de trace:
| Sous-routine | Descriptif |
|---|---|
| trcgen, trcgent | Enregistre les événements de trace de plus de cinq mots de données. La sous-routine trcgen peut être utilisée pour enregistrer un événement dans le cadre de la trace des événements système (canal de trace 0) ou pour enregistrer un événement sur un canal de trace générique (canaux 1 à 7). Indiquez le numéro de canal dans un paramètre de sous-routine lorsque vous enregistrez l'événement de trace. La sous-routine trcgent ajoute un horodatage aux données d'événement. Lorsque vous utilisez AIX 5L Version 5.3 avec le niveau de technologie 5300-05 et supérieur, l'horodatage est toujours ajouté aux données d'événement, quelle que soit la sous-routine utilisée. Utilisez trcgenk et trcgenkt dans le noyau. Les programmeurs C doivent toujours utiliser les macros TRCGEN et TRCGENK . |
| utrchook, utrchook64 | Enregistre les événements de trace d'un maximum de cinq mots de données. Ces sous-routines peuvent être utilisées pour enregistrer un événement dans le cadre de la trace des événements système (canal de trace 0). Les programmeurs de noyau peuvent utiliser trchook et trchook64. Les programmeurs C doivent toujours utiliser TRCHKL0 - TRCHKL5 et TRCHKL0T - macrosTRCHKL5T . Si vous n'utilisez pas ces macros, vous devez créer votre propre mot de point d'ancrage de trace. Le format est documenté avec le fichier /etc/trcfmt . Notez que les traces 32 bits et 64 bits ont des formats de mot de point d'ancrage différents. |
| trcoff | Interrompt la collecte des données de trace sur le canal de trace des événements système (canal 0) ou sur un canal de trace générique (1 à 7). Le canal de trace reste actif et la collecte des données de trace peut être reprise à l'aide de la sous-routine trcon . |
| trcon | Démarre la collecte des données de trace sur un canal de trace. Le canal peut être le canal de trace des événements système (0) ou un canal générique (1 à 7). Toutefois, le canal de trace doit avoir été préalablement activé à l'aide de la commande trace ou de la sous-routine trcstart . Vous pouvez interrompre la collecte des données de trace à l'aide de la sous-routine trcoff . |
| démarre_trc | Fournit une interface de bibliothèque à la commande de trace. Il renvoie le numéro de canal de la trace qu'il démarre. Si un canal générique est demandé, le numéro de canal est l'un des suivants: 1,2,3,4,5,6, 7. Sinon, le numéro de canal est 0. |
| arrêttrc | Libère et désactive un canal de trace générique. |
Fichiers de la fonction de trace
| Fichier | Descriptif |
|---|---|
| /etc/trcfmt | Contient les modèles de formatage de trace utilisés par la commande trcrpt pour déterminer comment interpréter les données enregistrées pour chaque événement. |
| /var/adm/ras/trcfile | Contient le fichier journal de trace par défaut. La commande trace permet de spécifier un fichier journal de trace différent. |
| /usr/include/sys/trchkid.h | Contient des définitions d'identificateur de point d'ancrage de trace. |
| /usr/include/sys/trcmacros.h | Contient des macros couramment utilisées pour l'enregistrement des événements de trace. |
Tracer les données d'événement
Voir le fichier /etc/trcfmt pour le format des données d'événement de trace.
Identificateurs de point d'ancrage de trace
hhh00000où hhh est l'ID du point d'ancrage.hhhh0000où hhhh est l'ID du point d'ancrage.Un identificateur à trois chiffres a un 0 implicite dans son chiffre le moins significatif de sorte qu'un identificateur de point d'ancrage 32 bits est équivalent à un point d'ancrage 64 bits de la forme hhh0.
La plupart des identificateurs de point d'ancrage de trace sont définis dans le fichier /usr/include/sys/trchkid.h . Les valeurs 0x0100 à 0x0FF0 peuvent être utilisées par les applications utilisateur 64 bits. Les valeurs 0x010 à 0x0FF peuvent être utilisées par les applications utilisateur 32 bits. Toutes les autres valeurs sont réservées à l'utilisation par le système. Les identifiants de crochets de trace actuellement définis peuvent être répertoriés à l'aide de la commande trcrpt -j.
Fonction de trace-Canaux de trace génériques
La fonction de trace prend en charge jusqu'à huit sessions de trace actives à la fois. Chaque session de trace utilise un canal du fichier spécial de trace multiplexé, /dev/systrace. Le canal 0 est utilisé par la fonction de trace pour enregistrer les événements système. Le traçage des événements système est démarré et arrêté par les commandes trace et trcstop . Si vous tracez des processus ou des unités d'exécution spécifiques, ou si un programme est tracé, seul le canal 0 est utilisé. Les canaux 1 à 7 sont appelés canaux de trace génériques et ne peuvent être utilisés que par des sous-systèmes pour d'autres types de traçage tels que le traçage des liaisons de données.
Pour implémenter le traçage à l'aide des canaux de trace génériques de la fonction de trace, un sous-système appelle la sous-routine trcstart afin d'activer un canal de trace et de déterminer le numéro de canal. Les modules de sous-système peuvent ensuite enregistrer des événements de trace à l'aide des macros TRCGEN ou TRCGENT ou, si nécessaire, trcgen, trcgent, trcgenkou sous-routine trcgenkt . Le numéro de canal renvoyé par la sous-routine trcstart est l'un des paramètres qui doivent être transmis à ces sous-routines. Le sous-système peut interrompre et reprendre la collecte des données de trace à l'aide des sous-routines trcoff et trcon et peut désactiver un canal de trace à l'aide de la sous-routine trcstop . Le sous-système doit fournir l'interface utilisateur pour activer et désactiver la fonction de trace du sous-système.
Les ID de point d'ancrage de trace, dont la plupart sont stockés dans le fichier /usr/include/sys/trchkid.h , et les modèles de formatage de trace, qui sont stockés dans le fichier /etc/trcfmt , sont partagés par tous les canaux de trace.