कॉल रिटर्न लिखते समय, डेटा को कर्नेल द्वारा प्रबंधित कुछ पेज पर कॉपी किया जाता है। उस पृष्ठ में एकाधिक प्रक्रिया से लिख सकते हैं। इसलिए, जब अनुप्रयोगों में से कोई एक fsync कॉल जारी करता है, तो क्या यह पूरे पृष्ठ को फ़्लश करने का परिणाम देगा, जिसका मतलब है कि अन्य एप्लिकेशन डेटा भी फ़्लश करना है, लेकिन लागत को उस प्रक्रिया द्वारा किया जाएगा जो fsync को कॉल करता है। क्या ये सही है?fsync सिस्टम कॉल linux में कैसे काम करता है?
उत्तर
मैन पेज 'flushes to disk any data written to this file'
बताता है जिसमें फ़ाइल मेटाडेटा शामिल है।
मुझे लगता है कि आप इसे sync
के साथ भ्रमित कर रहे हैं जो पूरे कैश से सभी गंदे पृष्ठों को डिस्क पर लिखता है। गंदे पृष्ठ == डेटा बदल दिया। और प्रक्रिया को पूरा करने के लिए इंतजार करना होगा। यदि लागत से आपका मतलब है, तो हाँ, यह लागत खर्च करता है। कर्नेल समय प्रक्रिया प्रणाली समय संसाधन उपयोग में जोड़ा जाता है।
fsync लागत भी लगाता है, साथ ही सिंक (आमतौर पर) की तुलना में कर्नेल समय की एक बहुत छोटी राशि भी होती है।
fsync
एक ही फाइल पर काम करता है। यह सभी उस फ़ाइल में किए गए परिवर्तनों को फ्लश करेगा। यदि एकाधिक प्रक्रियाएं एक फ़ाइल में लिख रही हैं तो fsync
कॉल को सभी तक रोक दिया जाएगा, डिस्क में परिवर्तन लिखे गए हैं।
यह कुछ जटिल है जब कुछ जर्नलिंग फाइल सिस्टम खेलते हैं। उदाहरण के लिए, "आदेशित" मोड के साथ ext3 और ext4 (कम हद तक) जर्नल में fsync फ़ाइल से पहले फ़ाइलों के सभी पर सभी परिवर्तनों को फ्लश करने की आवश्यकता है।
इसका मतलब है कि यदि प्रोग्राम बड़े डेटाबेस या बड़ी लॉग फ़ाइल या वीडियो फ़ाइल में लिख रहे हैं और फिर आप fsync
दो-पंक्ति कॉन्फ़िगरेशन फ़ाइल देखते हैं, तो आपके fsync
को उन सभी मेगाबाइट डेटा को पहले लिखा जाना चाहिए यह वापस आ सकता है।
यही कारण है कि मैं अपने ext4 को "लेखन" मोड में चलाता हूं, जिसमें क्रैश के बाद कुछ अप्रिय परिणाम हो सकते हैं जैसे कि सही आकार की फाइलें, लेकिन शून्य से भरी हुई हैं। लेकिन सामान्य ऑपरेशन में "लिखना" इतना तेज़ है कि मुझे लगता है कि ट्रेडऑफ इसके लायक है।
- 1. जावास्क्रिप्ट में 'कॉल' कैसे काम करता है?
- 2. amd64 linux में सिस्टम कॉल नंबर अलग क्यों हैं?
- 3. वर्डप्रेस परमालिंक सिस्टम कैसे काम करता है?
- 4. सिस्टम() वास्तव में लिनक्स में कैसे काम करता है?
- 5. सिस्टम कॉल कैसे CPU निर्देशों में अनुवाद करता है?
- 6. सिस्टम कॉल?
- 7. किसी स्ट्रीम पर fsync कैसे करें?
- 8. लिनक्स रीबूट() सिस्टम कॉल: यह kernel_halt() के बाद do_exit (0) क्यों कॉल करता है?
- 9. सिस्टम विंडोज़ और मूल एपीआई में कॉल करता है?
- 10. GetModuleHandle() कैसे काम करता है?
- 11. fflush और fsync
- 12. प्लगइन सिस्टम कैसे काम करता है (वर्डप्रेस, mybb ...)?
- 13. शेड_सेटफिनिटी() कैसे काम करता है?
- 14. ऑपरेटर में ग्रोवी कैसे काम करता है?
- 15. अनबिंड मॉडेल कॉल। यह कैसे काम करता है?
- 16. मोंगोडीबी के fsync के लिए क्या है?
- 17. Boost.Python कैसे काम करता है?
- 18. ओमेगल कैसे काम करता है?
- 19. टाइमज़ोन.getDefault() कैसे काम करता है?
- 20. डब्ल्यूसीएफ में Concurrency कैसे काम करता है?
- 21. RunDll32 कैसे काम करता है?
- 22. कौन सा खोल एक पर्ल सिस्टम() कॉल उपयोग करता है?
- 23. सैमफोर कैसे काम करता है?
- 24. कैसे काम करता है?
- 25. "answer_with_navigational" कैसे काम करता है?
- 26. पाइथन में कॉलिंग कैसे काम करता है?
- 27. 'टाइपऑफ' कैसे काम करता है?
- 28. सीटीएफई कैसे काम करता है?
- 29. कैसे malloc काम करता है?
- 30. प्रतिनिधि कैसे काम करता है?
एक वर्चुअल मेमोरी पेज की कल्पना करें, जिसमें एप्लिकेशन ए और बी से लिखते हैं। यदि एप्लिकेशन ए fsync को कॉल करता है, तो कर्नेल केवल पृष्ठ को चुनिंदा रूप से सिंक करेगा? Ext4 "ऑर्डर" के लिए डिफ़ॉल्ट मोड भी है? – Jimm
@Jimm: डिस्क कैश फ़ाइलों में कभी भी मेमोरी पेज साझा नहीं करते हैं, इसलिए ऐसा नहीं होगा। –
@Jimm पेज ओएस मेमोरी कैश में जो फ़ाइल से संबंधित हैं या तो गंदे चिह्नित हैं (जिसका अर्थ है कि पृष्ठ बदल गया है) या वे गंदे नहीं हैं (बदले नहीं गए हैं)। जब कोई उस फ़ाइल पर fsync को कॉल करता है, तो उस फ़ाइल से संबंधित सभी गंदे पृष्ठ ड्राइव पर लिखे जाते हैं, भले ही किस प्रक्रिया ने इसे बदल दिया हो। – nos