GNU/Linux >> Tutoriales Linux >  >> Linux

Linux – ¿Uso de O_direct en Linux?

Si esta pregunta está demasiado orientada al programador, házmelo saber. Me pregunto si hay personas familiarizadas con el indicador O_DIRECT para la llamada al sistema open() en Linux 2.6. Linus menosprecia su uso, sin embargo, la escritura de archivos de alto rendimiento parece indicar su uso. Me gustaría saber de alguna experiencia del mundo real y recomendaciones.

Más información:
La aplicación que estoy usando mantiene su propio caché y, al hacerlo, alcanza un promedio de 5x o más de velocidad. Al escribir en un archivo, el contenido de la memoria caché debe escribirse en la memoria caché del sistema de archivos, lo que parece redundante y un problema de rendimiento.

Respuesta aceptada:

Ok, pides experiencias, esto hace que la pregunta sea un poco subjetiva y argumentativa, pero pasable.

Linus dijo que en referencia a los usos que la gente suele atribuir a O_DIRECT, y para esos usos, IMO Linus es mayormente correcto. Incluso si realiza E/S directa, no puede transferir datos a/desde dispositivos directamente a las declaraciones de su programa, necesita un búfer que se llene (por el programa o el dispositivo) y se transfiera a través de una llamada al sistema al otro extremo. Además, para que sea eficiente, no querrás volver a leer algo que acabas de leer, en caso de que lo necesites de nuevo. Así que necesitas algún tipo de caché... y es exactamente eso lo que proporciona el núcleo sin O_DIRECT, ¡un caché de página! ¿Por qué no usar eso? También viene con beneficios si más procesos quieren acceder al mismo archivo al mismo tiempo, sería un desastre con O_DIRECT.

Habiendo dicho eso, O_DIRECT tiene sus usos:si por alguna razón necesita obtener datos directamente desde el dispositivo de bloque. No tiene nada que ver con el rendimiento.

Las personas que usan O_DIRECT para el rendimiento generalmente provienen de sistemas con algoritmos de caché de página defectuosos, o sin mecanismos de asesoramiento POSIX, o incluso personas que repiten sin pensar lo que otras personas han dicho. Para evitar estos problemas, O_DIRECT fue una solución. Linux, OTOH, tiene la filosofía de que debe solucionar el problema subyacente real, y el problema subyacente fueron los sistemas operativos que hicieron un mal trabajo con el almacenamiento en caché de páginas.

Usé O_DIRECT para una implementación simple de cat para encontrar un error de memoria en mi máquina. Este es un uso válido para O_DIRECT. Eso no tiene nada que ver con el rendimiento.

Relacionado:OpenVPN:falla el enlace de socket en la dirección local [AF_INET] IP:1194:¿No se puede asignar la dirección solicitada?
Linux
  1. Cómo usar BusyBox en Linux

  2. 5 razones para usar Linux en 2020

  3. Cómo uso cron en Linux

  4. Cómo usar BUSCAR en Linux

  5. Cómo usar Descomprimir en Linux

Cómo usar el comando Disown en Linux

Cómo usar el comando SS de Linux

Cómo usar el comando nohup de Linux

Cómo usar traceroute en Kali Linux

Cómo usar la pantalla de Linux

Cómo usar du Command en Linux