La couche bibliothèque : ltrace et ldd
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 …