Ok, Anda minta pengalaman, ini membuat pertanyaannya sedikit subjektif dan argumentatif, tapi lumayan.
Linus mengatakan bahwa merujuk pada penggunaan yang biasanya dikaitkan orang dengan O_DIRECT, dan untuk penggunaan itu, IMO Linus sebagian besar benar. Bahkan jika Anda melakukan I / O langsung, Anda tidak dapat mentransfer data ke / dari perangkat langsung ke pernyataan program Anda, Anda memerlukan buffer yang diisi (oleh program atau perangkat) dan ditransfer melalui panggilan sistem ke ujung lainnya. Juga, untuk membuatnya efisien, Anda tidak ingin membaca ulang sesuatu yang baru saja Anda baca, jika Anda membutuhkannya lagi. Jadi, Anda memerlukan semacam cache ... dan itu persisnya yang disediakan kernel tanpa O_DIRECT, cache halaman! Kenapa tidak menggunakannya? Itu juga datang dengan manfaat jika lebih banyak proses ingin mengakses file yang sama secara bersamaan, itu akan menjadi bencana dengan O_DIRECT.
Karena itu, O_DIRECT memiliki kegunaannya: Jika karena alasan tertentu Anda perlu mendapatkan data langsung dari perangkat blok. Itu tidak ada hubungannya dengan kinerja.
Orang-orang yang menggunakan O_DIRECT untuk kinerja biasanya berasal dari sistem dengan algoritma cache halaman yang buruk, atau tanpa mekanisme saran POSIX, atau bahkan orang-orang yang dengan ceroboh mengulangi apa yang dikatakan orang lain. Untuk menghindari masalah ini, O_DIRECT adalah solusinya. Linux, OTOH, memiliki filosofi bahwa Anda harus memperbaiki masalah mendasar yang sebenarnya, dan masalah mendasarnya adalah OS yang melakukan pekerjaan buruk dengan caching halaman.
Saya menggunakan O_DIRECT untuk implementasi sederhana kucing untuk menemukan kesalahan memori di mesin saya. Ini adalah salah satu penggunaan yang valid untuk O_DIRECT. Itu tidak ada hubungannya dengan kinerja.