हमें विभिन्न प्रकार के संदेशों को पढ़ने और गिनने की आवश्यकता है/0 जी10 जीबी टेक्स्ट फ़ाइल पर कुछ आंकड़े चलाएं, उदाहरण के लिए FIX इंजन लॉग। हम पर्ल में लिनक्स, 32-बिट, 4 सीपीयू, इंटेल, कोडिंग का उपयोग करते हैं लेकिन भाषा वास्तव में कोई फर्क नहीं पड़ता।डिस्क से 10 जीबी फ़ाइल पढ़ने का सबसे तेज़ तरीका क्या है?
मुझे टिम ब्रै के WideFinder project में कुछ रोचक युक्तियां मिली हैं। हालांकि, हमने पाया है कि मेमोरी मैपिंग का उपयोग 32 बिट आर्किटेक्चर द्वारा स्वाभाविक रूप से सीमित है।
हम कई प्रक्रियाओं उपयोग करने की कोशिश, तेजी से काम करने के लिए अगर हम समानांतर 4 प्रक्रियाओं 4 सीपीयू पर उपयोग करने में फ़ाइल पर कार्रवाई लगती है। संदर्भ स्विचिंग की लागत के कारण बहु-थ्रेडिंग जोड़ना शायद धीमा हो जाता है। हमने को थ्रेड पूल के आकार को बदलने की कोशिश की, लेकिन यह अभी भी सरल बहु-प्रक्रिया संस्करण से धीमा है।
मेमोरी मैपिंग भाग बहुत स्थिर नहीं है, कभी-कभी 2 जीबी फ़ाइल पर 80 सेकंड और कभी-कभी 7 सेकेंड लेता है, शायद पेज दोष या वर्चुअल मेमोरी उपयोग से संबंधित कुछ। वैसे भी, एमएमएपी 32 बिट आर्किटेक्चर पर 4 जीबी से अधिक पैमाने पर स्केल नहीं कर सकता है।
हमने पर्ल के IPC::Mmap और Sys::Mmap को आजमाया। को मानचित्र-घटाकर भी देखा गया, लेकिन समस्या वास्तव में I/O बाध्य है, प्रसंस्करण स्वयं पर्याप्त तेज़ है।
तो हम बफरिंग आकार, प्रकार, आदि ट्यूनिंग द्वारा अनुकूलन बुनियादी आई/ओ की कोशिश करने का फैसला किया
कर सकते हैं किसी को जो एक मौजूदा परियोजना, जहां इस समस्या कुशलता से किसी भी भाषा/मंच में हल किया गया था के बारे में पता है एक उपयोगी लिंक को इंगित करें या एक दिशा का सुझाव दें?
2 जी के लिए एक सीपीयू पर कच्चा प्रदर्शन क्या है? आपको शायद यह निर्धारित करने की आवश्यकता है कि I/O समस्या है या CPU कंप्यूटेशंस है या नहीं। – Cervo
यदि आप वास्तव में डिस्क (आईओ) बाध्य हैं, तो सबसे अच्छा तरीका शायद तेजी से डिस्क, अधिक डिस्क (RAID0, RAID5, RAID10, आदि) या 64-बिट मशीन को फ़ाइल को स्टोर करने के लिए पर्याप्त मेमोरी के साथ खरीदना है एक राम डिस्क। कोई भी उचित एकल डिस्क 50 एमबी/सेकंड खींचने में सक्षम होना चाहिए; कई तेज़ डिस्क आपको कम से कम 300 एमबी/सेकंड तक धक्का देने में सक्षम होना चाहिए। – derobert
मैं आपको Sys :: Mmap का उपयोग न करने की सलाह दूंगा लेकिन फ़ाइल-मानचित्र (बाद के दस्तावेज़ों में बताए गए कारणों के लिए)। किसी भी मामले में आप शायद आईपीसी :: एमएमएपी का उपयोग नहीं करना चाहते हैं। –