Dateiunterstützte, gesperrte gemeinsame Speicher- und Festplatteninteraktion


7

Varnish, ein HTTP-Beschleuniger, verwendet ein dateibasiertes SHM-Protokoll mit ~ 80 MB, das mlock () im Speicher gespeichert ist. In den Lackdokumenten wird empfohlen, die Datei auf tmpfs zu speichern, um unnötigen Festplattenzugriff zu vermeiden. Wenn jedoch die gesamte Datei im Speicher gesperrt ist, schreibt der Linux-Kernel dennoch in die Sicherungsdatei?

Ich habe versucht, dies mit inotify und fatrace zu überwachen. Da diese Interaktion jedoch vermutlich im gesamten Kernel stattfindet, war für diese Tools keine Dateiaktivität sichtbar. Es gibt eindeutig eine Art Update, das entweder an der Datei oder am Dateisystem stattfindet, da die Überwachung der Sicherungsdatei mit ls zeigte, dass sich die Dateizeit geändert hat, und sha1sum zeigte, dass sich der Inhalt geändert hat. Dies beinhaltet jedoch tatsächlich den Festplattenzugriff oder geschieht alles in Erinnerung?

Grundsätzlich versuche ich zu vermeiden, dass die tmpfs-Problemumgehung durchgeführt werden muss, da die Verwendung von SHM zum Sichern von SHM eine hässliche Problemumgehung für ein Problem darstellt, das möglicherweise gar nicht existiert.

Antworten:


4

Varnish scheint eine einfache Speicherzuordnungsdatei für den gemeinsam genutzten Speicher zu verwenden (anstelle von z shm_open. B. POSIX ). Aus der Quelle :

loghead = mmap(NULL, heritage.vsl_size,
    PROT_READ|PROT_WRITE,
    MAP_HASSEMAPHORE | MAP_NOSYNC | MAP_SHARED,
    heritage.vsl_fd, 0);

Fordert bei BSD MAP_NOSYNCden Kernel auf, die gemeinsam genutzten Daten nicht auf die Festplatte zu schreiben, es sei denn, dies wird erzwungen (z. B. um Speicher freizugeben). Wenn es auch blockiert ist, sollte das fast nie passieren. Leider unterstützt Linux nicht MAP_NOSYNC.

Daher schreibt Linux routinemäßig verschmutzte (geänderte) Seiten vom Cache auf die Festplatte. Wenn Sie den Cache auf ein tmpfs setzen, wird dies vermieden. Dies würde auch Varnish mit POSIX- oder SysV-Shared Memory tun (tatsächlich ist POSIX Shared Memory unter Linux mit einem gemounteten tmpfs implementiert /dev/shm, daher sollte die Verwendung von tmpfs in Ordnung sein).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.