Что такое разумное количество часов 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 упоминаются "тысячи часов", поэтому, по крайней мере, это число не должно быть проблемой.