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