ADMIN-Tipp: Plattenspion

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Man sitzt grübelnd vor dem Rechner, tippt nichts, bewegt keine Maus - aber plötzlich hört man die Festplatte anlaufen. Was hat sie aufgeweckt: Der Indexer der Desktop-Suche, eine E-Mail, oder gar Malware? Oder: Wieviel Schreiboperationen landen bei allen Buffern und Caches tatsäclich auf der Platte? Blktrace gibt die Antwort.

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.

10.04.2012
comments powered by Disqus