क्या पेज टेबल वॉक कैश हैं?


12

यदि हार्डवेयर TLB प्रबंधन (Intel x86-64 कहते हैं) के साथ एक माइक्रोप्रोसेसर पर अगर TLB मिस होता है और प्रोसेसर पेज टेबल पर चल रहा है, तो ये कैश-पदानुक्रम (L1, L2, आदि) से गुजरने वाली मेमोरी एक्सेस हैं। )?


इलेक्ट्रॉनिक डिजाइन से कोई लेना देना नहीं है। प्रश्न बंद हो जाएगा।
लियोन हेलर

8
यह पूछ रहा है कि एक विशेष चिप्स कैसे काम करता है, इसलिए मुझे लगता है कि यह विषय पर है।
ओलिन लेट्रोप

5
@ ओलिनथ्रोप: मैं मानता हूं: मुझे लगता है कि एक एकीकृत सर्किट के निम्न-स्तरीय विवरण ऑन-टॉपिक हैं।
डेविसडैरी

मुझे सहमत होना होगा, अगर और कुछ नहीं, तो हमारे प्रोसेसर के कार्य को डिबग करना एक शालीनता से तय की गई प्रणाली के लिए एक प्रमुख कदम है। यह हमारी सीमाओं में से एक के करीब हो रहा है, लेकिन अंदर से दृढ़ता से लगता है।
कोर्तुक

जवाबों:


8

हां, जहां तक ​​मैं बता सकता हूं कि इंटेल x86-64 प्रोसेसर पर, जब एक टीएलबी मिस होता है और प्रोसेसर पेज टेबल पर चल रहा होता है, तो वे ऑफ-चिप मेमोरी एक्सेस कैशे पदानुक्रम के माध्यम से जाते हैं।

