Ok, você pede experiências, isso torna a questão um pouco subjetiva e argumentativa, mas passável.
Linus disse que, referindo-se aos usos que as pessoas geralmente atribuem ao O_DIRECT, e para esses usos, o IMO Linus está mais correto. Mesmo se você direcionar E / S, não poderá transferir dados de / para dispositivos diretamente para suas instruções de programa, precisará de um buffer preenchido (pelo programa ou dispositivo) e transferido por meio de uma chamada de sistema para a outra extremidade. Além disso, para torná-lo eficiente, você não vai querer reler algo que acabou de ler, caso precise dele novamente. Então você precisa de algum tipo de cache ... e é exatamente isso que o kernel fornece sem O_DIRECT, um cache de páginas! Por que não usar isso? Ele também vem com benefícios se mais processos quiserem acessar o mesmo arquivo ao mesmo tempo, seria um desastre com O_DIRECT.
Dito isto, O_DIRECT tem seus usos: Se por algum motivo você precisar obter dados diretamente do dispositivo de bloco. Não tem nada a ver com desempenho.
As pessoas que usam O_DIRECT para desempenho geralmente vêm de sistemas com algoritmos de cache de página inválidos, ou sem mecanismos de conselhos POSIX, ou até mesmo pessoas repetindo sem pensar o que outras pessoas disseram. Para evitar esses problemas, O_DIRECT foi uma solução. O Linux, OTOH, tem a filosofia de que você deve corrigir o verdadeiro problema subjacente, e o problema subjacente eram os sistemas operacionais que faziam um trabalho ruim com o cache de páginas.
Eu usei O_DIRECT para uma implementação simples de cat para encontrar uma memória erro na minha máquina. Este é um uso válido para O_DIRECT. Isso não tem nada a ver com desempenho.