2013-02-09 33 views
9
मैप किया

पृष्ठभूमि:प्रदर्शन स्मृति की विशेषताओं फ़ाइल

मैं एक जावा अनुप्रयोग जो काफी बड़ी स्मृति पर गहन आईओ करता है मैप की फ़ाइलें (> 500 एमबी)। कार्यक्रम डेटा पढ़ता है, डेटा लिखता है, और कभी-कभी दोनों करता है।

सभी पढ़ने/लिखने के कार्यों में समान गणना जटिलता है।

मैं कार्यक्रम के आईओ परत बेंचमार्क और पाया स्मृति मैप की गई फ़ाइलों के अजीब प्रदर्शन विशेषताओं:

  • यह करता है (यादृच्छिक स्थिति में 1KB हर यात्रा पढ़ें)
  • यह 38k करता है प्रति सेकंड 90k पढ़ता प्रति सेकंड लिखते हैं (अनुक्रमिक रूप से प्रत्येक पुनरावृत्ति 1KB लिखें)
  • यह प्रति सेकेंड 43k लिखता है (यादृच्छिक स्थिति पर प्रत्येक पुनरावृत्ति 4 बाइट लिखें)
  • यह केवल 9 के पढ़ने/लिखने के संयुक्त ऑपरेशन करता है दूसरा

कार्यक्रमों (12 बाइट्स तो, 1KB हर यात्रा लिखने यादृच्छिक स्थिति में पढ़ें) 64-बिट पर JDK 1.7, लिनक्स 3.4।

मशीन 8 थ्रेड सीपीयू और 4 जीबी भौतिक मेमोरी वाला एक साधारण इंटेल पीसी है। बेंचमार्क आयोजित करते समय केवल 1 जीबी को JVM ढेर को असाइन किया गया था। https://github.com/HouzuoGuo/Aurinko2/blob/master/src/test/scala/storage/Benchmark.scala

यहाँ,/लिखने कार्यों और उपरोक्त पढ़ें के कार्यान्वयन है लिखते हैं, पढ़ते हैं::

तो अधिक जानकारी के लिए आवश्यक हैं, यहाँ बेंचमार्क कोड है https://github.com/HouzuoGuo/Aurinko2/blob/master/src/main/scala/aurinko2/storage/Collection.scala

तो मेरी सवाल कर रहे हैं:

  • निश्चित फ़ाइल आकार और मेमोरी आकार को देखते हुए, कौन से कारक स्मृति मैप किए गए फ़ाइल को यादृच्छिक पढ़ने के प्रदर्शन को प्रभावित करते हैं?
  • निश्चित फ़ाइल आकार और मेमोरी आकार को देखते हुए, कौन से कारक स्मृति मैप किए गए फ़ाइल को यादृच्छिक लेखन प्रदर्शन को प्रभावित करते हैं?
  • मैं संयुक्त ऑपरेशन पढ़ने/लिखने के बेंचमार्क परिणाम को कैसे समझाऊं? (मैं प्रति सेकंड 20K पुनरावृत्तियों को करने की उम्मीद कर रहा था)।

धन्यवाद।

+0

1. कोड दिखाएं कि आप फ़ाइल को कैसे मैप करते हैं। 2. क्या आपने सिस्टम लोड की जांच की है, Iostat, सभी सामान्य? – bmargulies

+0

धन्यवाद bmargulies। नवीनतम संपादन देखें। –

उत्तर

0

स्मृति मैप किए गए फ़ाइल प्रदर्शन डिस्क प्रदर्शन, फ़ाइल सिस्टम प्रकार, फ़ाइल सिस्टम कैश के लिए उपलब्ध मुफ्त मेमोरी और ब्लॉक आकार को पढ़ने/लिखने पर निर्भर करता है। लिनक्स पर पृष्ठ का आकार 4K है। तो आपको 4k पढ़ने/लिखने के साथ अधिकतर प्रदर्शन की अपेक्षा करनी चाहिए। यादृच्छिक स्थिति पर एक पहुंच पृष्ठ गलती का कारण बनती है यदि पृष्ठ मैप नहीं किया गया है और एक नया पृष्ठ पढ़ा जाएगा। आमतौर पर, यदि आप फ़ाइलों को एक मेमोरी सरणी (या जावा में बाइटबफर) के रूप में देखना चाहते हैं, तो आप मेमोरी मैप की गई फ़ाइल चाहते हैं।