2009-02-11 19 views
27

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ál es una cantidad razonable de relojes inotify con Linux?

¿Cuántos relojes serían demasiados?

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

Respuesta

17

AFAIK el núcleo 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é de Lsyncd (¿quizás quieres saberlo?) Personas que tienen un millón de relojes. Simplemente come un Gigabyte de memoria.

6

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

23

Puede encontrar los límites del sistema mediante la lectura de /proc/sys/fs/inotify/max_user_instances (número máximo de "objetos" inotify) y /proc/sys/fs/inotify/max_user_watches (número máximo de archivos observaba), por lo que si se excede esos números, que son demasiados ;-) El número máximo de relojes generalmente es varias decenas de miles o más, en mi sistema, 262143, que probablemente sea más de lo que necesitaría a menos que intente ver cada archivo en un sistema de archivos, pero no debería 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.

+1

¿por qué no debería estar usando inotify para ver todo el sistema de archivos? puedes ser específico? – Blub

+0

@Blub, ¿por qué querrías hacerlo? A menos que esté depurando una implementación del sistema de archivos, no puedo pensar en un buen caso de uso, y si eso es lo que está haciendo, probablemente sea mejor conectarse al código del sistema de archivos. Sin mencionar, probablemente no tendrá suficientes relojes para ver todo en un sistema de archivos con un sistema operativo moderno. Pero supongo que si lo hace (es decir, si está trabajando con un conjunto reducido de archivos), probablemente no sea lo peor. Mientras su computadora pueda manejarlo, no va a dañar nada AFAIK. –

+2

Quiero indexar un volumen y, por lo tanto, si un archivo cambia en algún lugar, necesito actualizar mi índice. He echado un vistazo al código fuente ext4, no está hecho exactamente para los complementos del usuario ... solo hay una utilidad dumpe2fs que puede imprimir "bloques", pero todavía no se tiene idea de cómo sacar los archivos de acceso de allí. Y aún así ... Tendría que ejecutar esa utilidad constantemente, al menos una vez por segundo para volver a actualizar el índice. No es exactamente genial, preferiría recuperar algún evento, como lo hace inotify. – Blub

9

Mi Info:

[[email protected] ~]# cat /var/log/lsyncd.status | grep Inotify 
Inotify watching 293208 directories 

[[email protected] ~]# cat /proc/sys/fs/inotify/max_user_watches 
1048576 

Lsyncd utiliza alrededor de 130 M de la 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.

+4

Creo que está viendo el uso de memoria lsyncd y no inotify ...inotify usa la memoria del espacio del kernel ... – confiq

Cuestiones relacionadas