SystemTap

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Diagnostic système / tracing kernel
Commande stap
Contexte RHEL/CentOS — nécessite un kernel-debuginfo strictement de la même version que le noyau exécuté
Voir aussi Strace (appels système, plus léger)

SystemTap permet d'instrumenter le noyau Linux en direct, sans recompiler ni redémarrer, en posant des sondes (« probes ») sur des points d'intérêt (appels système, E/S, ordonnanceur, timers...). Contrairement à strace qui se limite aux appels système d'un processus donné, SystemTap peut sonder n'importe quel point du noyau, ce qui en fait un outil plus puissant mais aussi plus lourd à mettre en œuvre (compilation d'un module noyau à chaque script).

Installation

# yum install systemtap systemtap-runtime

# yum install kernel-debuginfo kernel-debuginfo-common-$(uname -m) kernel-devel

Le paquet kernel-debuginfo doit correspondre exactement à la version du noyau en cours d'exécution (uname -r) : sans ça, SystemTap échoue à compiler le module de sonde.

Utilisation locale

# stap -v -e 'probe vfs.read { printf("read performed\n"); exit() }'

-v passe en mode verbeux et -e fournit le script directement en ligne de commande : ici la sonde se déclenche à la première lecture VFS puis le script s'arrête (exit()).

Utilisation à distance (client/serveur)

Il est possible de compiler le module de sonde sur une machine disposant des sources et des paquets debuginfo, puis de l'exécuter sur d'autres machines n'ayant que systemtap-runtime installé — utile pour éviter d'installer les paquets de développement sur des serveurs de production.

# stap -r <version_noyau> <script.stp> -m <nom_module> -p4

# stap -r 2.6.32-53.el6 -e 'probe vfs.read { exit() }' -m simple -p4

-r précise la version de noyau cible, -m nomme le module compilé et -p4 arrête le traitement juste après compilation (produit un fichier .ko sans l'exécuter). Ce module se copie ensuite sur la machine cible et se charge avec staprun.

Scripts ponctuels

Un script peut aussi être passé via l'entrée standard, pratique pour un test rapide sans fichier :

# echo "probe timer.s(1) {exit()}" | stap -

Voir aussi

  • Strace — trace les appels système d'un processus, plus léger et sans compilation, complémentaire à SystemTap pour un diagnostic rapide