राइट-बैक बनाम राइट-थ्रू कैशिंग?


93

मेरी समझ यह है कि दो तरीकों के बीच मुख्य अंतर यह है कि "राइट-थ्रू" विधि डेटा को तुरंत कैश के माध्यम से मुख्य मेमोरी में लिखा जाता है, जबकि "राइट-बैक" में डेटा "बाद के समय" में लिखा जाता है।

हमें अभी भी "बाद के समय" में स्मृति की प्रतीक्षा करने की आवश्यकता है इसलिए "राइट-थ्रू" का क्या लाभ है?


@EricWang मुझे लगता है कि आपका मतलब write backबेहतर प्रदर्शन है?
wlnirvana

@wlnirvana हाँ, आप सही हैं, यह मेरी लिपिकीय त्रुटि है। मैं इसे दूर करूंगा, और भविष्य में भ्रामक से बचने के लिए एक नई टिप्पणी में डालूंगा।
एरिक वांग

6
सीधे शब्दों में कहें, तो write backइसका प्रदर्शन बेहतर है, क्योंकि सीपीयू कैश पर लिखने की तुलना में मुख्य मेमोरी में लिखना बहुत धीमा है, और डेटा कम हो सकता है (इसका मतलब जल्द ही फिर से बदल सकता है, और पुराने संस्करण को मेमोरी में डालने की आवश्यकता नहीं है)। यह जटिल है, लेकिन अधिक परिष्कृत है, आधुनिक सीपीयू में अधिकांश मेमोरी इस नीति का उपयोग करती है।
एरिक वांग

मैं देखता हूं कि एक व्याख्यात्मक उत्तर दिया गया है। मैं आपको सलाह देता हूं कि राइट-बैक एल्गोरिथ्म को कवर करने के बाद राइट-अलोकेट, राइट-नोऑलोक टैग को देखें।
Çağlayan DÖKME

आपके प्रश्न का उत्तर यह है कि लिखने के माध्यम से, कैशिंग के माध्यम से, जब एक ही ब्लॉक के भीतर लिखा जाता है, तो केवल एक ही मुख्य मेमोरी में लिखने की आवश्यकता होती है। विवरण के लिए मेरा उत्तर देखें।
qwr

जवाबों:


110

मुख्य मेमोरी में राइट-थ्रू का लाभ यह है कि यह कंप्यूटर सिस्टम के डिजाइन को सरल बनाता है। राइट-थ्रू के साथ, मुख्य मेमोरी में हमेशा लाइन की अप-टू-डेट कॉपी होती है। इसलिए जब एक रीड किया जाता है, तो मुख्य मेमोरी हमेशा अनुरोधित डेटा के साथ उत्तर दे सकती है।

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

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

एक और बात - राइट-बैक आर्किटेक्चर सॉफ़्टवेयर पर जो मेमोरी-मैप्ड I / O रजिस्टरों को लिखता है, यह सुनिश्चित करने के लिए अतिरिक्त कदम उठाने होंगे कि राइट्स तुरंत कैश से बाहर भेजे जाएं। अन्यथा लेखन कोर के बाहर दिखाई नहीं देता है जब तक कि लाइन किसी अन्य प्रोसेसर द्वारा नहीं पढ़ी जाती है या लाइन को बेदखल नहीं किया जाता है।


7
मैमोरी-मैप्ड I / O के लिए, उन पतों को आमतौर पर अनकैप्ड के रूप में मैप किया जाता है। विश्वसनीयता बढ़ाने के लिए भी लिख सकते हैं (उदाहरण के लिए, यदि L1 में केवल समता संरक्षण है और L2 में ECC है)। के माध्यम से लिखें छोटे कैश के लिए भी अधिक लोकप्रिय है जो नो-राइट-एलोकेट का उपयोग करते हैं (यानी, एक लेखन मिस कैश को ब्लॉक आवंटित नहीं करता है, संभवतः हार्डवेयर के बहुत बाद से एल 1 क्षमता और एल 2 रीड / एल 1 फिल बैंडविड्थ की मांग को कम करता है)। के माध्यम से लिखने के लिए आवश्यकता के आसपास इस तरह के लेखन के लिए पहले से ही मौजूद है।
पॉल ए। क्लेटन

1
क्या यह जांचना संभव है कि मेरे कोर में मेरा कैश तरीका राइट-बैक है या नहीं?
कृत्रिम रूप से

