La couche bibliothèque : ltrace et ldd

Progression du Module
0% Terminé

Juste accolée aux différentes applications, on trouve ensuite la couche de bibliothèques, permettant d’interfacer l’ensemble des appels système.

A ce niveau, on peut alors utiliser les informations récupérées auprès des outils tels que ltrace.  Cette commande permet de lister les appels faits aux différentes bibliothèques utilisées :

# ltrace -l /usr/lib/libsystemd-journal.so.0.11.5

REMARQUE : on peut aussi se focaliser sur les performances d’un processus en particulier. Dans ce cas, il suffit juste d’utiliser la commande ps et son option -p :

# ltrace -p <n° PID>

Dans le même esprit, on trouve également l’utilitaire ldd permettant également de fournir la liste des bibliothèques imbriquées dans le code d’un programme :

$ ldd /bin/cat

linux-vdso.so.1 =>  (0x00007ffed5386000)
              libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd66c076000)
              /lib64/ld-linux-x86-64.so.2 (0x0000562bb2bd3000)

Il est aussi possible d’utiliser des fonctionnalités issues des outils eBPF/BCC, au travers de la commande gethostlatency, permettant de visualiser les latences des appels de type getaddrinfo et/ou gethostbyname pour la résolution d’adresses IP et de noms d’hôte.

Si l’on souhaite enregistrer le graphe des appels d’une application afin d’observer comment se comporte les instructions au sein de la pile logicielle. En utilisant l’utilitaire perf que nous détaillerons dans le paragraphe qui suit, on peut ainsi réaliser les opérations suivantes :

- Enregistrer le système applicatif dans son ensemble
- Restreindre le profilage à l’application
- Afficher le rapport stocké au sein du fichier perf.data en sortie

Pour cette dernière opération on devra alors exécuter la commande suivante :

$ sudo perf report -g

Les rapports sont affichés avec les fonctions appelées, triées dans le mode par défaut, selon leur temps d’exécution :

Enfin, concernant l'axe des bibliothèques, on peut également, sur certaines versions Linux anciennes, rencontrer des bibliothèques statiques (celles qui généralement portent l’extension .a). Ces bibliothèques sont considérées du point de vue du système comme de simples archives. Ces dernières sont générées à partir de la commande ar, permettant de concaténer les fichiers passés les uns à la suite des autres. En toute logique, la commande ar permet également de lister leur contenu et donc d’en connaître les différents objets associés.

Exemple : liste d’objets contenus dans libminiupnpc.a :

# ar -t /usr/lib/libminiupnpc.a
miniwget.o
minixml.o
minisoap.o
upnpreplyparse.o
…
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Philippe PIERRE

A exercé de nombreuses années en tant qu'administrateur de base de données et comme administrateur Système Unix/Linux. Il a enseigné les réseaux au CNAM (Paris). Aujourd'hui, employé en tant qu'ingénieur infrastructure, au sein d'un laboratoire pharmaceutique et administrant un cluster de calculs HPC, il connaît parfaitement les environnements GNU/Linux dans le cadre d'une entreprise et des systèmes de haute disponibilité. Il aime partager son expérience.

philippe-pierre has 69 posts and counting.See all posts by philippe-pierre