Login


 
Newsletter
Di, 7. Februar 2012, 15:00

Block I/O Layer-Tracing mit blktrace

Was weckt eine Festplatte wieder auf?! Welche Operationen werden auf dem Medium durchgeführt? Und wie oft greift der Kernel auf die Festplatte zu? Diese und noch mehr Fragen lassen sich mit dem Tool blktrace mühelos beantworten.

Unwissenheit ist das Grauen jedes Administrators, Programmierers oder Anwenders. Nicht zu wissen, welcher Prozess beispielsweise auf eine Festplatte zugreift, und warum sie nach Stunden aus ihrem Schlaf (spin down) erwacht, kann nicht nur frustrierend, sondern mitunter auch teuer werden. Das selbe gilt für Festplattenzugriffe, die durch unerklärliche Geschehnisse im System extrem verlangsamt werden. Den Grund hierfür zu finden, kann durchaus lange Zeit in Anspruch nehmen.

Abhilfe aus dem Dilemma versprechen zahlreiche Tools, die allerdings in der Regel im Userspace angesiedelt sind und dementsprechend auch nur Prozesse anzeigen können. Betrachtet man die Struktur des Block-Layers, so stellt man deshalb schnell fest, dass sie nur bedingt zur Überwachung geeignet sind. Weit ergiebiger erweist sich deshalb das Tool iostat, das allerdings den Nachteil hat, keine detaillierte Informationen auf I/O-Basis auszugeben. Kaum verwunderlich deshalb, dass direkt vom Maintainer des Block I/O Layers, Jens Axboe, mit blktrace ein Tool erstellt wurde, das die Unzulänglichkeiten der anderen Lösungen eliminiert und ein detailliertes Tracing direkt auf dem Block-Layer ermöglicht.

Genau betrachtet setzt sich blktrace aus drei Komponenten zusammen. Zum einen setzt es auf Erweiterungen des Block-I/O-Layers, zum anderen auf die Userland-Anwendungen blktrace und blkparse auf. Während blktrace der Ermittlung und der Extraktion von Events des Layers eingesetzt wird, kann blkparse zur Anzeige und der Formatierung der gesammelten Daten dienen. Zudem setzt das Tool auf debugfs auf, das zwingend eingebunden werden muss:

# mount -t debugfs debugfs /sys/kernel/debug

Die Auswertung der Zugriffe auf ein Device kann auf zweierlei Arten erfolgen. So können Daten mittels blktrace zuerst gespeichert und zu einem späteren Zeitpunkt mit blkparse dekodiert werden. Will man dagegen die Ausgabe sofort untersuchen, kann die Lösung in einem »Live«-Modus betrieben werden, in dem die Ausgabe des Tracers direkt an den Parser geschickt wird:

# blktrace -d /dev/sda -o - | blkparse -i -

Eine typische Ausgabe des Tools sieht dabei wie folgt aus:

  8,16   0        0     0.000000000     0  m   N cfq2593S / alloced
  8,16   0        1     0.000001575  2593  G   N [hdparm]
  8,16   0        2     0.000004018  2593  P   N [hdparm]
  8,16   0        3     0.000004698  2593  I   N 0 (85 06 20 00 00 00 00 00 00 00 00 00 00 40 e5 00 ..) [hdparm]
  8,16   0        4     0.000007418  2593  D   N 0 (85 06 20 00 00 00 00 00 00 00 00 00 00 40 e5 00 ..) [hdparm]
  8,16   0        0     0.001642502     0  m   N cfq2593S / put_queue
CPU0 (8,16):
 Reads Queued:           0,        0KiB  Writes Queued:           0,        0KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:        0,        0KiB
 Reads Requeued:         0               Writes Requeued:         0
 Reads Completed:        0,        0KiB  Writes Completed:        0,        0KiB
 Read Merges:            0,        0KiB  Write Merges:            0,        0KiB
 Read depth:             1               Write depth:             0
 PC Reads Queued:        0,        0KiB  PC Writes Queued:        0,        0KiB
 PC Read Disp.:          1,        0KiB  PC Write Disp.:          0,        0KiB
 PC Reads Req.:          0               PC Writes Req.:          0
 PC Reads Compl.:        0               PC Writes Compl.:        0
 IO unplugs:             0               Timer unplugs:           0

Throughput (R/W): 0KiB/s / 0KiB/s
Events (8,16): 6 entries
Skips: 0 forward (0 -   0.0%)

Die Ausgabe gliedert sich dabei in zwei Gruppen. Während der obere Abschnitt detaillierte Tracing-Informationen liefert, stellt der untere Bereich statistisch die verschiedenen Aktionen dar. Die Traces als solches sind ebenfalls in verschiedene Bereiche unterteilt. Die folgende Ausgabe:

8,16          0     2     0.000002695  2351  Q      WS     973340791 + 8 [jbd2/sdb1-8]

bedeutet im Klartext:

Dev<mjr,min>  CPU  SeqNr  Timestamp    PID  Event  Aktion  StartBlock + AnzahlderBlocks [Prozess]

Wie dem Listing also unschwer zu entnehmen ist, listet blktrace nicht nur die eigentlichen Aktionen, sondern auch den Prozess samt seiner PID. Damit eignet sich das Tool nicht nur dazu, Systeminformationen abzufragen, sondern auch die Aktionen von Anwendungen. Dabei spielt es keine Rolle, ob es sich um eine Festplatte, ein Laufwerk oder einen Verbund von Geräten handelt.

Kommentare (Insgesamt: 0 || Kommentieren )
Pro-Linux
Pro-Linux @Twitter
Neue Nachrichten