Das Tool "blktrace" stammt vom Maintainer des Block-I/O-Layers im Linux-Kernel, Jens Axboe, und schaut im Unterschied zu manchen Verwandten direkt auf die Kernelstrukturen, von wo es detaillierte Informationen liefern kann. Dabei spielen die beiden Userland-Komponenten "blktrace" und "blkparse" mit einer speziellen Erweiterung des Block-I/O-Layers zusammen. Außerdem ist das virtuelle Filesystem "debugfs" mit im Spiel, das vorher gemountet sein muss. Bei etlichen Distributionen, etwa Ubuntu, ist das ohnhin der Fall - im Zweifel verschafft "mount | grep debugfs" Klarheit. Sollte das Debugfs nicht gemountent sein, holt man das per
# mount -t debugfs debugfs /sys/kernel/debug
nach. Die Ausgaben von blktrace lassen sich in eine Datei umleiten und im Nachhinein analysieren, man kann sie aber auch live mitverfolgen. Dafür verwendet man eine Pipe und gibt STDOUT/STDIN als Datei an:
# blktrace -d /dev/sda -o - | blkparse -i -
Das Kommando ist als root zu starten und wird per Ctrl+C abgebrochen, wenn die gewünschten Infos im Kasten sind. Eine Ausgabe könnte dann gekürzt so aussehen:
root@hercules:/home/jcb# blktrace -d /dev/sda -o - | blkparse -i - 8,0 0 1 0.000000000 0 C W 478857560 + 8 [0] 8,0 0 840 65.695579611 365 Q W 567821640 + 8 [jbd2/sda5-8] 8,0 0 841 65.695582257 365 M W 567821640 + 8 [jbd2/sda5-8] 8,0 0 842 65.695584212 365 A W 567821648 + 8 <- (8,5) 36947694 ... CPU1 (8,0): Reads Queued: 0, 0KiB Writes Queued: 48, 192KiB Read Dispatches: 0, 0KiB Write Dispatches: 16, 188KiB Reads Requeued: 0 Writes Requeued: 0 Reads Completed: 0, 0KiB Writes Completed: 0, 0KiB ... Total (8,0): Reads Queued: 0, 0KiB Writes Queued: 235, 928KiB Read Dispatches: 0, 0KiB Write Dispatches: 105, 928KiB Reads Requeued: 0 Writes Requeued: 0 Reads Completed: 0, 0KiB Writes Completed: 125, 996KiB
Der obere Teil enthält die eigentlichen Tracing-Informationen in tabellarischer Form. Die Spalten haben folgende Bedeutung:
Dev<mjr,min> CPU SeqNr Timestamp PID Event Aktion StartBlock + AnzahlderBlocks [Prozess]
Anhand der PID lässt sich genau erkennen, welcher Prozess welche I/O-Operationen initiiert hat. Im unteren Teil finden sich diverse Statistiken pro CPU und kumuliert.