web-dev-qa-db-ja.com

特定のディレクトリでディスクI / Oを監視するにはどうすればよいですか?

既知の名前を持ついくつかのプロセスがあり、すべて単一のディレクトリ内のファイルに書き込みます。テストする期間中のディスクブロックの読み取りと書き込みnotnot file access)の数を記録してテストしたいパラメータの変更によってI/Oの量が大幅に減少するかどうか。現在iostat -d -pを使用していますが、これはパーティション全体に限定されています。

10
l0b0

これは単純で不合理に聞こえると思いますが、問題のアプリを制御できる場合(おそらくテスト環境で)、そのディレクトリのみを独自のパーティションにマウントすることができ、iostat、等はそれについてのみあなたに話し、その場で他には何も教えません。

関連する物理ドライブがある場合は、ループバックマウントアラでそれを偽造できます

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,

これで競合するディスクI/Oが完全に削除されるわけではありませんが、iostatの出力がニーズに合わせたものになると確信しています。

10
dianevm

直接的な方法はないと思います。必要なデータを取得する1つの方法は、アクセスをログに記録する virtual filesystem を使用してディレクトリツリーにアクセスすることです。 Loggedfs はそのようなファイルシステムの1つですが、関心のあるすべてのデータを表示できるかどうかはわかりません。

mkdir /tmp/replica
loggedfs /path/to/directory /tmp/replica
mycommand --root=/tmp/replica
fusermount -u /tmp/replica

inotify-tools からinotifywait -m DIRNAMEを使用できます。

2
Tobias Kienzler