EXT4 प्रदर्शन बहुत सारी छोटी फाइलों के साथ सिस्टम पर वास्तव में खराब हो गया है


10

मेरे पास एक छोटा एम्बेडेड डिवाइस है जिसमें केवल 128MB RAM है

इस डिवाइस से जुड़ी एक 2TB USB2 हार्ड डिस्क है

मैं डिवाइस के प्रदर्शन से बहुत खुश हूं जब तक हाल ही में जब या तो फ़ाइलों की संख्या ने डिस्क की क्षमता की सीमा को पार कर लिया है, तो एक सीमा पार कर ली है (मुझे यकीन नहीं है कि कौन सा है)

डिस्क पर कई छोटी फाइलें हैं, लेखन की प्रकृति के कारण एप्लिकेशन फ़ाइलों को बहुत संतुलित तरीके से व्यवस्थित किया जाता है - कोई पत्ती नोड निर्देशिका में 200 से अधिक फाइलें नहीं हैं और बस 800,000 से अधिक फाइलें हैं।

मैं जांच करने के लिए किसी चीज पर लीड पाने की उम्मीद कर रहा हूं। डिस्क प्रदर्शन में काफी गिरावट आई है, डिवाइस काफी अच्छी तरह से चल रहा था और फिर अचानक प्रदर्शन एक चट्टान की तरह गिरा।

मेरी धारणा यह है कि मैंने अपनी फ़ाइलों के लिए डिस्क पर जो संगठनात्मक संरचना चुनी है, उसने किसी तरह से ज़िप्पी बने रहने की इनकोड कैश की क्षमता को चोट पहुंचाई है।

एक प्रयोग के रूप में, मैंने डिस्क (निस्तब्धता वाले कैश, नि: शुल्क सत्यापित) को हटा दिया। फिर कमांड प्रॉम्प्ट से मैंने डायरेक्टरी स्ट्रक्चर में गहराई से नेविगेट किया। सभी ने इस निर्देशिका (और इसके बच्चों) के बारे में बताया कि इसके नीचे केवल 3200 फाइलें थीं और इस बिंदु पर 'मुफ्त' में दिखाया गया> 117MB का मुफ्त मेमोरी

इस बिंदु पर, मैंने 'फ्री' के बाद कमांड 'फाइंड' टाइप किया।

'खोज' में लगभग 3000 फाइलें दिखाई गईं, लेकिन मेमोरी का उपयोग ~ 117MB से ~ 2MB तक हो गया

मैं कैश बनाम शेष मेमोरी को समझता हूं, और कर्नेल एक खाली पृष्ठ को एक बुरा पृष्ठ कैसे मानता है - हालांकि 3000 एमबी फ़ाइलों की निर्देशिका से 115MB कैश्ड सामग्री मेरी समझ में एक गंभीर अंतर की ओर इशारा करती है। मुझे उम्मीद है कि कोई मुझे यह समझने में मदद करेगा कि क्या हो रहा है

क्या मैं मान सकता हूँ कि एक संतुलित पेड़ बहुत सारी फाइलों के लिए जाने का रास्ता है?

जवाबों:


9

बहुत अच्छी समस्या वर्णन।

आपने जो कहा, उसके आधार पर, मुझे लगता है कि आप जो देख रहे हैं, वह स्लैब का उपयोग अधिक हो रहा है। एक अच्छा प्रयोग एक को चलाने के लिए किया जाएगा cat /proc/meminfoऔर cat /proc/slabinfoएक 3 सेकंड की देरी से अधिक है, जबकि आप FS पदानुक्रम में गहरी जाने के लिए और 3000 फ़ाइलों की खोज। अनिवार्य रूप से क्या हो रहा है कि कर्नेल एफएस संरचना को पीछे ले जाएगा और व्यक्तिगत फ़ाइलों और उनके इनोड्स को स्कैन करेगा और उन सभी को मेमोरी में संग्रहीत किया जाता है। यदि आप जांचते /proc/slabinfoहैं तो आपको एक ऑब्जेक्ट दिखाई देगा, ext4_inode_cacheजो बताता है कि प्रत्येक इनोड में कितनी मेमोरी होगी। इसे ऑब्जेक्ट्स की संख्या के साथ गुणा करें (obj_size * no_obj) और आपको ऑब्जेक्ट द्वारा उपयोग की जाने वाली मेमोरी की मात्रा मिलती है। जब तक आप fs पदानुक्रम में जाते हैं, तब तक अधिक मेमोरी का उपभोग किया जाएगा जब तक कि सिस्टम मेमोरी ज़ोन के उच्च वॉटरमार्क को हिट नहीं करता है। किस बिंदु पर, कर्नेल पुनः प्राप्त करना शुरू कर देगा।

यदि आप ज्ञापन और स्लैबिनॉफ़ में प्रहार करते हैं, तो आपको वह विवरण मिलेगा जिसकी आपको तलाश है। यदि आप मुझे देखना चाहते हैं, तो उसे पास्टबिन दें;)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.