GNU/Linux >> Tutoriels Linux >  >> Linux

Efficacité de nombreuses montres Inotify ou appels statistiques ?

Je développe un logiciel qui utilisera inotify pour suivre les modifications sur une grande quantité de fichiers (des dizaines à des centaines de milliers de fichiers). J'ai trouvé ces idées :

  • une montre par fichier
  • une surveillance par répertoire parent
  • évitez inotify et analysez périodiquement le fs pour les changements (pas préféré)

J'aurai une base de données de tous les fichiers que je regarde et quelques informations statistiques de base (comme mtime et taille), cependant, je devrai stat chaque fichier dans ce répertoire jusqu'à ce que je trouve celui qui a changé.

Qu'est-ce qui serait le plus rapide, des tonnes (plus de 100 000) de montres inotify ou des tonnes d'appels de statistiques ?

Je pense qu'il serait préférable de réduire le nombre d'appels de statistiques, mais je n'en sais pas assez sur inotify.

Remarque :

Cela fonctionnera sur un poste de travail, pas sur un serveur. Son objectif principal est de synchroniser les modifications (potentiellement sur un système de fichiers entier) entre un client et un serveur distant.

Réponse acceptée :

Lorsque vous read() un fd inotify, le name Le champ de la structure renvoyée vous indique quel fichier a été modifié par rapport au répertoire surveillé, vous ne devriez donc pas avoir à stat chaque fichier dans un répertoire après l'événement.

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

Plus précisément :

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 */
};

Le champ de nom n'est présent que lorsqu'un événement est renvoyé pour un fichier
à l'intérieur d'un répertoire surveillé ; il identifie le chemin du fichier relatif
au répertoire surveillé. Ce nom de chemin se termine par un caractère nul et peut
inclure d'autres octets nuls pour aligner les lectures suivantes sur une limite d'adresse
appropriée.


Linux
  1. Différence de calcul de taille de répertoire ?

  2. Utiliser Inotify pour surveiller l'accès à un fichier ?

  3. Linux – But du répertoire /net ?

  4. Impossible de Stat /etc/sudoers :aucun fichier ou répertoire de ce type ?

  5. Aide-mémoire sur les autorisations de fichiers/répertoires Linux

8 exemples de commandes Stat sous Linux

Commande Stat sous Linux

Explication de la commande Linux Stat

Obtenir le fichier le plus récent dans un répertoire sous Linux

Exclure le répertoire lors de la création d'un fichier .tar.gz

Volume de fichier unique monté en tant que répertoire dans Docker