linux inotifypropertychanged lsyncd

¿Cuál es una cantidad razonable de relojes inotify con Linux?



inotifypropertychanged lsyncd (4)

Estoy trabajando en un daemon que monitorea eventos de archivos a través de inotify para activar varios tipos de eventos cuando se accede a los archivos. He leído que los relojes son un poco caros, porque el Kernel almacena el nombre de ruta completo de cada archivo que se está mirando.

¿Cuántos relojes serían demasiados?

Editar: Sobre todo, me pregunto ... ¿alguna vez has visto un golpe de rendimiento notable, de ser así, cuántos relojes sucedió? Sí, tengo que monitorear / recursivamente (sin embargo, es un sistema bootstrapped mínimo).


100 billones billones de billones probablemente sean demasiados. Kernel Korner - Introducción a inotify menciona "miles de relojes" por lo que al menos ese número no debería ser un problema.


Puede encontrar los límites del sistema leyendo /proc/sys/fs/inotify/max_user_instances (número máximo de inotify "objetos") y /proc/sys/fs/inotify/max_user_watches (número máximo de archivos /proc/sys/fs/inotify/max_user_watches ), por lo que si supera esos números, son demasiados ;-) La cantidad máxima de relojes suele ser de varias decenas de miles o más, en mi sistema, 262143, que es probablemente más de lo que necesitarías a menos que intentes ver cada archivo en un sistema de archivos, pero no deberías estar haciendo eso. Yo diría que simplemente trate de no usar más relojes de lo necesario de lo que necesita, y no se preocupe a menos que note una disminución significativa en el rendimiento.


Mi información:

[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 usa aproximadamente 130M de memoria.

Uso lsyncd para mantener algunos directorios sincronizados con el servidor de recuperación de desastres.

Sin rendimiento golpe / penalización en el servidor principal.


AFAIK el kernel no está almacenando el nombre de ruta, sino el inodo. Sin embargo, hay 540 bytes por reloj en un sistema de 32 bits. Doble tanto en 64 bits.

Lo sé por Lsyncd (¿quizás quieres comprobarlo?) Personas que tienen un millón de relojes. Simplemente come un Gigabyte de memoria.