क्या लिनक्स कर्नेल को बताने का एक तरीका है कि बफर कैश के लिए केवल एक निश्चित प्रतिशत मेमोरी का उपयोग करें? मुझे पता है कि /proc/sys/vm/drop_caches
अस्थायी रूप से कैश को साफ करने के लिए इस्तेमाल किया जा सकता है, लेकिन क्या कोई स्थायी सेटिंग है जो इसे मुख्य मेमोरी के 50% से अधिक तक बढ़ने से रोकती है?
ऐसा करने का कारण यह है कि, मेरे पास एक सीएफएच ओएसडी चलाने वाला सर्वर है जो लगातार डिस्क से डेटा काम करता है और कुछ घंटों के भीतर बफर कैश के रूप में संपूर्ण भौतिक मेमोरी का उपयोग करने का प्रबंधन करता है। उसी समय, मुझे उन अनुप्रयोगों को चलाने की आवश्यकता है जो भौतिक मेमोरी की एक बड़ी राशि (कई 10 जीबी जीबी) आवंटित करेंगे। आम धारणा के विपरीत (बफ़र कैश से संबंधित लगभग सभी सवालों पर दी गई सलाह देखें), क्लीन कैश एंट्रीज़ को हटाकर मेमोरी को स्वचालित रूप से मुक्त करना तात्कालिक नहीं है : मेरा आवेदन शुरू होने में एक मिनट तक लग सकता है जब बफ़र कैश पूर्ण हो ( *), जबकि कैश को साफ़ करने के बाद (उपयोग echo 3 > /proc/sys/vm/drop_caches
) एक ही आवेदन लगभग तुरंत शुरू होता है।
(*) स्टार्टअप समय के इस मिनट के दौरान, एप्लिकेशन नई मेमोरी में फ़ॉल्ट कर रहा है, लेकिन कर्नेल में अपना 100% समय व्यतीत करता है, जिसे एक समारोह में Vtune के अनुसार कहा जाता है pageblock_pfn_to_page
। यह फ़ंक्शन विशाल पृष्ठों को खोजने के लिए आवश्यक स्मृति संघनन से संबंधित है, जो मुझे विश्वास दिलाता है कि वास्तव में विखंडन समस्या है।