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

Linux – Verwendung von O_direct unter Linux?

Wenn diese Frage zu programmiererorientiert ist, lassen Sie es mich wissen. Ich frage mich, ob es Leute gibt, die mit dem O_DIRECT-Flag für den Systemaufruf open() unter Linux 2.6 vertraut sind? Linus verachtet seine Verwendung, jedoch scheint das Schreiben von Dateien mit hoher Leistung auf seine Verwendung hinzudeuten. Ich würde gerne von realen Erfahrungen und Empfehlungen wissen.

Weitere Informationen:
Die Anwendung, die ich verwende, macht behält seinen eigenen Cache bei und erreicht dabei eine durchschnittliche Geschwindigkeit von 5x oder mehr. Beim Schreiben in eine Datei muss der Inhalt des Caches in den Dateisystemcache geschrieben werden, was redundant erscheint und ein Leistungsproblem darstellt.

Akzeptierte Antwort:

Ok, du fragst nach Erfahrungen, das macht die Frage etwas subjektiv und streitsüchtig, aber passabel.

Linus sagte, dass Linus in Bezug auf die Verwendungen, die die Leute normalerweise O_DIRECT zuschreiben, und für diese Verwendungen IMO größtenteils richtig ist. Selbst wenn Sie direkte E/A ausführen, können Sie Daten nicht direkt zu/von Geräten in Ihre Programmanweisungen übertragen, Sie benötigen einen Puffer, der (durch das Programm oder das Gerät) gefüllt und durch einen Systemaufruf an das andere Ende übertragen wird. Um es effizient zu machen, werden Sie auch etwas, das Sie gerade bereits gelesen haben, nicht noch einmal lesen wollen, falls Sie es noch einmal brauchen. Sie brauchen also eine Art Cache ... und genau das bietet der Kernel ohne O_DIRECT, einen Seiten-Cache! Warum das nicht nutzen? Es hat auch Vorteile, wenn mehrere Prozesse gleichzeitig auf dieselbe Datei zugreifen wollen, es wäre eine Katastrophe mit O_DIRECT.

Allerdings hat O_DIRECT seinen Nutzen:Wenn Sie aus irgendeinem Grund Daten direkt vom Blockgerät erhalten müssen. Das hat nichts mit Leistung zu tun.

Leute, die O_DIRECT für die Leistung verwenden, kommen normalerweise von Systemen mit schlechten Page-Cache-Algorithmen oder ohne POSIX-Beratungsmechanismen oder sogar von Leuten, die gedankenlos wiederholen, was andere Leute gesagt haben. Um diese Probleme zu vermeiden, war O_DIRECT eine Lösung. Linux, OTOH, hat die Philosophie, dass Sie das wirklich zugrunde liegende Problem beheben sollten, und das zugrunde liegende Problem waren Betriebssysteme, die beim Seiten-Caching schlechte Arbeit geleistet haben.

Ich habe O_DIRECT für eine einfache Implementierung von cat verwendet, um einen Speicherfehler in meiner Maschine zu finden. Dies ist eine gültige Verwendung für O_DIRECT. Das hatte nichts mit Leistung zu tun.

Verwandt:OpenVPN – Socket-Bind auf lokaler Adresse fehlgeschlagen [AF_INET] IP:1194:Angeforderte Adresse kann nicht zugewiesen werden?
Linux
  1. So verwenden Sie BusyBox unter Linux

  2. So verwenden Sie den Su-Befehl unter Linux

  3. Es ist möglich, eine .dll unter Linux zu verwenden

  4. O_DIRECT vs. O_SYNC unter Linux/FreeBSD

  5. Verwenden Sie eine C-Bibliothek in Swift unter Linux

So verwenden Sie den Disown-Befehl unter Linux

So verwenden Sie den Linux-SS-Befehl

So verwenden Sie den Linux-nohup-Befehl

So verwenden Sie Traceroute unter Kali Linux

So verwenden Sie den Linux-Bildschirm

So verwenden Sie du Command unter Linux