Tamam, deneyimler istiyorsun, bu soruyu biraz öznel ve tartışmacı, ancak tartışılabilir kılıyor.
Linus, insanların genellikle O_DIRECT'e atfedilen kullanımlara atıfta bulunduğunu ve bu kullanımlar için IMO Linus'un çoğunlukla doğru olduğunu söyledi. Doğrudan G / Ç yapsanız bile, verileri cihazlara doğrudan / doğrudan program deyimlerinize aktaramazsınız, doldurulmuş bir arabellek gerekir (program veya aygıt tarafından) ve bir sistem çağrısı yoluyla diğer uca aktarılır. Ayrıca, verimli hale getirmek için, daha önce okuduğunuz bir şeyi tekrar okumak zorunda kalmayacaksınız. Yani bir çeşit önbelleğe ihtiyacınız var ... ve bu tam da çekirdeğin O_DIRECT, sayfa önbelleği olmadan sağladığı özellik! Neden bunu kullanmıyorsun? Aynı anda daha fazla işlem aynı dosyaya aynı anda erişmek isterse, O_DIRECT ile felaket olur.
Bunu söyledikten sonra, O_DIRECT'in kullanımları vardır: Herhangi bir nedenle doğrudan blok cihazından veri almanız gerekiyorsa. Performansla ilgisi yok.
Performans için O_DIRECT kullanan kişiler genellikle kötü sayfa önbellek algoritmasına sahip sistemlerden veya POSIX öneri mekanizmalarına sahip olmayan sistemlerden ve hatta başkalarının söylediklerini akılsızca tekrarlayan kişilerden gelir. Bu sorunları önlemek için O_DIRECT bir çözümdü. Linux, OTOH, asıl temel sorunu çözmeniz gerektiği felsefesine sahiptir ve altta yatan sorun sayfa önbelleğe alma konusunda kötü bir iş yapan işletim sistemleridir.
Makinemde bir hafıza hatası bulmak için basit bir kedi uygulaması için O_DIRECT kullandım . Bu, O_DIRECT için geçerli bir kullanımdır. Bunun performansla alakası yok.