Wie kann ich die Festplatten-E / A in einem bestimmten Verzeichnis überwachen?

10

Ich habe einige Prozesse mit einem bekannten Namen, die alle in Dateien in einem einzigen Verzeichnis schreiben. Ich möchte die Anzahl der Lese- und Schreibvorgänge für Festplattenblöcke über einen bestimmten Zeitraum ( nicht nur den Dateizugriff) protokollieren , um zu testen, ob eine Parameteränderung die E / A-Menge erheblich reduziert. Ich verwende derzeit iostat -d -p, aber das ist auf die gesamte Partition beschränkt.

l0b0
quelle
1
Dies unterscheidet sich von diesen Fragen, da ich nicht an den Dateien selbst interessiert bin, sondern an der Menge der E / A.
10.

Antworten:

10

Mir ist klar, dass dies sowohl simpel als auch absurd klingen wird, aber wenn Sie die Kontrolle über die betreffenden Apps haben (möglicherweise in einer Testumgebung), können Sie NUR dieses Verzeichnis auf einer eigenen Partition mounten iostatusw. darüber und sonst nichts an dieser Stelle.

Wenn es sich um physische Laufwerke handelt, können Sie diese mit einem Loopback-Mount à la fälschen

dd if=/dev/zero of=/bigdisk/LOOPFILE bs=1024m count=1024m # 1gb loopback file
mke2fs -j /bigdisk/LOOPFILE
mkdir /tmpcopy
mount -o loop /tmpcopy /bigdisk/LOOPFILE
cp -r -p $SPECIALDIR2MONITOR /tmpcopy
umount /tmpcopy
mount -o loop $SPECIALDIR2MONITOR  /bigdisk/LOOPFILE,

Das würde nicht alle konkurrierenden Festplatten-E / A vollständig entfernen, aber ich bin mir ziemlich sicher iostat, dass die Ausgabe spezifischer auf Ihre Bedürfnisse zugeschnitten wäre.

Dianevm
quelle
3

Ich glaube nicht, dass es einen direkten Weg gibt. Eine Möglichkeit, die gewünschten Daten abzurufen , besteht darin, über ein virtuelles Dateisystem , das Zugriffe protokolliert , auf den Verzeichnisbaum zuzugreifen . Loggedfs ist ein solches Dateisystem, obwohl ich nicht weiß, ob es alle Daten anzeigen kann, an denen Sie interessiert sind. (Wenn nicht, wäre dies wahrscheinlich ein bescheidener Codierungsaufwand für diese Daten.)

mkdir /tmp/replica
loggedfs /path/to/directory /tmp/replica
mycommand --root=/tmp/replica
fusermount -u /tmp/replica
Gilles 'SO - hör auf böse zu sein'
quelle
2

Sie können inotifywait -m DIRNAMEvon den inotify-Tools verwenden .

Tobias Kienzler
quelle
-dexistiert nicht in inotifywait 3.13. Meinst du -m?
10.
@ l0b0: oh, ich benutze 3.14 aus dem Git Repo. Es tut uns leid. Die Manpage gibt jedoch an, dass es dasselbe ist, -mmit der Ausnahme, dass es im Hintergrund ausgeführt wird und eine Outfile erfordert.
Tobias Kienzler
auch -rkönnte nützlich sein
Tobias Kienzler
1
Getestet. Das Missverständnis tut mir leid, aber ich bin nicht daran interessiert, auf welche Dateien (oder sogar auf wie viele Dateien) zugegriffen wurde, sondern auf die Anzahl der E / A.
10.
2
Beachten Sie, dass dies Linux-spezifisch ist. BSDs haben kqueue- und pnotify-Systemaufrufe, aber ich weiß nicht, ob sie genau das tun, was der Autor anfordert.
Shawn J. Goff