Blktrace
| Fiche express | |
|---|---|
| Domaine | Traçage des E/S bloc au niveau noyau |
| Commande | blktrace / blkparse
|
| Contexte | Paquet blktrace — nécessite debugfs monté et un noyau compilé avec CONFIG_BLK_DEV_IO_TRACE
|
| Voir aussi | Iostat (stats agrégées) · Fio (génération de charge synthétique) |
blktrace capture, événement par événement, le cheminement de chaque requête d'E/S dans la couche bloc du noyau (mise en file, fusion, envoi au pilote, achèvement…). Contrairement à Iostat, qui donne des moyennes agrégées par intervalle, blktrace permet de rejouer précisément ce qui s'est passé sur un device pendant une fenêtre de temps donnée — utile pour diagnostiquer des pics de latence ou des comportements d'ordonnancement d'E/S difficiles à voir autrement.
Prérequis
blktrace lit ses données via debugfs, qui n'est pas toujours monté par défaut :
yum install blktrace # RHEL/CentOS
apt install blktrace # Debian/Ubuntu
mount -t debugfs debugfs /sys/kernel/debug # si absent, blktrace refuse de démarrer
Sans ce montage, blktrace échoue immédiatement avec une erreur explicite (/sys/kernel/debug does not appear to be a debug filesystem).
Utilisation de base
Deux modes principaux : écriture dans des fichiers, ou pipe direct vers blkparse pour un affichage en direct.
blktrace -d /dev/sda -o trace # écrit un fichier par CPU : trace.blktrace.0, trace.blktrace.1, ...
blkparse -i trace # relit ces fichiers et affiche les événements décodés
blktrace -d /dev/sda -o - | blkparse -i - # mode direct, sans fichier intermédiaire (Ctrl+C pour arrêter)
Chaque ligne de sortie blkparse indique le device, le PID émetteur, un code d'action (Q requête mise en file, G get request, I insérée dans la file du pilote, D envoyée au pilote, C complétée) ainsi que le secteur et la taille concernés — de quoi reconstituer le trajet complet d'une E/S et mesurer les délais entre chaque étape.
Statistiques avec btt
L'outil btt (fourni avec le paquet blktrace) consomme un fichier de trace binaire combiné et produit des statistiques de synthèse (temps moyen par étape, latences, débit) — plus lisible qu'un dépouillement manuel de blkparse pour une analyse globale :
blkparse -i trace -d trace.bin # combine les traces par CPU en un seul fichier binaire
btt -i trace.bin # statistiques de synthèse (Q2Q, Q2C, D2C...)