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

O_DIRECT vs. O_SYNC unter Linux/FreeBSD

Bei aktuellen Festplatten gibt es nein Gewissheit, dass eine Datei tatsächlich auf die Festplatte geschrieben wird, selbst wenn die Festplatte den Schreibvorgang als abgeschlossen an das Betriebssystem meldet! Dies liegt am eingebauten Cache im Laufwerk.

Auf freeBSD können Sie dies deaktivieren, indem Sie den kern.cam.ada.write_cache setzen sysctl auf 0. Dies wird degradieren Schreibleistung erheblich . Zuletzt gemessen (WDC WD5001ABYS-01YNA0 Festplatte auf ICH-7 Chipsatz, FreeBSD 8.1 AMD64), kontinuierliche Schreibleistung (gemessen mit dd if=/dev/zero of=/tmp/foo bs=10M count=1000 ) von 75.000.000 Byte/s auf 12.900.000 Byte/s gesunken.

Wenn Sie absolut sicher sein wollen, dass Ihre Dateien geschrieben werden;

  • Schreibcache mit sysctl kern.cam.ada.write_cache=0 deaktivieren gefolgt von camcontrol reset <bus>:<target>:<lun> .
  • Öffnen Sie die Datei mit dem O_SYNC Möglichkeit.

Hinweis:

  • Ihre Schreibleistung (auf einer HDD) wird jetzt absolut beschissen sein.
  • Mounten Sie die Partition nicht mit dem sync Möglichkeit; das wird alle verursachen E/A (einschließlich Lesevorgänge) müssen synchron ausgeführt werden.
  • Verwenden Sie nicht O_DIRECT . Es wird versuchen, den Cache vollständig zu umgehen. Das wird wahrscheinlich auch den Lesefluss beeinflussen.

O_DIRECT existiert im Grunde nur für Oracle, um die Puffer-Cache-Schicht des Kernels zu umgehen und sein eigenes Caching durchzuführen. Es hat eine schlecht definierte Semantik, willkürliche Einschränkungen hinsichtlich der Größe und Ausrichtung der Lesevorgänge, die Sie ausführen können, und sollte im Allgemeinen nicht verwendet werden. O_SYNC soll Ihnen die gewünschten Effekte liefern, aber ohne ein zugrunde liegendes Dateisystem, das gegen Stromausfälle oder Abstürze robust ist, reicht es möglicherweise immer noch nicht für Ihre Anforderungen aus.


Linux
  1. So schreiben Sie mit dem Linux-Befehl Text auf ein Bild

  2. So löschen Sie den Speichercache in Linux

  3. Linux – Verwendung von O_direct unter Linux?

  4. So verwenden Sie Grep-Befehle unter Linux oder FreeBSD

  5. Wie schreibe ich eine Datei mit C in Linux?

Schreiben Sie ein Ratespiel in ncurses unter Linux

So löschen oder leeren Sie den DNS-Cache in Linux

So leeren Sie den DNS-Cache unter Linux

Wie lösche ich den DNS-Cache unter Linux?

Wie man ein C-Programm unter Linux schreibt und ausführt

Schreibbefehl in Linux mit Beispielen