प्रदर्शन में सबसे बड़ा अंतर तब आएगा जब आप मेमोरी के एक बड़े क्षेत्र में व्यापक रूप से यादृच्छिक पहुंच कर रहे हैं - जहां "बड़ा" का मतलब उस सीमा से बहुत बड़ा है जिसे सभी छोटी पृष्ठ प्रविष्टियों द्वारा मैप किया जा सकता है टीएलबी (जो आमतौर पर आधुनिक प्रोसेसर में कई स्तर होते हैं)।
चीजों को और अधिक जटिल बनाने के लिए, 4 केबी पृष्ठों के लिए टीएलबी प्रविष्टियों की संख्या अक्सर 2 एमबी पृष्ठों के लिए प्रविष्टियों की संख्या से बड़ी होती है, लेकिन यह प्रोसेसर द्वारा बहुत भिन्न होती है। स्तर 2 टीएलबी में कितने "बड़े पृष्ठ" प्रविष्टियां उपलब्ध हैं, इसमें बहुत भिन्नता भी है।
उदाहरण के लिए, एक AMD Opteron परिवार 10h संशोधन डी ("इस्तांबुल") प्रणाली, सीपीयूआईडी रिपोर्ट पर:
- एल 1 DTLB: 4kB पृष्ठों: 48 प्रविष्टियों; 2 एमबी पेज: 48 प्रविष्टियां; 1 जीबी पेज: 48 प्रविष्टियां
- एल 2 टीएलबी: 4 केबी पेज: 512 प्रविष्टियां; 2 एमबी पेज: 128 प्रविष्टियां; 1GB पृष्ठों: 16 प्रविष्टियों
जबकि एक इंटेल जिऑन 56xx ("Westmere") सिस्टम पर, सीपीयूआईडी रिपोर्ट:
- एल 1 DTLB: 4kB पृष्ठों: 64 प्रविष्टियों; 2 एमबी पेज: 32 प्रविष्टियां
- एल 2 टीएलबी: 4 केबी पेज: 512 प्रविष्टियां; 2 एमबी पृष्ठों: कोई नहीं
दोनों 2MB (512 * 4kB) मैप कर सकते हैं, स्तर 2 TLB याद करते हैं पीड़ित से पहले छोटे पृष्ठों का उपयोग करते समय Westmere प्रणाली अपनी 32 2 एमबी TLB प्रविष्टियों का उपयोग 64MB मैप कर सकते हैं और एएमडी प्रणाली का उपयोग कर 352MB मैप कर सकते हैं इसके एल 1 और एल 2 टीएलबी में 176 2 एमबी टीएलबी प्रविष्टियां। किसी भी प्रणाली को स्मृति पृष्ठों पर यादृच्छिक अभिगम के लिए बड़े पृष्ठों का उपयोग करके एक महत्वपूर्ण गति प्राप्त होगी जो कि 2 एमबी से अधिक और 64 एमबी से कम है। एएमडी सिस्टम को बड़ी मेमोरी रेंजों के लिए बड़े पृष्ठों का उपयोग करके अच्छा प्रदर्शन दिखाना जारी रखना चाहिए।
आप इन सभी मामलों में से बचने की कोशिश कर रहे हैं x86_64 पदानुक्रमित पते अनुवाद के सभी चार स्तरों को पार करने का सबसे खराब मामला (नोट 1) परिदृश्य है।
पता अनुवाद कैशिंग प्रणाली से कोई भी (ध्यान दें 2) यदि काम करते हैं, यह आवश्यकता है: एक 4kB पृष्ठ पर मैप किया गया डेटा लोड करने के लिए स्मृति
- 5 यात्राएं, स्मृति को
- 4 के दौरे पर मैप किया गया डेटा लोड करने के एक 2 एमबी पेज, और
- 1 जीबी पेज पर मैप किए गए डेटा को लोड करने के लिए स्मृति में 3 ट्रिप।
प्रत्येक मामले में स्मृति की अंतिम यात्रा अनुरोधित डेटा प्राप्त करना है, जबकि अन्य यात्राओं को पृष्ठ अनुवाद जानकारी के विभिन्न हिस्सों को प्राप्त करने की आवश्यकता होती है। सबसे अच्छा वर्णन मैंने देखा है एएमडी के की धारा 5.3 में है "AMD64 आर्किटेक्चर प्रोग्रामर के मैनुअल वॉल्यूम 2: सिस्टम प्रोग्रामिंग" (प्रकाशन 24593) http://support.amd.com/us/Embedded_TechDocs/24593.pdf
नोट 1: उपरोक्त आंकड़े वास्तव में सबसे खराब मामले नहीं हैं। वर्चुअल मशीन के तहत चलने से ये संख्या बदतर हो जाती है। एक ऐसे वातावरण में चल रहा है जो डिस्क टेबल पर स्विच करने के लिए पेज टेबल के विभिन्न स्तरों को पकड़ने वाली मेमोरी का कारण बनता है अधिक खराब बनाता है।
नोट 2: दुर्भाग्य से, यहां तक कि विस्तार के इस स्तर को जानने के लिए भी पर्याप्त नहीं है, क्योंकि सभी आधुनिक प्रोसेसर के पास पृष्ठ अनुवाद पदानुक्रम के ऊपरी स्तर के लिए अतिरिक्त कैश हैं। जहां तक मैं ये कह सकता हूं कि जनता में बहुत खराब तरीके से दस्तावेज किया गया है।
हार्डवेयर प्रीफेचिंग 4k पेज सीमाओं को पार नहीं करेगा, लेकिन आप सीधे लाइन लाइन में जो देख रहे हैं वह यह है कि पेज टेबल एक्सेस बहुत अनुमानित है, इसलिए पेज चलना तब होता है जब आप टीएलबी में याद करते हैं तो संभवतः हिट पेज एल 1 में सभी हैं (इन पेज प्रविष्टियों को वास्तव में prefetching के माध्यम से लाया जा सकता है)। – BeeOnRope