Как я могу контролировать дисковый ввод-вывод в определенном каталоге?

10

У меня есть несколько процессов с известным именем, которые все записывают в файлы в одном каталоге. Я хотел бы зарегистрировать количество операций чтения и записи блоков диска за период ( не только доступ к файлам), чтобы проверить, значительно ли уменьшение параметра уменьшает количество операций ввода-вывода. Я в настоящее время использую iostat -d -p, но это ограничено всем разделом.

l0b0
источник
1
Это отличается от этих вопросов, потому что меня интересуют не сами файлы, а объем ввода / вывода.
10

Ответы:

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,

Это не полностью удалит все конкурирующие дисковые операции ввода-вывода, но я уверен, что iostatвывод будет более конкретным для вашей потребности.

dianevm
источник
3

Я не думаю, что есть прямой путь. Один из способов получить нужные данные - получить доступ к дереву каталогов через виртуальную файловую систему, которая регистрирует обращения. Loggedfs - одна из таких файловых систем, хотя я не знаю, сможет ли она показать все интересующие вас данные. (Если нет, вероятно, это будет скромное усилие по кодированию этих данных).

mkdir /tmp/replica
loggedfs /path/to/directory /tmp/replica
mycommand --root=/tmp/replica
fusermount -u /tmp/replica
Жиль "ТАК - перестань быть злым"
источник
2

Вы можете использовать inotifywait -m DIRNAMEиз inotify-tools .

Тобиас Кинцлер
источник
-dне существует в inotifywait 3.13. Вы имеете в виду -m?
10
@ l0b0: о, я использую 3.14 из репозитория git. простите. Но на man-странице говорится, что это то же самое, что -mза исключением работы в фоновом режиме и необходимости создания выходного файла.
Тобиас Кинцлер
Также -rможет быть полезно
Тобиас Кинцлер
1
Протестировал это. Прошу прощения за недоразумение, но меня не интересует, к каким файлам (или даже сколько файлов) был получен доступ, а скорее количество операций ввода-вывода.
10
2
Обратите внимание, это специфично для Linux. У BSD есть системные вызовы kqueue и pnotify, но я не знаю, делают ли они именно то, что запрашивает автор.
Шон Дж. Гофф