Есть ли любой инструмент/команда, доступный в Unix для контроля чтения-записей в конкретном файле.
Я также хочу собраться, сколько данных считывается каждый раз, когда к файлу получают доступ.
Короткий ответ, ни один, о чем я знаю.
vmstat
(выполненный vmstat 1
получить непосредственную идею того, что это делает; ^C
выходить), может показать Вам полную систему использование IO (BI
и BO
столбцы, блоки в и блокируют, вероятно, наиболее полезны). Я нахожу это очень полезным в главным образом тихих системах.
strace
(выполненный strace -o /tmp/ls ls /tmp
; затем посмотрите на /tmp/ls
файл для наблюдения, какие данные это дает Вам), позволил бы Вам следовать за путем выполнения своей программы через всю запись () вызовы и сложить требуемые размеры для того, какой бы ни дескриптор файла Вы интересуетесь. Зато, это могло быть задано сценарием и будет специально для той программы для того файла. На оборотной стороне это замедлило бы осуществление Вашей программы (возможно, это будет работать очень медленно), и это полностью пропустило бы весь диск IO, который использует mmap(2)
регионы памяти.
Вы могли записать библиотеку, с которой Вы загрузитесь LD_PRELOAD
переменная среды для замены read(2)
и write(2)
с обертками, которые выполняют Ваш учет и завершают вызов системных вызовов (это почти наверняка не стоит стычки). Этому также не удалось бы видеть диск IO, который использует mmap(2)
. У Вас должно было бы быть ужасное серьезное основание пойти этим путем.
Вы могли записать бэкенд FUSE, чтобы сделать Ваш учет. Это было бы медленно, и это замедлит каждый процесс с помощью той файловой системы. Код FUSE также выставляет много внутренностей ядра, которые ожидают, что быстрые результаты к произвольно долго (и холодно долго, по стандартам ядра) задерживается из-за программ пространства пользователя. Программы могли бы вызвать давление памяти, свопинг и дальнейший дисковый трафик. FUSE лучше всего развертывается в средах с многочисленной памятью, требованиями нев реальном времени и низкой стоимостью отказа.
Существует fam, http://en.wikipedia.org/wiki/File_alteration_monitor, но не уверены если его доступное для Вашего http://oss.sgi.com/projects/fam/ ОС
Также Google inotify.
В Linux было несколько API для контроля действия файловой системы ранее (dnotify и inotify), но последний называют fanotify
. LWN обсуждают API здесь.
Для контроля целых файловых систем существует iostat, что Вы просите, кажется, несколько похож на iostat, но только данный файл. Я не знаю о такой комбинации, но при помощи API можно записать собственное.