2009-02-11 7 views
27

Ich arbeite an einem Daemon, der Dateiereignisse über inotify überwacht, um verschiedene Typen von Ereignissen auszulösen, wenn auf Dateien zugegriffen wird. Ich habe gelesen, dass Uhren ein wenig teuer sind, weil der Kernel den vollständigen Pfadnamen jeder betrachteten Datei speichert.Was ist eine angemessene Menge von inotify Uhren mit Linux?

Wie viele Uhren wären zu viele?

Bearbeiten: Meistens, ich frage mich .. haben Sie jemals einen spürbaren Leistungseinbruch gesehen, wenn ja, bei wie vielen Uhren ist es passiert? Ja, ich muss/rekursiv überwachen (es ist jedoch ein minimales Bootstrapped-System).

Antwort

17

AFAIK der Kernel speichert nicht den Pfadnamen, sondern den Inode. Trotzdem gibt es auf einem 32-Bit-System 540 Bytes pro Watch. Doppelt so viel auf 64bit.

Ich weiß von Lsyncd (vielleicht willst du das überprüfen?) Leute, die eine Million Uhren haben. Es isst nur ein Gigabyte Speicher.

6

100 Milliarden Billionen Gazillionen wären wahrscheinlich zu viele. Kernel Korner - Intro to inotify erwähnt "Tausende von Uhren", so dass zumindest diese Zahl kein Problem sein sollte.

23

Sie die Systemgrenzen durch das Lesen /proc/sys/fs/inotify/max_user_instances (maximale Anzahl von inotify „Objekte“) und /proc/sys/fs/inotify/max_user_watches (maximale Anzahl von Dateien beobachtet) finden können, also wenn Sie diese Zahlen nicht überschreiten, es gibt zu viele ;-) Die maximale Anzahl der Uhren ist in der Regel mehrere zehntausend oder höher - auf meinem System, 262143 - das ist wahrscheinlich mehr als Sie jemals brauchen würden, wenn Sie versuchen, jede Datei in einem Dateisystem zu sehen, aber Sie sollten das nicht tun. Ich würde sagen, versuchen Sie einfach, nicht mehr inotify Uhren zu verwenden, als Sie brauchen, und sorgen Sie sich nicht darum, es sei denn, Sie bemerken eine signifikante Abnahme der Leistung.

+1

Warum sollte ich nicht inotify verwenden, um das gesamte Dateisystem zu überwachen? Kannst du konkret sein? – Blub

+0

@Blub Nun, warum möchten Sie es tun? Es sei denn, Sie debuggen eine Dateisystemimplementierung, ich kann nicht an einen guten Anwendungsfall denken, und wenn es das ist, was Sie tun, ist es wahrscheinlich besser, in den Dateisystemcode selbst einzuhaken. Ganz zu schweigen davon, dass inotify wahrscheinlich nicht genug Uhren haben wird, um wirklich alles auf einem Dateisystem mit einem modernen Betriebssystem zu beobachten. Aber ich denke, wenn es funktioniert (d. H., Wenn Sie mit einem reduzierten Satz von Dateien arbeiten), ist es wahrscheinlich nicht das Schlimmste. Solange Ihr Computer damit umgehen kann, wird nichts AFAIK beschädigen. –

+2

Ich möchte ein Volume indizieren und daher, wenn sich eine Datei irgendwo ändert, muss ich meinen Index aktualisieren. Ich habe mir den ext4-Quellcode angeschaut, er ist nicht genau für Benutzer-Add-Ins gedacht. Es gibt nur ein dumpe2fs-Dienstprogramm, das "Blöcke" drucken kann, aber noch keine Idee, wie man die tatsächlichen Dateipfade dorthin holt. Und trotzdem .. Ich müsste dieses Dienstprogramm ständig ausführen, mindestens einmal pro Sekunde, um den Index neu zu updaten. Nicht gerade toll, ich würde lieber etwas zurück bekommen - wie inotify. – Blub

9

Meine 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 verwendet etwa 130M des Gedächtnisses.

Ich benutze lsyncd, um einige Verzeichnisse synchron mit dem Disaster Recovery Server zu halten.

Kein Leistungseinbruch/-strafe auf dem Hauptserver.

+4

Ich denke, Sie sehen lsyncd Speicherverbrauch und nicht inotify ...inotify verwendet Kernel-Speicherplatz ... – confiq