GNU/Linux >> Tutoriales Linux >  >> Linux

¿Eficiencia de muchos relojes Inotify o llamadas de estado?

Estoy desarrollando un software que utilizará inotify para realizar un seguimiento de los cambios en una gran cantidad de archivos (de decenas a cientos de miles de archivos). Se me han ocurrido estas ideas:

  • un reloj por archivo
  • una vigilancia por directorio principal
  • evite inotify y escanee periódicamente el fs en busca de cambios (no recomendado)

Tendré una base de datos de todos los archivos que estoy viendo y alguna información estadística básica (como mtime y tamaño), sin embargo, tendría que registrar cada archivo en ese directorio hasta encontrar el que cambió.

¿Qué sería más rápido, toneladas (más de 100 000) de relojes inotify o toneladas de llamadas de emergencia?

Estoy pensando que sería mejor reducir la cantidad de llamadas de estadísticas, pero no sé lo suficiente sobre inotify.

Nota:

Esto se ejecutará en una estación de trabajo, no en un servidor. Su objetivo principal es sincronizar los cambios (potencialmente en un sistema de archivos completo) entre un cliente y un servidor remoto.

Respuesta aceptada:

Cuando read() un inotify fd, el name El campo de la estructura devuelta le indica qué archivo se modificó en relación con el directorio que se está viendo, por lo que no debería tener que registrar todos los archivos en un directorio después del evento.

Ver http://linux.die.net/man/7/inotify

Específicamente:

struct inotify_event {
    int      wd;       /* Watch descriptor */
    uint32_t mask;     /* Mask of events */
    uint32_t cookie;   /* Unique cookie associating related
                          events (for rename(2)) */
    uint32_t len;      /* Size of 'name' field */
    char     name[];   /* Optional null-terminated name */
};

El campo de nombre solo está presente cuando se devuelve un evento para un archivo
dentro de un directorio observado; identifica la ruta del archivo relativa
al directorio observado. Este nombre de ruta termina en nulo y puede
incluir más bytes nulos para alinear las lecturas posteriores con un límite de dirección
adecuado.


Linux
  1. ¿Diferencia de cálculo de tamaño de directorio?

  2. ¿Usando Inotify para monitorear el acceso a un archivo?

  3. Obtenga el archivo más reciente en un directorio en Linux

  4. mkdir -p falla cuando existe un directorio

  5. Volumen de archivo único montado como directorio en Docker

8 ejemplos de comandos Stat en Linux

Comando Stat en Linux

Explicación del comando Stat de Linux

Exclusión de directorio al crear un archivo .tar.gz

Bash:¿No existe tal archivo o directorio?

touch:no se puede tocar `foo':No existe tal archivo o directorio