4
यह कहना भ्रामक हो सकता है कि राइट-बैक अधिक जटिल है क्योंकि प्रोसेसर को मुख्य मेमोरी को रीड रिक्वेस्ट के जवाब देने से रोकना चाहिए। यह moreso है कि कैश इस बात पर नज़र रखता है कि डेटा (मुख्य मेमोरी के साथ संरेखित नहीं) क्या है और "गंदे बिट्स" का उपयोग करके क्या नहीं है, इस प्रकार यह संभव है कि मुख्य मेमोरी की जांच न करें।
स्टीविया संजय

@Shaowu "lshw" कमांड जो "अतुल्यकालिक आंतरिक राइट-बैक" जैसी कैश क्षमताओं को दिखाती है
mug896

मुझे अभी भी समझ में नहीं आया कि राइट-बैक में इस्तेमाल किए जाने वाले असली कदम क्या हैं, लेकिन बस इतना पता है कि यह जटिल है ... क्या आप इसके बारे में अधिक संसाधन / विवरण प्रदान कर सकते हैं?
कॉम्बिनेटरिक्स गाइ

10

इसे एक उदाहरण की मदद से देखते हैं। मान लीजिए कि हमारे पास एक सीधा मैप कैश है और राइट बैक पॉलिसी का उपयोग किया जाता है। इसलिए हमारे पास एक वैध बिट, एक गंदा बिट, एक टैग और कैश लाइन में डेटा फ़ील्ड है। मान लीजिए कि हमारे पास एक ऑपरेशन है: ए लिखें (जहां ए कैश की पहली पंक्ति में मैप किया गया है)।

क्या होता है कि प्रोसेसर से डेटा (ए) कैश की पहली पंक्ति को लिखा जाता है। मान्य बिट और टैग बिट सेट हैं। गंदा बिट 1 पर सेट है।

डर्टी बिट बस इंगित करता है कि कैश लाइन कभी लिखी गई थी क्योंकि इसे आखिरी बार कैश में लाया गया था!

अब मान लें कि एक और ऑपरेशन किया जाता है: E पढ़ें (जहां E को पहले कैश लाइन पर मैप किया गया है)

चूंकि हमारे पास डायरेक्ट मैप्ड कैश है, इसलिए पहली पंक्ति को केवल ई ब्लॉक द्वारा प्रतिस्थापित किया जा सकता है जिसे मेमोरी से लाया जाएगा। लेकिन चूंकि ब्लॉक अंतिम बार लाइन में लिखा गया है (ब्लॉक ए) मेमोरी में नहीं लिखा गया है (गंदे बिट द्वारा इंगित किया गया है), इसलिए कैश कंट्रोलर पहले ब्लॉक ए को मेमोरी में ट्रांसफर करने के लिए मेमोरी में वापस लिख देगा , फिर यह मेमोरी को रीड ऑपरेशन जारी करके ब्लॉक ई के साथ लाइन को बदल देगा। गंदा सा अब 0 पर सेट है।

तो वापस नीति लिखो गारंटी नहीं है कि ब्लॉक मेमोरी और उसके संबंधित कैश लाइन में समान होगा। हालाँकि जब भी लाइन को बदलने की बात होती है, तो सबसे पहले एक राइट बैक किया जाता है।

नीति के माध्यम से एक लेख सिर्फ विपरीत है। इसके अनुसार, मेमोरी में हमेशा अप-टू-डेट डेटा होगा। यानी अगर कैश ब्लॉक लिखा जाता है, तो मेमोरी भी उसी के अनुसार लिखी जाएगी। (गंदे बिट्स का कोई उपयोग नहीं)


7

शायद यह लेख आपको यहाँ लिंक करने में मदद कर सकता है

राइट-थ्रू: लिखने को कैश और बैकिंग स्टोर दोनों में सिंक्रोनाइज़ किया जाता है।

राइट-बैक (या लिखें-पीछे): लेखन केवल कैश के लिए किया जाता है। बदले जाने से ठीक पहले एक संशोधित कैश ब्लॉक स्टोर में वापस लिखा जाता है।

राइट-थ्रू: जब डेटा अपडेट किया जाता है, तो यह कैश और बैक-एंड स्टोरेज दोनों के लिए लिखा जाता है। यह मोड ऑपरेशन के लिए आसान है, लेकिन डेटा लेखन में धीमा है क्योंकि डेटा को कैश और स्टोरेज दोनों को लिखना पड़ता है।

