आउटपुट दर हार्ड डिस्क लेखन दर से अधिक कैसे हो सकती है?पर्ल: लिखने की गति रहस्य?
अद्यतन 1:
बंद कर दिया एंटीवायरस: मैं निम्नलिखित बदल दिया है। कोई परिवर्तन नहीं होता है।
नई भौतिक डिस्क डाली और परीक्षण के लिए पहले विभाजन का उपयोग किया। (प्रारंभिक परीक्षण के लिए डिस्क सिस्टम विभाजन से अलग अंतिम विभाजन पर थी, लेकिन उसी भौतिक डिस्क पर ।)। परिणाम: एक ही चक्रीय पैटर्न है, लेकिन सिस्टम अब परीक्षण के दौरान उत्तरदायी नहीं है। लिखने की गति कुछ हद तक अधिक है (पहले विभाजन का उपयोग करने के कारण हो सकती है और/या सिस्टम विभाजन के साथ हस्तक्षेप नहीं कर सकता है)। प्रारंभिक निष्कर्ष: सिस्टम विभाजन से हस्तक्षेप के कुछ प्रकार थे।
64 बिट पर्ल स्थापित किया गया। चक्र चले गए हैं और सब कुछ 2 सेकंड टाइमकेल पर स्थिर है: 55% सीपीयू एकल कोर, 65 एमबी/एस के बारे में लिखने की गति।
64 बिट पर्ल के साथ मूल ड्राइव पर प्रयास किया। परिणाम: कहीं बीच में। 8 सेकंड के चक्र, सीपीयू 20-50%, 35 - 65 एमबी/सेकंड (0-100% के गहरे चक्र के बजाय, 0 - 120 एमबी/सेकंड)। प्रणाली केवल हल्के से उत्तरदायी नहीं है। लिखें गति 50 एमबी/सेकंड है। यह हस्तक्षेप सिद्धांत का समर्थन करता है।
पर्ल स्क्रिप्ट में फ़्लशिंग। अभी तक कोशिश नहीं की
ठीक है, मैं अतीत first hurdle मिला है। मैं एक पर्ल स्क्रिप्ट कि एक बहुत बड़े पाठ फ़ाइल उत्पन्न कर सकते हैं लिखा है (उदाहरण के लिए 20 जीबी) और अनिवार्य रूप से बस के एक नंबर है:
print NUMBERS_OUTFILE $line;
जहां $ लाइन पर एक "\ n" के साथ एक लंबी स्ट्रिंग है समाप्त।
जब पर्ल स्क्रिप्ट शुरू होता है लिखने दर है के बारे में 120 MB/s (क्या स्क्रिप्ट के द्वारा की जाती है के बीच संगत, Process Explorer और "आईओ बाइट्स/सेकंड लिखें" प्रक्रिया के लिए पर्ल प्रदर्शन मॉनिटर में।) और 100 एकल कोर पर% CPU यह चालू है। यह दर, मुझे विश्वास है, हार्ड डिस्क की गति लिखने से अधिक है।
फिर कुछ समय बाद (उदाहरण के लिए 20 सेकंड और 2.7 जीबी लिखित) पूरी प्रणाली बहुत ही उत्तरदायी हो जाती है और सीपीयू 0% पर गिर जाती है। उदाहरण के लिए यह आखिरी 30 सेकंड। इन दो चरणों में औसत लिखने की गति हार्ड डिस्क की की गति गति के अनुरूप है। इस पैराग्राफ में वर्णित समय और आकार रन से चलाने के लिए बहुत भिन्न होते हैं। पहले चरण के लिए 1 जीबी से 4.3 जीबी तक अब तक देखा गया है। यहां एक transcript for the run with 4.3 GB है।
वहाँ एक 9.2 जीबी पाठ फ़ाइल परीक्षण में उत्पन्न करने के लिए इन चक्रों के कई प्रकार हैं:
क्या चल रहा है?
पूर्ण Perl script और BAT driver script (एचटीएमएल पूर्व टैग के साथ प्रारूपित)। यदि दो पर्यावरण चर एमबीएसआईजेई और आउटफाइल सेटअप हैं तो पर्ल स्क्रिप्ट को विंडोज़ की तुलना में अन्य प्लेटफॉर्म पर अपरिवर्तित करने में सक्षम होना चाहिए।
प्लेटफार्म: सक्रियस्टेट से पर्ल 5.10.0; (शुरुआत में 32 बिट, बाद में 64 बिट); 1004 बनाएँ। विंडोज एक्सपी x64 एसपी 2, कोई पेज फ़ाइल, 8 जीबी रैम, एएमडी क्वाड कोर सीपीयू, 500 जीबी ग्रीन कैवियार हार्ड डिस्क (लिखने की गति 85 एमबी/एस?)।
धन्यवाद। मैंने अब 64 बिट पर्ल (अद्यतन प्रश्न देखें) की कोशिश की है, लेकिन अगला चरण ऑटोफ्लश चालू करने का प्रयास करेगा। –
याद रखें, अगर आप बफर को चारों ओर रखते हैं तो आपको अपने फाइल सिस्टम को संशोधित करने की भी आवश्यकता हो सकती है। –
ऑटोफ्लश प्रत्येक प्रिंट तत्व के बाद सिस्टम कॉल करेगा। आपके उदाहरण में प्रदर्शन अच्छा होगा क्योंकि यह एक समय में 1 एमबी है। लेकिन अगर आप 'ए', 'बी', 'सी', 'डी' प्रिंट करते हैं तो यह बहुत बुरा होगा क्योंकि यह एक चार की चार सिस्टम कॉल है ... इसके लिए देखें। –