Heim > Betrieb und Instandhaltung > Betrieb und Wartung von Linux > So stellen Sie eine sichere Datenübertragung unter Linux sicher

So stellen Sie eine sichere Datenübertragung unter Linux sicher

步履不停
Freigeben: 2019-07-06 09:59:33
Original
3540 Leute haben es durchsucht

So stellen Sie eine sichere Datenübertragung unter Linux sicher

Hintergrund

In vielen IO-Szenarien müssen wir häufig sicherstellen, dass die Daten sicher auf die Festplatte geschrieben wurden, damit sie nach dem Herunterfahren des Systems gelesen werden können heruntergefahren und neu gestartet. Wir alle wissen jedoch, dass der E/A-Pfad des Linux-Systems immer noch sehr kompliziert ist und in viele Schichten unterteilt ist. Jede Schicht verfügt möglicherweise über Puffer, um das Lesen und Schreiben von E/A zu beschleunigen. Gleichzeitig verfügen Benutzermodusanwendungen und Bibliotheksfunktionen möglicherweise auch über eigene Puffer, was den E/A-Pfad etwas komplexer macht. Es ist ersichtlich, dass es nicht nur darum geht, write/fwrite anzupassen, wenn Sie sicherstellen möchten, dass Daten sicher auf die Festplatte geschrieben werden.

Was also tun? Viele Leute werden an viele Möglichkeiten denken, wie zum Beispiel: fflush(), fsync(), fdatasync(), sync(), open() unter Verwendung der Flags O_DIRECT oder O_SYNC usw. Nun, diese Mittel (oder eine Kombination davon) können tatsächlich die sichere Persistenz von Daten gewährleisten. Was ist also der Unterschied zwischen ihnen? Was ist der Unterschied zwischen fflush() und fsync()? Was bedeutet O_DIRECT? Kann es eine sichere Datenpersistenz gewährleisten? Was ist der Unterschied zwischen O_DIRECT und O_SYNC? Was ist mit O_SYNC und fsync()? Kann fsync die Funktionen von msync vervollständigen? In diesem Artikel wird versucht, die Funktionen und Unterschiede dieser Konzepte zu verstehen und zu erklären.

Linux IO

Es heißt, ein Bild sagt mehr als tausend Worte. Um den Unterschied zwischen diesen Konzepten klar zu analysieren, habe ich Schauen Sie genau hin, es sollte möglich sein, ihre Funktionen und Unterschiede zu erkennen.

So stellen Sie eine sichere Datenübertragung unter Linux sicher

Hier konzentrieren wir uns auf O_DIRECT und O_SYNC. Als Erstes muss klargestellt werden, dass O_DIRECT nur bedeutet, dass die Daten nicht durch den Seitencache geleitet werden (wird im Allgemeinen im Benutzermodus verwendet). um den Puffer zu verwalten), sondern direkt an die Blockgeräteschicht senden, aber nicht synchron darauf warten, dass die Daten sicher auf die Festplatte geschrieben werden, bevor sie zurückgegeben werden (z. B. können die Daten immer noch auf der Blockschicht oder in der Festplatte selbst in der Warteschlange stehen). Cache). Was das O_SYNC-Flag betrifft, werden die Daten zwar weiterhin in den Seitencache geschrieben, zu diesem Zeitpunkt wird jedoch die Durchschreibstrategie übernommen und die Daten werden synchron zurückgegeben, bis die Daten sicher auf die Festplatte geschrieben werden. Wenn O_DIRECT und O_SYNC gleichzeitig verwendet werden, bedeutet dies, dass die Daten nicht den Seitencache durchlaufen und darauf warten, dass die Daten sicher auf die Festplatte geschrieben werden, bevor sie zurückkehren. Natürlich ist die E/A-Leistung sehr hoch niedrig.

Da O_DIRECT den Seitencache umgeht, kann es zu Dateninkonsistenzen kommen, wenn ein anderer Prozess die normale Methode zum Lesen der Datei verwendet.

Um eine zusätzliche Erklärung zu liefern, werde ich hier einige Informationen veröffentlichen, die ich während der Diskussion gelesen habe. Die erste besteht darin, den offenen Systemaufruf zu zitieren: http://man7.org/linux/man-pages/man2/open.2.html Beschreibung der zugehörigen Parameter:

So stellen Sie eine sichere Datenübertragung unter Linux sicher

So stellen Sie eine sichere Datenübertragung unter Linux sicher

So stellen Sie eine sichere Datenübertragung unter Linux sicher

Und innodb-bezogene Dokumente: https://lwn.net/Articles/457667/

So stellen Sie eine sichere Datenübertragung unter Linux sicher

Der Unterschied zwischen fsync und fdatasync: http://man7.org/linux/man-pages/man2/fsync.2.html


So stellen Sie eine sichere Datenübertragung unter Linux sicherSo stellen Sie eine sichere Datenübertragung unter Linux sicher

msync:http://man7.org/linux/man-pages/man2/msync.2.html

So stellen Sie eine sichere Datenübertragung unter Linux sicher

DAX

Tatsächlich gibt es einen anderen IO-Modus, nämlich DAX (Direct Access). Sieht er ähnlich aus wie O_DIRECT? Dieser Modus erfordert Unterstützung sowohl vom Dateisystem als auch vom Blocktreiber. Er wird im Allgemeinen für nichtflüchtigen Speicher verwendet. Er umgeht im Wesentlichen den Seitencache und betreibt das Gerät direkt. In diesem Artikel werde ich DAX nicht ausführlich besprechen. Später werde ich einen Ramdisk-Blockgerätetreiber schreiben, der den DAX-Modus unterstützt, ihn dann in ein ext4-Dateisystem formatieren und im -o-DAX-Modus bereitstellen und dann den E/A-Pfad von DAX untersuchen Detail.

Weitere Linux-Artikel finden Sie in der Spalte Linux-Tutorial, um mehr darüber zu erfahren!

Das obige ist der detaillierte Inhalt vonSo stellen Sie eine sichere Datenübertragung unter Linux sicher. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage