ตกลงคุณขอประสบการณ์สิ่งนี้ทำให้คำถามเป็นเรื่องส่วนตัวและเป็นข้อโต้แย้งเล็กน้อย แต่พอผ่านไปได้
Linus กล่าวว่าการอ้างถึงการใช้งานที่ผู้คนมักจะอ้างถึง O_DIRECT และสำหรับการใช้งานเหล่านั้น IMO Linus นั้นถูกต้องที่สุด แม้ว่าคุณจะสั่ง I / O โดยตรง แต่คุณไม่สามารถถ่ายโอนข้อมูลไปยัง / จากอุปกรณ์โดยตรงไปยังคำสั่งโปรแกรมของคุณคุณต้องมีบัฟเฟอร์ที่เต็มไปด้วย (โดยโปรแกรมหรืออุปกรณ์) และโอนผ่านการเรียกระบบไปยังอีกปลายหนึ่ง นอกจากนี้เพื่อให้มีประสิทธิภาพคุณจะไม่ต้องการอ่านสิ่งที่คุณเพิ่งอ่านไปใหม่ในกรณีที่คุณต้องการอีกครั้ง ดังนั้นคุณต้องมีแคชบางอย่าง ... และเป็นสิ่งที่เคอร์เนลจัดเตรียมไว้โดยไม่มี O_DIRECT แคชหน้า! ทำไมไม่ใช้มัน มันยังมาพร้อมกับประโยชน์หากกระบวนการเพิ่มเติมต้องการเข้าถึงไฟล์เดียวกันพร้อมกันมันจะเป็นความหายนะกับ O_DIRECT
ต้องบอกว่า O_DIRECT มีประโยชน์: ถ้าด้วยเหตุผลบางอย่างคุณจำเป็นต้องได้รับข้อมูลโดยตรงจากอุปกรณ์บล็อก มันไม่เกี่ยวอะไรกับประสิทธิภาพ
คนที่ใช้ O_DIRECT เพื่อประสิทธิภาพมักมาจากระบบที่มีอัลกอริธึมแคชเพจที่ไม่ดีหรือไม่มีกลไกการแนะนำ POSIX หรือแม้แต่คนที่ทำซ้ำสิ่งที่คนอื่นพูด เพื่อหลีกเลี่ยงปัญหาเหล่านี้ O_DIRECT เป็นวิธีแก้ปัญหา Linux, OTOH มีปรัชญาที่คุณควรแก้ไขปัญหาพื้นฐานที่แท้จริงและปัญหาพื้นฐานคือระบบปฏิบัติการที่ทำงานได้ไม่ดีเมื่อมีการแคชหน้า
ฉันใช้ O_DIRECTสำหรับการปรับใช้ cat อย่างง่ายเพื่อค้นหาข้อผิดพลาดของหน่วยความจำในเครื่องของฉัน นี่เป็นการใช้งานที่ถูกต้องเพียงครั้งเดียวสำหรับ O_DIRECT มันไม่มีส่วนเกี่ยวข้องกับการแสดงเลย