Toto je jednoduchý problém, ale poprvé jsem ho musel skutečně opravit:zjistit, které konkrétní soubory/inody jsou cílem většiny I/O. Rád bych získal obecný přehled o systému, ale pokud musím zadat PID nebo TID, jsem s tím v pořádku.
Chtěl bych jet, aniž bych musel provádět strace
v programu, který se objeví v iotop
. Nejlépe pomocí nástroje ve stejném duchu jako iotop
ale takový, který se rozepisuje podle souboru. Mohu použít lsof
vidět, které soubory má poštář otevřené, ale neuvádí, který soubor přijímá I/O ani kolik.
Viděl jsem jinde, kde bylo navrženo použít auditd
ale raději bych to neudělal, protože by to vložilo informace do našich auditních souborů, které používáme pro jiné účely, a to se zdá být problém, který bych měl být schopen prozkoumat tímto způsobem.
Konkrétní problém, který mám právě teď, je s příliš rychlým plněním snímků LVM. Od té doby jsem problém vyřešil, ale rád bych to dokázal vyřešit tímto způsobem, než abych dělal pouze ls
na všech otevřených deskriptorech souborů v /proc/<pid>/fd
abyste viděli, který z nich rostl nejrychleji.
Přijatá odpověď:
Existuje několik aspektů této otázky, které byly částečně vyřešeny prostřednictvím jiných nástrojů, ale zdá se, že neexistuje jediný nástroj, který by poskytoval všechny funkce, které hledáte.
iotop
Tento nástroj ukazuje, které procesy spotřebovávají nejvíce I/O. Chybí však možnosti pro zobrazení konkrétních názvů souborů.
$ sudo iotop
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
5 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u:0]
6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0]
Ve výchozím nastavení dělá to, co běžné top
dělá pro procesy soupeřící o čas CPU, s výjimkou diskových I/O. Pomocí -a
jej můžete přemluvit, aby vám poskytl výhled na 30 000 stop přepnout tak, aby ukazoval akumulaci podle procesu v průběhu času.
$ sudo iotop -a
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
258 be/3 root 0.00 B 896.00 K 0.00 % 0.46 % [jbd2/dm-0-8]
22698 be/4 emma 0.00 B 72.00 K 0.00 % 0.00 % chrome
22712 be/4 emma 0.00 B 172.00 K 0.00 % 0.00 % chrome
1177 be/4 root 0.00 B 36.00 K 0.00 % 0.00 % cupsd -F
22711 be/4 emma 0.00 B 120.00 K 0.00 % 0.00 % chrome
22703 be/4 emma 0.00 B 32.00 K 0.00 % 0.00 % chrome
22722 be/4 emma 0.00 B 12.00 K 0.00 % 0.00 % chrome
i* nástroje (inotify, iwatch atd.)
Tyto nástroje poskytují přístup k událostem přístupu k souborům, ale musí být specificky zaměřeny na konkrétní adresáře nebo soubory. Nejsou tedy tak užitečné, když se pokoušíte vysledovat neoprávněný přístup k souboru neznámým procesem, při ladění problémů s výkonem.
Také inotify
framework neposkytuje žádné podrobnosti o souborech, ke kterým se přistupuje. K dispozici je pouze typ přístupu, takže pomocí těchto nástrojů nejsou k dispozici žádné informace o množství dat přesouvaných tam a zpět.
iostat
Zobrazuje celkový výkon (čtení a zápisy) na základě přístupu k danému zařízení (pevnému disku) nebo oddílu. Neposkytuje však žádné informace o tom, které soubory generují tyto přístupy.
$ iostat -htx 1 1
Linux 3.5.0-19-generic (manny) 08/18/2013 _x86_64_ (3 CPU)
08/18/2013 10:15:38 PM
avg-cpu: %user %nice %system %iowait %steal %idle
18.41 0.00 1.98 0.11 0.00 79.49
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda
0.01 0.67 0.09 0.87 1.45 16.27 37.06 0.01 10.92 11.86 10.82 5.02 0.48
dm-0
0.00 0.00 0.09 1.42 1.42 16.21 23.41 0.01 9.95 12.22 9.81 3.19 0.48
dm-1
0.00 0.00 0.00 0.02 0.01 0.06 8.00 0.00 175.77 24.68 204.11 1.43 0.00
blktrace
Tato možnost je příliš nízká. Chybí mu přehled o tom, ke kterým souborům a/nebo inodům se přistupuje, pouze nezpracovaná čísla bloků.
$ sudo blktrace -d /dev/sda -o - | blkparse -i -
8,5 0 1 0.000000000 258 A WBS 0 + 0 <- (252,0) 0
8,0 0 2 0.000001644 258 Q WBS [(null)]
8,0 0 3 0.000007636 258 G WBS [(null)]
8,0 0 4 0.000011344 258 I WBS [(null)]
8,5 2 1 1266874889.709032673 258 A WS 852117920 + 8 <- (252,0) 852115872
8,0 2 2 1266874889.709033751 258 A WS 852619680 + 8 <- (8,5) 852117920
8,0 2 3 1266874889.709034966 258 Q WS 852619680 + 8 [jbd2/dm-0-8]
8,0 2 4 1266874889.709043188 258 G WS 852619680 + 8 [jbd2/dm-0-8]
8,0 2 5 1266874889.709045444 258 P N [jbd2/dm-0-8]
8,0 2 6 1266874889.709051409 258 I WS 852619680 + 8 [jbd2/dm-0-8]
8,0 2 7 1266874889.709053080 258 U N [jbd2/dm-0-8] 1
8,0 2 8 1266874889.709056385 258 D WS 852619680 + 8 [jbd2/dm-0-8]
8,5 2 9 1266874889.709111456 258 A WS 482763752 + 8 <- (252,0) 482761704
...
^C
...
Total (8,0):
Reads Queued: 0, 0KiB Writes Queued: 7, 24KiB
Read Dispatches: 0, 0KiB Write Dispatches: 3, 24KiB
Reads Requeued: 0 Writes Requeued: 0
Reads Completed: 0, 0KiB Writes Completed: 5, 24KiB
Read Merges: 0, 0KiB Write Merges: 3, 12KiB
IO unplugs: 2 Timer unplugs: 0
Throughput (R/W): 0KiB/s / 510KiB/s
Events (8,0): 43 entries
Skips: 0 forward (0 - 0.0%)
fatrace
Toto je nový přírůstek do linuxového jádra a vítaný, takže je pouze v novějších distribucích, jako je Ubuntu 12.10. Můj systém Fedora 14 to postrádal 8-).
Poskytuje stejný přístup, jaký můžete získat prostřednictvím inotify
aniž byste museli cílit na konkrétní adresář a/nebo soubory.
$ sudo fatrace
pickup(4910): O /var/spool/postfix/maildrop
pickup(4910): C /var/spool/postfix/maildrop
sshd(4927): CO /etc/group
sshd(4927): CO /etc/passwd
sshd(4927): RCO /var/log/lastlog
sshd(4927): CWO /var/log/wtmp
sshd(4927): CWO /var/log/lastlog
sshd(6808): RO /bin/dash
sshd(6808): RO /lib/x86_64-linux-gnu/ld-2.15.so
sh(6808): R /lib/x86_64-linux-gnu/ld-2.15.so
sh(6808): O /etc/ld.so.cache
sh(6808): O /lib/x86_64-linux-gnu/libc-2.15.so
Výše uvedené zobrazuje ID procesu, který přistupuje k souboru, a ke kterému souboru přistupuje, ale nedává vám žádné celkové využití šířky pásma, takže každý přístup je nerozeznatelný od jakéhokoli jiného přístupu.
Co tedy dělat?
fatrace
možnost ukazuje nejslibnější pro KONEČNĚ poskytuje nástroj, který vám může ukázat agregované využití diskových I/O na základě souborů, ke kterým se přistupuje, spíše než procesů, které přistupují.
Odkazy
- fatrace:hlášení událostí přístupu k souborům v celém systému
- fatrace – hlásí události přístupu k souborům v celém systému
- Další nové rozhraní ABI pro fanotify
- Uživatelská příručka blktrace