GNU/Linux >> Tutoriales Linux >  >> Linux

O_DIRECT frente a O_SYNC en Linux/FreeBSD

Con los discos duros actuales, no ¡Garantía de que un archivo se escribe realmente en el disco, incluso si el disco informa que la escritura se completó al sistema operativo! Esto se debe a la memoria caché integrada en la unidad.

En freeBSD puede deshabilitar esto configurando el kern.cam.ada.write_cache sysctl a 0. Esto degradará rendimiento de escritura significativamente . La última vez que lo medí (disco duro WDC WD5001ABYS-01YNA0 en un chipset ICH-7, FreeBSD 8.1 AMD64), rendimiento de escritura continuo (medido con dd if=/dev/zero of=/tmp/foo bs=10M count=1000 ) se redujo de 75 000 000 bytes/seg a 12 900 000 bytes/seg.

Si quiere estar absolutamente seguro de que sus archivos están escritos;

  • Deshabilitar el almacenamiento en caché de escritura con sysctl kern.cam.ada.write_cache=0 seguido de camcontrol reset <bus>:<target>:<lun> .
  • Abra el archivo con el O_SYNC opción.

Nota:

  • Tu rendimiento de escritura (en un HDD) ahora será absolutamente malo.
  • No monte la partición con el sync opción; que causará todas La E/S (incluidas las lecturas) se realizará de forma síncrona.
  • No use O_DIRECT . Intentará omitir el caché por completo. Eso probablemente también influirá en las lecturas.

O_DIRECT básicamente existe únicamente para que Oracle pase por alto la capa de caché del búfer del kernel y haga su propio almacenamiento en caché. Tiene una semántica mal definida, limitaciones arbitrarias en el tamaño y la alineación de las lecturas que puede realizar y, en general, no debe usarse. O_SYNC se supone que debe brindarle los efectos que desea, pero sin un sistema de archivos subyacente que sea robusto contra cortes de energía o fallas, aún podría no ser suficiente para sus necesidades.


Linux
  1. Cómo borrar la caché de memoria en Linux

  2. Linux – ¿Uso de O_direct en Linux?

  3. ¿Cómo escribir un archivo con C en Linux?

  4. probando sin espacio en disco en linux

  5. Obtenga la longitud de MP3 en Linux / FreeBSD

Escribe un juego de adivinanzas en ncurses en Linux

Cómo borrar o vaciar la caché de DNS en Linux

Cómo vaciar la caché de DNS en Linux

¿Cómo vaciar la caché de DNS en Linux?

Cómo escribir y ejecutar un programa C en Linux

escribir comando en Linux con ejemplos