राइट-बैक: जब डेटा अपडेट किया जाता है, तो यह केवल कैश पर लिखा जाता है। संशोधित डेटा बैक-एंड स्टोरेज के लिए केवल तब लिखा जाता है जब डेटा कैश से हटा दिया जाता है। इस मोड में तेज़ डेटा लिखने की गति है, लेकिन यदि स्टोरेज को अद्यतन डेटा लिखे जाने से पहले बिजली की विफलता होती है, तो डेटा खो जाएगा।


3

राइट-बैक और राइट-थ्रू वर्णन नीतियों के बारे में जब राइट हिट होता है, तब होता है जब कैश में अनुरोधित जानकारी होती है। इन उदाहरणों में, हम मानते हैं कि एक एकल प्रोसेसर कैश के साथ मुख्य मेमोरी में लिख रहा है।

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

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

लाभ यह है कि लेखन कैश की गति से हो सकता है, और यदि एक ही ब्लॉक के भीतर लेखन केवल मुख्य मेमोरी में लिखना होता है (जब पिछले ब्लॉक को बदला जा रहा है)। नुकसान यह है कि यह प्रोटोकॉल लागू करना कठिन है, मुख्य मेमोरी कैश के अनुरूप (सिंक में नहीं) सुसंगत नहीं हो सकती है, और पढ़ती है कि प्रतिस्थापन के परिणामस्वरूप मुख्य मेमोरी में गंदे ब्लॉकों के लेखन का कारण हो सकता है।

राइट टू मिस की नीतियां मेरी पहली कड़ी में विस्तृत हैं।

ये प्रोटोकॉल कई प्रोसेसर और कई कैश के साथ मामलों की देखभाल नहीं करते हैं, जैसा कि आधुनिक प्रोसेसर में आम है। इसके लिए, अधिक जटिल कैश सुसंगतता तंत्र की आवश्यकता होती है। कैश के लिए लिखने के तुरंत बाद कैश में सरल प्रोटोकॉल है, स्मृति में तुरंत परिलक्षित होता है।

अच्छे संसाधन:


0

राइट-बैक एक अधिक जटिल है और इसके लिए एक जटिल कैश कोहरेंस प्रोटोकॉल (MOESI) की आवश्यकता होती है, लेकिन यह इसके लायक है क्योंकि यह सिस्टम को तेज और कुशल बनाता है।

राइट-थ्रू का एकमात्र लाभ यह है कि यह कार्यान्वयन को बहुत सरल बनाता है और किसी भी जटिल कैश सुसंगतता प्रोटोकॉल की आवश्यकता नहीं होती है।


1
डब्ल्यूटी को अभी भी एक सुसंगत प्रोटोकॉल की आवश्यकता है। एक कोर से एक स्टोर को अभी भी अन्य कैश में प्रतियां अमान्य करने की आवश्यकता है, ताकि वे बासी डेटा को अनिश्चित काल तक पढ़ते न रहें। परमाणु आरएमडब्ल्यू को कुछ विशेष समर्थन की आवश्यकता है। यह सब WT के साथ आसान है, मुझे लगता है, लेकिन आवश्यक सामंजस्य अभी भी कुछ जटिल है।
पीटर कॉर्डेस

या हो सकता है कि आप L1 / L2 (और शायद अधिक) के कैश पदानुक्रम के साथ एकल-कोर प्रणाली के बारे में बात कर रहे थे। उस स्थिति में, आपको वास्तव में बाहरी कैश के माध्यम से प्राप्त होने वाले आंतरिक कैश के लिए MESI / MOESI का उपयोग नहीं करना है, जब तक कि आप कैश-सुसंगत DMA का समर्थन नहीं करना चाहते हैं जो बाहरी-सबसे कैश दिशा तक पहुंच सकते हैं। लेकिन फिर भी आपको आंतरिक कैश को अमान्य करने के लिए DMA लिखने के लिए सुसंगतता की आवश्यकता है।
पीटर कॉर्ड्स

1
कैश सुसंगतता प्रोटोकॉल केवल तभी आवश्यक है जब कई कैश / प्रोसेसर के लिए समर्थन की आवश्यकता होती है या कुछ डीएमए जैसी मेमोरी को प्रभावित करता है। सिंगल प्रोसेसर सिस्टम के लिए भी राइट-थ्रू इसके फायदे हैं, अर्थात् गति लिखें।
qwr

DMA के लिए OS I / O के बाद कैश को स्पष्ट रूप से फ्लश कर सकता है। सॉफ्टवेयर होने के कारण यह कम कुशल है।
20
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.