Viele temporäre Dateien im Journaldateisystem?

Viele temporäre Dateien im Journaldateisystem?

Schnelles Schreiben und Löschen vieler Dateien

Ich werde über einen längeren Zeitraum viele temporäre Dateien pro Sekunde schreiben. Jede wird nach einigen Millisekunden gelöscht.

Angenommen, wir haben eine Bildverarbeitungssoftware, die Teilbilder einer schnellen Kamera verarbeitet, etwa 2000 pro Sekunde. Jedes davon wird in eine Datei geschrieben, dann wird die Datei ein wenig geändert, erneut gelesen und gelöscht – und das alles in ein paar Millisekunden.

Dies läuft derzeit auf einem tmpfsDateisystem, aber nehmen wir an, es kann nicht.
Und nein, ich kann nicht„Beheben Sie das Problem einfach auf diese Weise“, es wird für einige Legacy-Integrationen benötigt.

Wie kommt das Dateisystem damit zurecht?

Ich möchte verstehen, wie dies mit den Dateisystemoptionen interagiert. Insbesondere kann ich nicht verstehen, wie ein Dateisystemjournal damit interagiert.

Als naive Idee könnte man hoffen, dass die Daten nie die Festplatte berühren und selbst die Metadaten nicht. Nach dem Erstellen einer Datei und dem anschließenden Löschen sind die Daten doch dieselben, oder? Und nach dem Schreiben und Löschen des Namens im Verzeichnis ist das Verzeichnis auch dasselbe, oder?

Überraschende Effekte

Nein, falsch.

Ein Verzeichnis kann dieselben Dateinamen auf mehrere Arten darstellen, z. B. indem ein Ort wiederverwendet wird, um einen neuen Dateinamen zu speichern, oder indem ein anderer Ort wiederverwendet wird.
Das bedeutet, dass sich bei Schreibvorgängen auf einem Festplattenblock dieser möglicherweise geändert hat, ohne dass sich Änderungen auf Dateisystemebene ergeben haben. Daher muss er auf die Festplatte geschrieben werden.

Aber kann ich sicherstellen, dass es nicht für jede der vier Operationen einmal geschrieben wird? Und was ist mit dem Journal? Landen meine temporären Daten im Journal? Kann ich das verhindern?

Als Frage noch: Was muss ich dabei beachten bzw. bedenken?

Antwort1

Ich kann Ihnen die Theorie erklären, habe aber keine praktische Erfahrung. Ich habe gelesen, dass Dateien nur alle paar Sekunden vom Speicher auf die Festplatte übertragen werden und dass Dateien, die schnell genug entfernt werden, nie auf der Festplatte landen. Nicht einmal im Journal.

Ich bin nicht sicher, ob eine Datei volle 5 Sekunden vorhanden sein muss, um herausgeschoben zu werden, oder ob sie nur zufällig zum Zeitpunkt des Checkpointings vorhanden sein muss, was alle 5 Sekunden geschieht. Wahrscheinlich letzteres. Wenn das der Fall ist, werden einige Dateien auf die Festplatte gesaugt. Dies wird regelmäßig für kurze Momente geschehen.

Es gibt nur wenigeEinhängeoptionendas würde ich vorschlagen, zu untersuchen. Sie könnten diese Checkpointing-Momente beliebig selten machen, indem Sie das Intervall erhöhen, aber sie werden trotzdem auftreten. Außerdem hat die verzögerte Zuweisung den Nebeneffekt, dass Daten aus Gründen, die ich nicht erklären kann, auf die Festplatte verschoben werden. Ich weiß nicht mehr, wo ich davon gelesen habe.

  • commit=nrsec (Synchronisiert alle Daten und Metadaten alle nrsec Sekunden. Der Standardwert ist 5 Sekunden. Null bedeutet Standard.) auf Ext3
  • delalloc (Blockzuweisung bis zum Ausschreiben verschieben.) auf Ext4

Vorgeschlagene Lösung:Verwenden Sie ein Dateisystem im Arbeitsspeicher. Auf diese Weise können Sie sicher sein, dass nichts auf der Festplatte landet. Entweder tmpfs oder ramfs, es gibt einige Unterschiede, z. B. ob es auslagern kann oder über eine bestimmte Kapazität hinaus wächst. Ich weiß, dass dies im Grunde das ist, was Sie gerade verwenden. Es muss nicht /tmp sein, Sie können ein neues Dateisystem dieses Typs über jedem Verzeichnis erstellen.

http://www.thegeekstuff.com/2008/11/overview-of-ramfs-and-tmpfs-on-linux/

verwandte Informationen