inotify FD - почему ограничение на идентификатор пользователя, а не на процесс?

В Linux ограничение на количество экземпляров inotify, которые может открыть процесс, ограничено максимальным числом для каждого идентификатора пользователя, указанным в /proc/sys/fs/inotify/max_user_instances

Естественно было бы ограничить его на процесс, например, файловые FD. Поскольку FD inotify ограничены идентификатором пользователя, более вероятно, что он достигнет предела на серверах, где многие процессы могут выполняться с одним и тем же идентификатором пользователя. Но я думаю, для этого должна быть причина?

Это вопрос программирования, потому что я должен использовать inotify в своем коде и хочу установить правильный предел для системы.

1 ответ

Решение

Причина заключается в том, чтобы предотвратить использование системы пользователями без полномочий root путем просмотра большого количества файлов с использованием inotify, inotify структурам требуется недопустимый объем памяти для поддержки (и ее нельзя выгрузить на диск), поэтому должен быть некоторый предел того, сколько непривилегированных файлов можно зафиксировать.

epoll раньше были схожие ограничения (max_user_instances а также max_user_watches), хотя в итоге max_user_instances был удален и max_user_watches было установлено 4% памяти.

Подобный патч, вероятно, должен быть представлен для inotify, но пока не было.

Файловые дескрипторы ограничены для каждого процесса по совершенно другой причине: когда процесс запускается, таблица дескрипторов файлов распределяется, а ее размер пропорционален максимально допустимому количеству файловых дескрипторов. Сохранение этого как можно меньшего размера снижает накладные расходы памяти на процесс.

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