2011-02-08 9 views
6

एक CentOS 5.5 मशीन पर लिनक्स कर्नेल संस्करण 2.6.18-194.26.1.el5 चल रहा है, मैंने देखा है कि posix_fadvise (WILLNEED) 60K फ़ाइलों को लगभग 200% तक नियमित आईओ की तुलना में बहुत धीमा कर देता है।posix_fadvise (WILLNEED) आईओ धीमा बनाता है?

ऐसा लगता है कि वास्तविक फ़ैडवाइस कॉल तुल्यकालिक है, और यह उन अनुप्रयोगों में अन्य धागे को शेड्यूल करने में भी देरी करता है जो फ़ाइलों से पढ़ने वाले डेटा का उपयोग करते हैं।

क्या यह संभव है कि कर्नेल फ़ैडवाइस कॉल के कारण डिस्क से डेटा लाने में व्यस्त हो, और अन्य निर्धारित कार्य में देरी समाप्त हो जाए? यह अपेक्षित एसिंक्रोनस प्रीफेच व्यवहार के विपरीत लगता है जिसे हम एक फ़ैडवाइस कॉल करने की अपेक्षा करते हैं।

मेरा प्रश्न है: क्या कोई ट्यून करने योग्य कर्नेल पैरामीटर हैं जिनका उपयोग posix_fadvise (WILLNEED) के लिए असीमित व्यवहार को लागू करने के लिए किया जा सकता है? बढ़ते कर्नेल आईओ थ्रेड्स, पेज कैश की तरह?

उत्तर

7

यह हाल ही में asked on LKML था। यह ठीक है कि यह कैसे डिजाइन किया गया है। यदि आपको गैर-अवरुद्ध fadvise की आवश्यकता है, तो इसे किसी अन्य थ्रेड में करें।

+0

उत्तर के लिए धन्यवाद। लिंक में प्रदान किया गया उत्तर कर्नेल में सर्विस किए जाने वाले आईओ अनुरोधों की संख्या को दर्शाता है। क्या यह एक विन्यास योग्य संख्या है? अगर सिस्टम में बहुत सारे संसाधन हैं, तो इस कतार में वृद्धि से तुल्यकालिक व्यवहार के प्रभाव को कम करने में मदद मिल सकती है ... – Specksynder

+0

['nr_requests' प्रति कतार, तो आप इसे ट्यून कर सकते हैं] (https://www.kernel.org/doc/Documentation /block/queue-sysfs.txt)। मुझे यकीन नहीं है कि यह किससे शुरू हुआ है। – sourcejedi

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