2012-12-21 11 views
8

कॉल रिटर्न लिखते समय, डेटा को कर्नेल द्वारा प्रबंधित कुछ पेज पर कॉपी किया जाता है। उस पृष्ठ में एकाधिक प्रक्रिया से लिख सकते हैं। इसलिए, जब अनुप्रयोगों में से कोई एक fsync कॉल जारी करता है, तो क्या यह पूरे पृष्ठ को फ़्लश करने का परिणाम देगा, जिसका मतलब है कि अन्य एप्लिकेशन डेटा भी फ़्लश करना है, लेकिन लागत को उस प्रक्रिया द्वारा किया जाएगा जो fsync को कॉल करता है। क्या ये सही है?fsync सिस्टम कॉल linux में कैसे काम करता है?

उत्तर

0

मैन पेज 'flushes to disk any data written to this file' बताता है जिसमें फ़ाइल मेटाडेटा शामिल है।

मुझे लगता है कि आप इसे sync के साथ भ्रमित कर रहे हैं जो पूरे कैश से सभी गंदे पृष्ठों को डिस्क पर लिखता है। गंदे पृष्ठ == डेटा बदल दिया। और प्रक्रिया को पूरा करने के लिए इंतजार करना होगा। यदि लागत से आपका मतलब है, तो हाँ, यह लागत खर्च करता है। कर्नेल समय प्रक्रिया प्रणाली समय संसाधन उपयोग में जोड़ा जाता है।

fsync लागत भी लगाता है, साथ ही सिंक (आमतौर पर) की तुलना में कर्नेल समय की एक बहुत छोटी राशि भी होती है।

4

fsync एक ही फाइल पर काम करता है। यह सभी उस फ़ाइल में किए गए परिवर्तनों को फ्लश करेगा। यदि एकाधिक प्रक्रियाएं एक फ़ाइल में लिख रही हैं तो fsync कॉल को सभी तक रोक दिया जाएगा, डिस्क में परिवर्तन लिखे गए हैं।

यह कुछ जटिल है जब कुछ जर्नलिंग फाइल सिस्टम खेलते हैं। उदाहरण के लिए, "आदेशित" मोड के साथ ext3 और ext4 (कम हद तक) जर्नल में fsync फ़ाइल से पहले फ़ाइलों के सभी पर सभी परिवर्तनों को फ्लश करने की आवश्यकता है।

इसका मतलब है कि यदि प्रोग्राम बड़े डेटाबेस या बड़ी लॉग फ़ाइल या वीडियो फ़ाइल में लिख रहे हैं और फिर आप fsync दो-पंक्ति कॉन्फ़िगरेशन फ़ाइल देखते हैं, तो आपके fsync को उन सभी मेगाबाइट डेटा को पहले लिखा जाना चाहिए यह वापस आ सकता है।

यही कारण है कि मैं अपने ext4 को "लेखन" मोड में चलाता हूं, जिसमें क्रैश के बाद कुछ अप्रिय परिणाम हो सकते हैं जैसे कि सही आकार की फाइलें, लेकिन शून्य से भरी हुई हैं। लेकिन सामान्य ऑपरेशन में "लिखना" इतना तेज़ है कि मुझे लगता है कि ट्रेडऑफ इसके लायक है।

+0

एक वर्चुअल मेमोरी पेज की कल्पना करें, जिसमें एप्लिकेशन ए और बी से लिखते हैं। यदि एप्लिकेशन ए fsync को कॉल करता है, तो कर्नेल केवल पृष्ठ को चुनिंदा रूप से सिंक करेगा? Ext4 "ऑर्डर" के लिए डिफ़ॉल्ट मोड भी है? – Jimm

+0

@Jimm: डिस्क कैश फ़ाइलों में कभी भी मेमोरी पेज साझा नहीं करते हैं, इसलिए ऐसा नहीं होगा। –

+0

@Jimm पेज ओएस मेमोरी कैश में जो फ़ाइल से संबंधित हैं या तो गंदे चिह्नित हैं (जिसका अर्थ है कि पृष्ठ बदल गया है) या वे गंदे नहीं हैं (बदले नहीं गए हैं)। जब कोई उस फ़ाइल पर fsync को कॉल करता है, तो उस फ़ाइल से संबंधित सभी गंदे पृष्ठ ड्राइव पर लिखे जाते हैं, भले ही किस प्रक्रिया ने इसे बदल दिया हो। – nos

संबंधित मुद्दे