GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Effizienz vieler Inotify-Uhren oder Statistikaufrufe?

Ich entwickle Software, die inotify verwendet, um Änderungen an einer großen Menge von Dateien (Zehn- bis Hunderttausende von Dateien) zu verfolgen. Ich bin auf diese Ideen gekommen:

  • eine Überwachung pro Datei
  • eine Überwachung pro übergeordnetem Verzeichnis
  • vermeiden Sie Inotify und scannen Sie die fs regelmäßig auf Änderungen (nicht bevorzugt)

Ich werde eine Datenbank mit allen Dateien haben, die ich beobachte, und einige grundlegende Statistikinformationen (wie Zeit und Größe), aber ich müsste jede Datei in diesem Verzeichnis mit Statistikdaten versehen, bis ich diejenige gefunden habe, die sich geändert hat.

Was wäre schneller, Tonnen (über 100.000) Inotify-Uhren oder Tonnen von Statistikaufrufen?

Ich denke, dass es besser wäre, die Anzahl der Statistikaufrufe zu reduzieren, aber ich weiß nicht genug über inotify.

Hinweis:

Dies wird auf einer Workstation ausgeführt, nicht auf einem Server. Sein Hauptzweck besteht darin, Änderungen (möglicherweise an einem gesamten Dateisystem) zwischen einem Client und einem Remote-Server zu synchronisieren.

Akzeptierte Antwort:

Wenn Sie read() ein inotify fd, der name Das Feld der zurückgegebenen Struktur teilt Ihnen mit, welche Datei relativ zum überwachten Verzeichnis geändert wurde, sodass Sie nach dem Ereignis nicht jede Datei in einem Verzeichnis angeben müssen.

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

Konkret:

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

Das Namensfeld ist nur vorhanden, wenn ein Ereignis für eine Datei
innerhalb eines überwachten Verzeichnisses zurückgegeben wird; es identifiziert den Dateipfadnamen relativ
zum überwachten Verzeichnis. Dieser Pfadname ist nullterminiert und kann
weitere Nullbytes enthalten, um nachfolgende Lesevorgänge an einer geeigneten
Adressgrenze auszurichten.


Linux
  1. Unterschied bei der Berechnung der Verzeichnisgröße?

  2. /etc/sudoers kann nicht angezeigt werden:Keine solche Datei oder Verzeichnis?

  3. Entfernen Sie einen symbolischen Link zu einem Verzeichnis

  4. Holen Sie sich die neueste Datei in einem Verzeichnis unter Linux

  5. Ausschließen des Verzeichnisses beim Erstellen einer .tar.gz-Datei

8 Beispiele für Stat-Befehle unter Linux

Stat-Befehl unter Linux

Linux-Stat-Befehl erklärt

sys/types.h:Keine solche Datei oder Verzeichnis

Was ist `S_ISREG()` und was macht es?

Fehlende Inotify-Ereignisse (im .git-Verzeichnis)