Johannes Truschnigg - SRE & DevOps


Zur Suche ▼Zum Archiv ▼

Eintrag von 2008-07-04

Kurztipp: IO-Bottlenecks aufspüren mit iotop


Auf modernen Mehrkernsystemen ist es oftmals nicht die Rechenleistung der CPU, sondern das schwächelnde Disk-Subsystem (die Festplatte(n) also), die den täglichen Betrieb eines Computers unter anspruchsvollen Bedingungen zur Diashow verkommen lassen können: trotz DMA und fortschrittlichen Bussystemen kann es nach wie vor zu massiven Latenzen kommen, wenn große Datenmengen auf ein Blockdevice geschrieben, oder von einem solchen gelesen werden müssen.

Dabei ist es nicht immer leicht, empirische Daten darüber zu bekommen, was genau im System denn nun der Übeltäter und Schuldige ist, das die armen Magnetscheiben so schnell rotieren lässt. Während man mit Tools zum Monitoring der Prozessorauslastung meist vertraut ist (top oder das hübschere htop sind hierfür die üblichen Verdächtigen), so ist das Gegenstück für das Storage-Subsystem, iotop, weit weniger geläufig.

iotop stützt sich dabei aufeinige, mit Version 2.6.25 noch als experimentell gekennzeichnete Features des Linux-Kernels: um das entsprechende Kernel-Backend zu schaffen, muss man Linux mit Support für "per-task storage I/O accounting" (TASKSTATS=Y, TASK_XACCT=Y, TASK_IO_ACCOUNTING=y) bauen. Dadurch taucht in den Prozessdatenstrukturen ein neuer Bereich auf, der das Input/Output-Verhalten des Prozesses festhält; einsehbar unter /proc/$PID/io. iotop klingt sich in das netlink-Socket ein, das diese Daten ebenfalls bereitstellt, und gibt diese in top-ähnlicher Manier sortiert und "live" aus. Die Ausgabe darf man sich ungefähr so vorstellen:

  PID USER      DISK READ  DISK WRITE   SWAPIN    IO    COMMAND
 2828 colo           0 B/s   38.82 K/s  0.00 %  0.00 % ktorrent
 2841 colo           0 B/s    3.88 K/s  0.00 %  0.00 % konversation
direkter Link ▲

© 2007-2019 Johannes Truschnigg | valid xhmtl & css