Что такое разумное количество часов inotify с Linux?

Я работаю над демоном, который отслеживает файловые события с помощью inotify, чтобы инициировать различные типы событий при доступе к файлам. Я читал, что часы стоят немного дороже, потому что Ядро хранит полный путь к каждому файлу, который просматривается.

Сколько часов будет слишком много?

Редактировать: В основном, мне интересно... Вы когда-нибудь видели заметный хит производительности, если так, на скольких часах это произошло? Да, я должен контролировать / рекурсивно (однако это минимальная система начальной загрузки).

6 ответов

Решение

AFAIK ядро ​​хранит не путь, а индекс. Тем не менее, в 32-битной системе на 5 часов приходится 540 байт. Удвойте на 64 бит.

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

Вы можете найти системные ограничения, прочитав /proc/sys/fs/inotify/max_user_instances (максимальное количество inotify "объектов") и /proc/sys/fs/inotify/max_user_watches (максимальное количество просматриваемых файлов), поэтому, если вы превысите эти числа, их будет слишком много;-) Максимальное количество часов, как правило, составляет несколько десятков тысяч или более - в моей системе 262143 - что, вероятно, больше, чем вы когда-либо нужно, если вы не пытаетесь просмотреть каждый файл в файловой системе, но вы не должны этого делать. Я бы сказал, просто старайтесь не использовать больше часов inotify, чем вам нужно, и не беспокойтесь об этом, если вы не заметите значительное снижение производительности.

/proc/sys/fs/inotify/max_user_watches- текущее максимальное количество просмотров на пользователя.

Исторически сложилось так, что ядро ​​по умолчанию имеет значение 8192, но, учитывая, что многие дистрибутивы Linux довольно сильно настраивают свои сборки ядра, это может быть не так для каждой системы Linux. Недавнее изменение ядра [1] динамически выбирает значение по умолчанию в диапазоне [8192, 1048576] в зависимости от того, сколько оперативной памяти имеет система. (5.11 - первый выпуск ядра, содержащий это изменение.)

AFAICT, root может измениться max_user_watchesна любое значение 2147483647 (231-1) или меньше.

[1] https://github.com/torvalds/linux/commit/92890123749bafc317bbfacbe0a62ce08d78efb7

Это зависит от того, сколько баранов у вас есть

Хотя 524288 - это максимальное количество файлов, которое можно просмотреть, если вы находитесь в среде, которая особенно ограничена в памяти, вы можете уменьшить это число. Каждый просмотр файла занимает 540 байт (32-бит) или ~1 кБ (64-бит), поэтому предполагается, что используются все 524288 часов, что приводит к верхней границе около 256 МБ (32-бит) или 512 МБ (64-бит),

Моя информация:

[foo@caffeine ~]# cat /var/log/lsyncd.status | grep Inotify
Inotify watching 293208 directories

[foo@caffeine ~]# cat /proc/sys/fs/inotify/max_user_watches
1048576

lsyncd использует около 130М памяти.

Я использую lsyncd для синхронизации некоторых каталогов с сервером аварийного восстановления.

Отсутствие потери производительности / штрафа на главном сервере.

100 миллиардов триллионов газиллионов было бы слишком много, вероятно. Ядро Корнер - В вводной части inotify упоминаются "тысячи часов", поэтому, по крайней мере, это число не должно быть проблемой.

Другие вопросы по тегам