Ok, pides experiencias, esto hace que la pregunta sea un poco subjetiva y argumentativa, pero aceptable.
Linus dijo que refiriéndose a los usos que las personas generalmente atribuyen a O_DIRECT, y para esos usos, IMO Linus es en su mayoría correcto. Incluso si realiza una E / S directa, no puede transferir datos a / desde dispositivos directamente a las declaraciones de su programa, necesita un búfer que se llena (por el programa o el dispositivo) y se transfiere mediante una llamada del sistema al otro extremo. Además, para que sea eficiente, no querrá volver a leer algo que acaba de leer, en caso de que lo necesite nuevamente. Por lo tanto, necesita algún tipo de caché ... ¡y es exactamente eso lo que el núcleo proporciona sin O_DIRECT, un caché de página! ¿Por qué no usar eso? También viene con beneficios si más procesos desean acceder al mismo archivo al mismo tiempo, sería un desastre con O_DIRECT.
Dicho esto, O_DIRECT tiene sus usos: si por alguna razón necesita obtener datos directamente del 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 la página.
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 tenía nada que ver con el rendimiento.