Comment puis-je surveiller les E / S disque dans un répertoire particulier?

10

J'ai quelques processus avec un nom connu qui écrivent tous dans des fichiers dans un seul répertoire. J'aimerais enregistrer le nombre de lectures et d'écritures de blocs de disques sur une période ( pas seulement l'accès aux fichiers) pour tester si un changement de paramètre réduit considérablement la quantité d'E / S. J'utilise actuellement iostat -d -p, mais cela est limité à toute la partition.

l0b0
la source
1
C'est différent de ces questions, car je ne suis pas intéressé par les fichiers eux-mêmes mais plutôt par la quantité d'E / S.
l0b0

Réponses:

10

Je me rends compte que cela va sembler à la fois simpliste et absurde, mais si vous avez le contrôle sur les applications en question (peut-être dans un environnement de test), vous pouvez monter UNIQUEMENT ce répertoire sur une partition qui lui est propre, alors iostat, etc., vous dirait seulement à ce sujet, et rien d'autre à cet endroit.

S'il y a des disques physiques impliqués, vous pouvez les simuler avec un montage en boucle à la

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,

Cela ne supprimerait pas complètement toutes les E / S de disque concurrentes, mais je suis presque sûr que iostatla sortie serait plus spécifique à vos besoins.

dianevm
la source
3

Je ne pense pas qu'il existe un moyen direct. Une façon d'obtenir les données souhaitées consiste à accéder à l'arborescence de répertoires via un système de fichiers virtuel qui enregistre les accès. Loggedfs est l'un de ces systèmes de fichiers, mais je ne sais pas s'il peut afficher toutes les données qui vous intéressent. (Sinon, ce serait probablement un effort de codage modeste pour ces données.)

mkdir /tmp/replica
loggedfs /path/to/directory /tmp/replica
mycommand --root=/tmp/replica
fusermount -u /tmp/replica
Gilles 'SO- arrête d'être méchant'
la source
2

Vous pouvez utiliser à inotifywait -m DIRNAMEpartir des outils inotify .

Tobias Kienzler
la source
-dn'existe pas dans inotifywait 3.13. Tu veux dire -m?
l0b0
@ l0b0: oh, j'utilise 3.14 du git repo. Désolé. Mais la page de manuel indique que c'est la même chose qu'à -ml'exception de l'exécution en arrière-plan et nécessitant un outfile.
Tobias Kienzler
-rpourrait également être utile
Tobias Kienzler
1
Je l'ai testé. Je suis désolé pour ce malentendu, mais je ne suis pas intéressé par les fichiers (ou même le nombre de fichiers) qui ont été consultés, mais plutôt par la quantité d'E / S.
l0b0
2
Remarque, ceci est spécifique à Linux. Les BSD ont des appels système kqueue et pnotify, mais je ne sais pas s'ils font exactement ce que l'auteur demande.
Shawn J.Goff