Ok, você pede experiências, isso torna a pergunta um pouco subjetiva e argumentativa, mas aceitá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 que você direcione a E / S, não pode transferir dados de / para dispositivos diretamente para as instruções do programa, você precisa de um buffer que seja preenchido (pelo programa ou pelo dispositivo) e transferido através de uma chamada do sistema para a outra extremidade. Além disso, para torná-lo eficiente, não será necessário reler algo que você já leu, caso precise novamente. Então você precisa de algum tipo de cache ... e é exatamente isso que o kernel fornece sem O_DIRECT, um cache de página! Por que não usar isso? Ele também traz benefícios, se mais processos quiserem acessar o mesmo arquivo simultaneamente, seria um desastre com o 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 O_DIRECT para desempenho geralmente vêm de sistemas com algoritmos de cache de página incorretos, ou sem mecanismos de aconselhamento POSIX, ou mesmo pessoas repetindo sem pensar o que outras pessoas disseram. Para evitar esses problemas, O_DIRECT era uma solução. O Linux, OTOH, tem a filosofia de que você deve corrigir o problema subjacente real, e o problema subjacente foram os SOs que fizeram um trabalho ruim com o cache da página.
Eu usei O_DIRECT para uma implementação simples do gato para encontrar um erro de memória na minha máquina. Este é um uso válido para O_DIRECT. Isso não tinha nada a ver com desempenho.