यहाँ एक विवरण है कि कैसे fdatasync()
काम करता है बनाम कैसे fsync()
काम करता है
fdatasync()
फ़ाइल के सभी डेटा बफ़र्स को डिस्क (सिस्टम कॉल रिटर्न से पहले) को फ्लश करता है। यह जैसा दिखता है, fsync()
लेकिन मेटाडेटा को अपडेट करने के लिए आवश्यक नहीं है, जैसे कि एक्सेस टाइम। डेटाबेस या लॉग फ़ाइलों तक पहुंचने वाले एप्लिकेशन अक्सर एक छोटा डेटा टुकड़ा लिखते हैं (जैसे, एक लॉग फ़ाइल में एक लाइन) और फिर fsync()
तुरंत कॉल करें ताकि यह सुनिश्चित हो सके कि लिखित डेटा हार्डडिस्क पर संग्रहीत है। दुर्भाग्य से, fsync()
हमेशा दो लेखन कार्य आरंभ करेंगे
- नव लिखित डेटा के लिए एक लेखन ऑपरेशन
- इनोड में संग्रहीत संशोधन समय को अद्यतन करने के लिए एक लेखन ऑपरेशन
यदि संशोधन समय लेन-देन की अवधारणा का हिस्सा नहीं है, तो fdatasync()
अनावश्यक इनकोड डिस्क लिखने के संचालन से बचने के लिए उपयोग किया जा सकता है।
अंग्रेजी में, O_DSYNC
तेजी से है O_DIRECT
के बाद से O_DIRECT
कॉल fsync()
दो बार (लॉग के लिए और एक डेटा के लिए) और fsync()
दो लिखने के संचालन के माध्यम से सत्यापन डेटा लिखता है। का उपयोग करते हुए O_DSYNC
कॉल fdatsync()
और fsync()
। आप fdatasync()
एक एसिंक्रोनस fsync()
(डेटा सत्यापित नहीं कर रहे हैं) करने के बारे में सोच सकते हैं ।
संख्याओं को देखते हुए, O_DSYNC
चार ऑप्स लिखते हैं, जिनमें से दो को सत्यापित किया जाता है, जबकि fsync()
चार राइट्स ऑपरेशन, सभी को बाद में सत्यापित किया जाता है ।
निष्कर्ष
O_DSYNC
- की तुलना में तेज
O_DIRECT
- विलंबता या एकमुश्त दुर्घटना के कारण डेटा संगत नहीं हो सकता है
O_DIRECT
- ज्यादा स्थिर
- डेटा संगत
- स्वाभाविक रूप से धीमा
मुझे उम्मीद है कि यह उत्तर मदद करता है, और मुझे आशा है कि मैंने आपके लिए चीजों को बदतर नहीं किया।