[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Détecter un changement dans un répertoire






De: "Basile Starynkevitch" <basile@starynkevitch.net>
À: "Liste Debian" <debian-user-french@lists.debian.org>
Envoyé: Jeudi 12 Janvier 2023 20:59:25
Objet: Re: Détecter un changement dans un répertoire


On 12/01/2023 20:16, RogerT wrote:
Pourquoi : pour prendre des décisions de traitement sur évènement « fichier créé/modifié/supprimé/etc. ».

FS : ext4 ou btrfs ou nfs.

NFS va poser problème. Il est connu et documenté que inotify ne fonctionne pas avec NFS, mais avec des systèmes de fichiers locaux et natifs à Linux (dont ext4 et btrfs).

Ok. il suffit de ne pas utiliser NFS.
Merci.



Qté de fichiers : il y a différents cas ; 
1/ surveiller un répertoire où sont déposés des fichiers régulièrement, qui vont en être enlevés après traitement ; ici, le nombre de fichiers présents à chaque instant sera de l’ordre d’une centaine, voire d’un millier pour constituer une file d’attente si le traitement est long et que le flux de dépôt de fichiers augmente.
Là, je crois que inotify et ses dérivés devraient faire l’affaire sans atteindre ses limites qui serait de 5E5 fichiers à surveiller.

A mon avis, c'est faisable programmatiquement (en C++ ou Rust ou C ou Ocaml) sur une machine Linux suffisamment puissante (disons 32Go de RAM au moins, et 8 cœurs). Il faut lire https://man7.org/linux/man-pages/man7/inotify.7.html où on peut lire les limitations:

       The inotify API does not report file accesses and modifications
       that may occur because of mmap(2), msync(2), and munmap(2).
Pour 100-1.000 fichiers, aucun souci.
32 Go/8 coeurs pour 500.000 fichiers ? Tant que ça ?
L'article que j'ai cité aujoud'hui parle de 1 ko/fichier soit 500 Mo pour traiter 5E5 fichiers,  ce qui est considérable pour de nombreuses applications.
Citation :
Cet article de janvier 2022 apporte des réponses sur la limite et la récursivité :
« Here, the system allows 524288 (2^19) watches. »
« Because each watch is a structure, available memory is also a bottleneck for using inotify.
In fact, a watch can take up to 1KB of space. This means a million watches could result in 1GB of extra RAM usage. »



2/ multiplier les surveillances pour différentes applications ; là je dirais de l’ordre de 10E4-10E6 fichiers maximum. Je ne vois pas des milliards de fichiers à surveiller. 
Là, inotify devrait encore pouvoir servir si on ne dépasse pas sa fameuse limite.

Mais dix millions de fichiers à surveiller, ça me parait beaucoup. Oui bien alors, faire une programmation fine (multi-thread, mulit-processus) qui prendra du temps (des mois de travail) et nécessiterait un ordinateur coûteux (serveur ou desktop à 10k€, pas un NAS à 500€).

Erreur de formulation, je voulais dire E4-E6 ou 10^4-10^6 (10.000- 1.000.000). Maximum.
On peut et on doit s'imposer la limite de inotify annoncée de  5E5 (500.000).


Je ne crois pas à une solution simple, rapide (basée sur inotify) et 100% fiable pour dix millions de fichiers, ou bien alors il faut développer un gros logiciel .... Le diable est dans les détails.

Et 100.000-500.000 ?

Bonne soirée


Pour ma part, je cherche des partenaires intéressés par le projet logiciel libre RefPerSys en http://refpersys.org/ - contactez moi alors par courriel (peut-être même au bureau CEA LIST en basile.starynkevitch@cea.fr)

Bonne soirée.


-- 
Basile Starynkevitch                  <basile@starynkevitch.net>
(only mine opinions / les opinions sont miennes uniquement)
92340 Bourg-la-Reine, France
web page: starynkevitch.net/Basile/



Reply to: