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.

  1. 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é.
  2. 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 .
  3. 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).

Remarque: Lorsque vous limitez la trace à des processus ou des unités d'exécution spécifiques, vous limitez également la quantité d'informations tracées.

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.

Remarque: Etant donné que la fonction de trace épingle les mémoires tampon de collecte de données, ce qui rend cette quantité de mémoire indisponible pour le reste du système, la fonction de trace peut avoir un impact sur les performances dans un environnement à contraintes de mémoire. Si l'application surveillée n'est pas soumise à des contraintes de mémoire, ou si le pourcentage de mémoire consommée par la routine de trace est faible par rapport à ce qui est disponible dans le système, l'impact de la mémoire "volée" de trace doit être faible. Si vous ne spécifiez pas de valeur, la trace utilise les tailles par défaut.

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

Un identificateur de point d'ancrage de trace est un nombre hexadécimal à trois ou quatre chiffres qui identifie un événement en cours de trace. Avant AIX 7.1et sur les applications 32 bits s'exécutant sous AIX 7.1 et versions ultérieures, seuls les identificateurs de point d'ancrage à trois chiffres peuvent être utilisés. Lorsque vous utilisez une macro de trace telle que TRCHKL1, vous spécifiez le point d'ancrage de trace comme suit:
hhh00000
hhh est l'ID du point d'ancrage.
Sur les applications 64 bits et les routines de noyau s'exécutant sous AIX 7.1 et versions ultérieures, des identificateurs à trois et quatre chiffres peuvent être utilisés. Lorsque vous utilisez une macro de trace telle que TRCHKL1, vous spécifiez le point d'ancrage de trace comme suit:
hhhh0000
hhhh est l'ID du point d'ancrage.
Remarque: Si un identificateur à quatre chiffres est utilisé et qu'il est inférieur à 0x1000, le chiffre le moins significatif doit être 0 (au format 0x0hh0).

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.