Per Prozess I/O Statistiken
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird. Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar. |
---|
Für die Analyse der Festplatten-Auslastung ist es von Vorteil zu wissen, welcher Prozess auf das Device schreibt bzw. von diesem liest. Unter Umständen ist es notwendig, detailliertere Informationen zu erhalten, als sie z.B. iotop liefert.
Im ersten Schritt kann mit iostat analysiert werden, welches Device wie ausgelastet wird:
# iostat 2
Linux 3.2.0-20-generic (ssd-server) 04/17/2012 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.01 0.00 0.02 0.15 0.00 99.82
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 22.86 310.20 940.49 18686344 56654892
sda 1.14 5.22 317.58 314359 19130645
dm-0 22.47 0.02 73.31 1249 4416279
avg-cpu: %user %nice %system %iowait %steal %idle
0.13 0.00 0.13 0.00 0.00 99.75
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 843.00 2048.00 15582.00 4096 31164
sda 4.00 0.00 2048.00 0 4096
dm-0 3840.00 0.00 15360.00 0 30720
Mit iotop können anschließend die Prozesse aufgelistet werden,die I/O verursachen:
# iotop -b -n1
Eine noch genauere Ausgabe wird über das "/proc-Verzeichnis" erreicht. Dazu kann die Option "block_dump" aktiviert werden, mit der alle Disk reads/writes mitgeloggt werden:[1][2]
echo 1 > /proc/sys/vm/block_dump
Achtung: nach der Aktivierung dieser Option werden sehr viele Information mitgeloggt, die Performance des Systems kann dadurch durchaus beeinträchtigt werden. Die Option sollte man daher nur für kurze Zeit und zu Analyse-Zwecken aktivieren. Die Logging-Informationen selbst erscheinen über das Syslog oder dmesg:
# dmesg | tail
[62350.803635] ext4lazyinit(4601): WRITE block 192983256 on dm-0 (8 sectors)
[62350.803646] ext4lazyinit(4601): WRITE block 59559128 on sdb1 (8 sectors)
[62350.803652] ext4lazyinit(4601): WRITE block 192983264 on dm-0 (8 sectors)
[62350.803660] ext4lazyinit(4601): WRITE block 59559136 on sdb1 (8 sectors)
[62350.803666] ext4lazyinit(4601): WRITE block 192983272 on dm-0 (8 sectors)
[62350.803674] ext4lazyinit(4601): WRITE block 59559144 on sdb1 (8 sectors)
[62350.803679] ext4lazyinit(4601): WRITE block 192983280 on dm-0 (8 sectors)
[62350.803688] ext4lazyinit(4601): WRITE block 59559152 on sdb1 (8 sectors)
[62350.803693] ext4lazyinit(4601): WRITE block 192983288 on dm-0 (8 sectors)
[62350.803701] ext4lazyinit(4601): WRITE block 59559160 on sdb1 (8 sectors)
# tail /var/log/syslog
Apr 17 09:43:23 ssd-server kernel: [62350.803674] ext4lazyinit(4601): WRITE block 59559144 on sdb1 (8 sectors)
Apr 17 09:43:23 ssd-server kernel: [62350.803679] ext4lazyinit(4601): WRITE block 192983280 on dm-0 (8 sectors)
Apr 17 09:43:23 ssd-server kernel: [62350.803688] ext4lazyinit(4601): WRITE block 59559152 on sdb1 (8 sectors)
Apr 17 09:43:23 ssd-server kernel: [62350.803693] ext4lazyinit(4601): WRITE block 192983288 on dm-0 (8 sectors)
Apr 17 09:43:23 ssd-server kernel: [62350.803701] ext4lazyinit(4601): WRITE block 59559160 on sdb1 (8 sectors)
Die obige Ausgabe zeigt die Lazy Initialization eines neu erstellten Dateisystems, das die Inode-Tabellen initialisiert. Aus bis jetzt nicht nachvollziehbaren Gründen scheint der Prozess "ext4lazyinit" zwar bei der Ausgabe von iotop auf, das Tool zeigt aber keine Device-Aktivitäten an (keine read/writes). Die Option "block_dump" offenbarte, welcher Prozess die I/O-Operationen auf das Device verursacht.
Einzelnachweise
- ↑ laptop-mode.txt Dokumentation (git.kernel.org)
- ↑ sysctl vm Dokumentation (kernel.org)