मैं अभी भी कुछ विवरणों पर थोड़ा फजी हूं, और मुझे आशा है कि कुछ अन्य उत्तर उन्हें भर देंगे - क्या कोई इंटेल या एएमडी मैनुअल नहीं है जो पृष्ठ के बारे में विस्तार से वर्णन करता है? मेरी समझ यह है कि:

  • कुछ एड्रेस रजिस्टर में वर्चुअल एड्रेस को सबसे पहले एक फास्ट टीएलबी को भौतिक पते में बदलने के लिए सौंप दिया जाता है - पीसी में पता L1 ITLB को दिया जाता है, किसी अन्य रजिस्टर में पता L1 DTLB को दिया जाता है ।
  • यदि वह पहली खोज छूट जाती है, तो धीमी गति से बड़ा TLB, जो प्रयास किया जाता है, का एक और स्तर है। (क्या यह L2 TLB ITLB और DTLB में विभाजित है, या यह एक एकीकृत TLB कैश है? क्या आगे TLB स्तर हैं - L3? L4?)
  • यदि TLB लुकअप पूरी तरह से विफल हो जाता है, और x86-64-64 VHPT वॉकर अक्षम हो जाता है, तो CPU एक TLB मिस फॉल्ट का संकेत देता है, जिसे OS कर्नेल द्वारा इंटरसेप्ट किया जाता है। मेरी समझ यह है कि व्यावहारिक रूप से सभी गैर-x86 सीपीयू एक ही काम करते हैं - पूरी तरह से सॉफ्टवेयर में टीएलबी मिसेज को संभालते हैं। यदि सक्षम किया गया है, तो x86 और x86-64 प्रोसेसर में हार्डवेयर-सहायता प्राप्त VHPT टेबल वॉकर है जो अगले कुछ चरणों को संभालता है। (क्या x86 और x86-64 चिप्स में एक बिट है जो पूरी तरह से VHPT को निष्क्रिय कर देता है, या कई बिट्स हैं जो VHPT को कुछ पता सीमाओं के लिए सक्षम कर सकते हैं और अन्य पता सीमाओं के लिए VHPT को अक्षम कर सकते हैं? वे बिट्स कहाँ स्थित हैं?)
  • यदि TLB लुकअप पूरी तरह से विफल हो जाता है, तो मूल (शायद उपयोगकर्ता-मोड) वर्चुअल पता V1 V2 में बदल जाता है, पृष्ठ तालिका प्रविष्टि PTE का वर्चुअल पता जो V1 के लिए भौतिक पेज नंबर रखता है।
  • क्योंकि V2 फिर से एक वर्चुअल एड्रेस है, सीपीयू सामान्य वर्चुअल-टू-फिजिकल एड्रेस ट्रांसलेशन से होकर गुजरता है, सिवाय इसके कि यह L1 को छोड़ देता है और L2 पर राइट हो जाता है।
  • हार्डवेयर TLB में समानांतर में वर्चुअल एड्रेस V2 दिखता है जो कि पीटीई (वस्तुतः अनुक्रमित) एल 2 कैश से प्राप्त होता है।
  • क्योंकि V2 एक निर्देश का पता नहीं है, यह L1 अनुदेश कैश के माध्यम से नहीं जाता है; और क्योंकि V2 सामान्य उपयोगकर्ता डेटा का पता नहीं है, यह L1 डेटा कैश के माध्यम से नहीं जाता है। V2 को शुरू में L2 एकीकृत कैश (एक एकीकृत निर्देश + डेटा + PTE कैश) में खिलाया जाता है। देखें "कैश पदानुक्रम उदाहरण"
  • यदि L2 कैश (या L3 या कोई अन्य वस्तुतः अनुक्रमित कैश) में PTE समाहित है, तो VHPT कैश मेमोरी से PTE प्राप्त करता है और TL1 में V1 के लिए PTE स्थापित करता है, और उस में शारीरिक पते का उपयोग अनुवाद करने के लिए किया जाता है। मूल वर्चुअल पता V1 भौतिक RAM पते में, अंततः OS से किसी भी सहायता के बिना पूरी तरह से हार्डवेयर में उस डेटा या निर्देश को प्राप्त करना।
  • यदि वस्तुतः अनुक्रमित कैश के सभी स्तर विफल हो जाते हैं, लेकिन यह दूसरा टीएलबी लुकअप V2 के लिए सफल होता है, तो वीएचपीटी शारीरिक रूप से अनुक्रमित कैश या मुख्य मेमोरी से पीटीई प्राप्त करता है, टीटीबी में वी 1 के लिए पीटीई को स्थापित करता है, और उस में भौतिक पता। PTE का उपयोग मूल वर्चुअल एड्रेस V1 को फिजिकल रैम एड्रेस में ट्रांसलेट करने के लिए किया जाता है।
  • यदि यह दूसरा टीएलबी लुकअप विफल हो जाता है, तो हार्डवेयर वीएचपीटी वॉकर एक वीएचपीटी ट्रांसलेशन फाल्ट के साथ छोड़ देता है।
  • जब वीएचपीटी ट्रांसलेशन फाल्ट होता है, तो सीपीयू ओएस में फंस जाता है। ओएस को यह पता लगाना है कि क्या गलत हुआ और चीजों को ठीक करना है:
  • (ए) शायद V2 वाले पृष्ठ को वर्तमान में डिस्क पर स्वैप किया गया है, इसलिए OS इसे रैम में पढ़ता है और असफल निर्देश को फिर से शुरू करता है, या
  • (बी) शायद एक छोटी गाड़ी कार्यक्रम कुछ अवैध स्थान को पढ़ने या लिखने या निष्पादित करने की कोशिश कर रहा है, और ओएस प्रक्रिया को समाप्त करता है, या
  • (ग) विभिन्न प्रकार के अभिगम को फँसाने के लिए OS लेखक इस तंत्र का उपयोग करने के लिए कई अन्य तरकीबें करते हैं - V1 वाले पृष्ठ को लोड करें जिसे डिस्क से अदला-बदली किया जा सकता है; नए कार्यक्रमों को डिबग करने के लिए उपयोग किए जाने वाले विभिन्न जाल; सीपीयू पर "डब्ल्यू ^ एक्स" का अनुकरण करने के लिए जो सीधे समर्थन नहीं करते हैं; कॉपी-ऑन-राइट का समर्थन करने के लिए; आदि।

