Jetzt, zu gegebener Zeit, habe ich es geschafft, dies selbst zu lösen, so dass ich es zumindest für die Nachwelt selbst nachverfolgen kann.
Leider habe ich das ursprüngliche Problem bei einem Kernel-Upgrade verloren, habe aber stattdessen ein neues Problem erhalten, das noch leistungsschwächer und genauso schwer aufzuspüren ist. Die Techniken, die ich fand, waren die folgenden:
Zuallererst ist blktrace
/ blkparse
ein Tool, das ich sehr hilfreich fand. Es ermöglicht die Verfolgung des Fortschritts einzelner E / A-Anforderungen mit vielen hilfreichen Details, z. B. dem Prozess, der die Anforderung gesendet hat. Es ist hilfreich, die Ausgabe zu aktivieren tmpfs
, damit die Verarbeitung des Trace-Speichers nicht von selbst beginnt.
Das hat aber nur insofern geholfen, als ich einen Kernel mit mehr Debugging-Funktionalität kompiliert habe. Insbesondere fand ich es ftrace
sehr hilfreich, da ich den Prozess mit der schlechten Leistung im Kernel-Space nachverfolgen konnte, um zu sehen, was er tat und wo er blockierte. Das Kompilieren eines Debug-Kernels bietet auch eine funktionierende WCHAN
Ausgabe ps
, mit der sich leichter feststellen lässt, was ein Prozess im Kernel tut, zumindest in einfacheren Fällen.
Ich hatte auch gehofft, dass LatencyTop nützlich ist, aber ich fand es ziemlich fehlerhaft und auch, dass nur Latenzgründe angezeigt wurden, die zu "hoch" waren, um wirklich nützlich zu sein.
Ich fand es auch hilfreicher iostat
, einfach den Inhalt von /sys/block/$DEVICE/stat
in sehr kurzen Abständen zu betrachten, einfach so:
while :; do cat /sys/block/sda/stat; sleep .1; done
Documentation/iostats.txt
Informationen zum Format der stat
Datei finden Sie im Kernel-Quelltext . Wenn ich es in kurzen Abständen betrachtete, konnte ich das genaue Timing und die Größe von E / A-Bursts und dergleichen feststellen.
Am Ende stellte ich fest, dass das Problem, das ich nach dem Kernel-Upgrade hatte, durch stabile Seiten verursacht wurde , eine Funktion, die in Linux 3.0 eingeführt wurde. In meinem Fall wurde Berkeley DB für längere Zeit angehalten, wenn Seiten in ihrer mmap'ed verschmutzt wurden Regionsdateien. Es scheint zwar möglich zu sein, dieses Feature zu patchen, und die Probleme, die es verursacht, könnten auch in Linux 3.9 behoben sein. Das schlimmste Problem, das ich bisher hatte, habe ich jedoch durch Patchen von Berkeley DB behoben , damit ich die Regionsdateien in einem anderen Verzeichnis ablegen kann (in meinem Fall /dev/shm
), so dass ich das Problem insgesamt vermeiden kann.