ठीक है, आप अनुभवों के लिए पूछते हैं, यह प्रश्न को थोड़ा व्यक्तिपरक और तर्कपूर्ण बनाता है, लेकिन निष्क्रिय।
लिनस ने कहा कि उन उपयोगों का जिक्र करते हैं जो आमतौर पर लोग O_DIRECT के लिए विशेषता रखते हैं, और उन उपयोगों के लिए, IMO Linus अधिकतर सही होते हैं। यहां तक कि अगर आप प्रत्यक्ष I / O करते हैं, तो आप अपने प्रोग्राम स्टेटमेंट में सीधे डिवाइस से / से डेटा ट्रांसफर नहीं कर सकते, आपको एक बफर की आवश्यकता होती है जो प्रोग्राम (डिवाइस या डिवाइस द्वारा) भरा हो और सिस्टम कॉल के माध्यम से दूसरे छोर पर स्थानांतरित हो। इसके अलावा, इसे कुशल बनाने के लिए, आप उस चीज़ को दोबारा पढ़ना नहीं चाहेंगे, जिसे आप पहले से ही पढ़ चुके हैं, अगर आपको फिर से इसकी आवश्यकता है। तो आपको किसी प्रकार के कैश की आवश्यकता है ... और यह ठीक है कि कर्नेल O_DIRECT, एक पेज कैश के बिना प्रदान करता है! उसका उपयोग क्यों नहीं करते? यह भी लाभ के साथ आता है यदि अधिक प्रक्रियाएं समान फ़ाइल को समवर्ती रूप से एक्सेस करना चाहती हैं, तो यह O_DIRECT के साथ एक आपदा होगी।
यह कहने के बाद कि, O_DIRECT के इसके उपयोग हैं: यदि किसी कारण से आपको सीधे ब्लॉक डिवाइस से डेटा प्राप्त करना है। इसका प्रदर्शन से कोई लेना-देना नहीं है।
प्रदर्शन के लिए O_DIRECT का उपयोग करने वाले लोग आमतौर पर खराब पृष्ठ कैश एल्गोरिदम के साथ सिस्टम से आते हैं, या बिना POSIX सलाह तंत्र के, या यहां तक कि लोग जो भी दूसरे लोगों ने कहा है, उसे बिना किसी दोहराव के दोहराते हैं। इन समस्याओं से बचने के लिए, O_DIRECT एक समाधान था। लिनक्स, ओटीओएच, का दर्शन है कि आपको वास्तविक अंतर्निहित समस्या को ठीक करना चाहिए, और अंतर्निहित समस्या ओएस थी जिसने पृष्ठ कोचिंग के साथ एक बुरा काम किया।
मैंने अपनी मशीन में मेमोरी त्रुटि खोजने के लिए बिल्ली के एक सरल कार्यान्वयन के लिए O_DIRECT का उपयोग किया । यह O_DIRECT के लिए एक मान्य उपयोग है। इसका प्रदर्शन से कोई लेना-देना नहीं था।