थॉमस डब्ल्यू बर्र, एलन एल। कॉक्स, स्कॉट रिक्सनर के पेज 2 पर आरेख। "ट्रांसलेशन कैशिंग: स्किप, डोंट वॉक (पेज टेबल)" जो "एमएमयू कैश द्वारा संग्रहीत प्रविष्टियां" और "एल 2 डेटा कैश द्वारा संग्रहीत प्रविष्टियों" के बीच एक रेखा खींचता है। (यह नए सीपीयू डिजाइन करने वाले लोगों के लिए एक उपयोगी पेपर हो सकता है , जो "इलेक्ट्रॉनिक्स डिजाइन" के लिए पूरी तरह से विषय है)।

स्टीफन एरानियन और डेविड मोजबर्गर। "IA-64 लिनक्स कर्नेल में वर्चुअल मेमोरी" और उलरिच ड्रेपर। "प्रत्येक प्रोग्रामर को मेमोरी के बारे में क्या पता होना चाहिए" (यह ऑपरेटिंग सिस्टम लिखने वाले लोगों के लिए एक उपयोगी पेपर हो सकता है जो IA-64 पेज टेबल के साथ सौदा करते हैं, जो ED के लिए थोड़ा ऑफ-टॉपिक है - शायद "ऑपरेटिंग- के साथ स्टैक ओवरफ्लो " सिस्टम "टैग या " ओसदेव "टैग या OSDev.org विकी उस विषय के लिए एक बेहतर स्थान होगा)।

इंटेल के पृष्ठ 533 पर तालिका ए -10। "Intel® 64 और IA-32 आर्किटेक्चर सॉफ्टवेयर डेवलपर मैनुअल" "PAGE_WALKS.CYCLES ... यह संकेत दे सकता है कि अधिकांश पेज-वॉक कैश से संतुष्ट हैं या L2 कैश मिस का कारण हैं।"


मुझे उत्तर पसंद है, लेकिन मैं शायद बहुत से ऐसे लोगों में से एक हूं जिनके पास आरामदायक विशेषज्ञता देने के लिए आवश्यक विशेषज्ञता नहीं है जो शायद एक अच्छी तरह से योग्य अपोटेट है। जैसा कि अन्य विशेषज्ञ सत्यापित करते हैं कि मैं आपके द्वारा पहले से अर्जित रेप दूंगा।
कोर्तुक

मेरा मानना ​​है कि यह सही नहीं है। TLB लुकअप के बारे में बुलेट 1 + 2 सही AFAICT है, लेकिन 3 नहीं है। X86 (या x86-64) पर पेज टेबल चलता है सॉफ्टवेयर में संभाला नहीं जाता है (अपवाद लागू होता है, बाद में देखें) लेकिन हार्डवेयर में। यानी जब सीपीयू यह निर्धारित करता है कि वह टीएलबी का उपयोग करके पते को हल नहीं कर सकता है, तो यह सीआर 3 रजिस्टर द्वारा इंगित तालिका में शुरू होने वाले पृष्ठ तालिकाओं को स्वयं चलाएगा। यदि यह रिज़ॉल्यूशन असफल है तो ही यह सीपीयू के पेज फॉल्ट हैंडलर को लागू करेगा। अपवाद वर्चुअलाइजेशन एक्सटेंशन है जहां कुछ मोड में हाइपरवाइजर एक पेज की गलती को हल करेगा जो अतिथि में होता है।
मोर्टी

मुझे नहीं लगता कि x86 के पास सॉफ्टवेयर TLB अपडेट करने का एक तरीका है। आईएसए जो सॉफ्ट-टीएलबी हैंडलिंग की अनुमति देते हैं, उनके पास टीएलबी प्रविष्टियों को संशोधित करने के लिए एसडब्ल्यू के लिए विशेष निर्देश हैं, लेकिन मुझे नहीं लगता कि x86 के पास invlpgकोई अन्य टीएलबी कैशिंग को दिए गए पुण्य ऐड के लिए अमान्य करने के अलावा है। यदि एचडब्ल्यू पेजवॉक उस आभासी पते के लिए एक प्रविष्टि नहीं ढूंढता है, या प्रवेश की अनुमतियों तक पहुंच की अनुमति नहीं देता है, तो आपको #PFअपवाद मिलता है। ओएस हैंडल करता है कि पेज टेबल को अपडेट करने से (संभवतः डिस्क से डेटा में पेजिंग के बाद, या कॉपी-ऑन-राइट करने पर), और फिर फिर से शुरू होने पर फाल्टिंग लोड / स्टोर फिर से चलेगा और एचडब्ल्यू पेजवॉक सफल होगा।
पीटर कॉर्डेस


4

मैं इस बात से सहमत हूं कि यह एक कंप्यूटर आर्किटेक्चर स्टैकएक्सचेंज में है, न कि एक इलेक्ट्रॉनिक्स स्टैकएक्सचेंज, लेकिन चूंकि यह यहां है:

@davidcary सही है।

कुछ इतिहास:

इंटेल x86 पेज टेबल वॉक को पी 5, उर्फ ​​पेंटियम तक सभी तरह से कैश नहीं किया गया था। अधिक सटीक रूप से, पेज टेबल वॉक मेमोरी एक्सेस कैश नहीं थे, कैश नहीं किया गया। चूंकि उस समय तक की अधिकांश मशीनें राइट-थ्रू थीं, इसलिए उन्हें कैश के अनुरूप मूल्य प्राप्त हुए। लेकिन वे कैश स्नूप नहीं करते थे।

P6, उर्फ ​​पेंटियम प्रो, और AFAIK सभी बाद के प्रोसेसर पेज टेबल वॉक को कैश तक पहुंचने और कैश से खींचे गए मूल्य का उपयोग करने की अनुमति दी गई थी। इस प्रकार, उन्होंने राइट-बैक कैश के साथ काम किया। (आप निश्चित रूप से, एमटीआरआरएस द्वारा परिभाषित, अनुपलब्ध स्मृति में पृष्ठ तालिकाओं को रख सकते हैं। लेकिन यह एक बड़ा प्रदर्शन नुकसान है, हालांकि यह ओएसस को डीबग करने के लिए उपयोगी हो सकता है।)

वैसे, यह "पेज टेबल वॉक मेमोरी एक्सेस डेटा एक्सेस को कैश कर सकता है" से अलग है "पेज टेबल एंट्रीज को टीएलबी ट्रैंसलेशन लुकसाइड बफर में संग्रहीत (कैश्ड) किया जा सकता है।" कुछ मशीनों पर TLB को "ट्रांसलेशन कैश" कहा जाता है।

एक अन्य संबंधित मुद्दा यह है कि पृष्ठ तालिकाओं के आंतरिक नोड्स को अभी भी अधिक TLB- जैसे डेटास्ट्रेक्टर्स, जैसे PDE-cache में कैश किया जा सकता है।

एक प्रमुख अंतर: डेटा कैश सुसंगत है, और स्नूप किया गया है। लेकिन टीएलबी और पीडीई कैश स्नूप नहीं हैं, यानी सुसंगत नहीं हैं। लब्बोलुआब यह है कि, चूंकि पृष्ठ तालिकाओं को गैर-समरूप TLB और PDE कैश आदि में कैश्ड किया जा सकता है, इसलिए सॉफ़्टवेयर को स्पष्ट रूप से व्यक्तिगत प्रविष्टियों या बल्क समूहों (जैसे, संपूर्ण TLB), जब पृष्ठ तालिका प्रविष्टियाँ जो इतनी हो सकती हैं, को स्पष्ट रूप से फ्लश करना चाहिए। कैश्ड बदल दिए जाते हैं। कम से कम जब "खतरनाक" तरीके से बदला जाता है, तो RW-> R-> I, या पते बदलने से।

मुझे लगता है कि यह कहना उचित है कि हर बार एक गैर-सुसंगत टीएलबी जैसी कैशिंग जोड़ी गई है, कुछ ओएस टूट गए हैं, क्योंकि यह अंतर्निहित धारणाएं थीं कि यह नहीं किया जा रहा था।


एक नया COMP। मेहराब। se का प्रस्ताव "3 महीने पहले" शुरू हुआ। मुझे लगता है कि पहले एक ऐसा क्षेत्र था जिसने इसे कभी भी क्षेत्र से बाहर नहीं बनाया (पर्याप्त अनुयायी नहीं?)।
पॉल ए। क्लेटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.