如何监视特定目录中的磁盘I / O?


10

我有一些名称已知的进程,它们全部写入单个目录中的文件。我想记录一段时间内而不只是文件访问)磁盘块读写次数,以测试参数更改是否会显着减少I / O量。我目前正在使用iostat -d -p,但仅限于整个分区。



1
这与那些问题不同,因为我对文件本身不感兴趣,而对I / O数量感兴趣。
l0b0 2011年

Answers:


10

我意识到这听起来既简单又荒谬,但是如果您可以控制有问题的应用程序(也许在测试环境中),则只能将该目录安装在其自己的分区上,然后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的输出将更符合您的需求。


3

我认为没有直接的方法。一种获取所需数据的方法是通过记录访问的虚拟文件系统访问目录树。Loggedfs就是这样一种文件系统,尽管我不知道它是否可以显示您感兴趣的所有数据。(否则,它可能只是对该​​数据的少量编码。)

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

2

您可以inotifywait -m DIRNAMEinotify-tools中使用


-dinotifywait 3.13中不存在。你是说-m
l0b0 2011年

@ l0b0:哦,我从git repo使用3.14。抱歉。但该手册页指出,该操作与-m在后台运行并需要输出文件的操作相同。
Tobias Kienzler

-r可能有用
Tobias Kienzler 2011年

1
经过测试。对于这种误解,我们深表歉意,但是我对访问哪些文件(甚至多少文件)不感兴趣,而对I / O的数量不感兴趣。
l0b0 2011年

2
注意,这是特定于Linux的。BSD具有kqueue和pnotify系统调用,但我不知道它们是否完全符合作者的要求。
肖恩·高夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.