क्या लिनक्स स्क्रब मेमोरी कर सकता है?


10

क्या लिनक्स में मेमोरी को "स्क्रब" करने के लिए एक तंत्र है? उदाहरण के लिए मेमोरी और मार्किंग क्षेत्रों को गंदे के रूप में परीक्षण करना यदि वे विफल हो जाते हैं ताकि सिस्टम खराब रैम टेप स्थापित होने के बावजूद "सुरक्षित रूप से" काम करना जारी रख सके ?!

जवाबों:


2

इसका उत्तर हां है, और यह पारदर्शी रूप से किया गया है (बशर्ते त्रुटियों का पता लगाने के लिए आपके पास ईसीसी मेमोरी हो और आपका कर्नेल संस्करण कम से कम 2.6.30 सुरक्षित रूप से काम करने के लिए जारी रहे)।

मूल रूप से, आपकी मेमोरी को प्रोसेसर से प्रत्येक रीड पर चेक किया जाता है, और समय-समय पर स्क्रब किया जाता है *, त्रुटि सुधार कोड (ईसीसी) के साथ स्थिरता की जांच करने के लिए। यदि कोई त्रुटि हुई है, तो आपको मशीन चेक अपवाद मिलता है, जिसे तब लॉग किया जाता है और mcelog ( http://www.mcelog.org/ ) द्वारा पकड़ा जाता है ।

यदि आपकी त्रुटि सही थी, तो यह एक "टपका हुआ बाल्टी" काउंटर बढ़ाता है, जो एक भौतिक डीआईएमएम का कारण बनता है जो अक्सर एक दूसरे से पारदर्शी रूप से प्रतिस्थापित होने में विफल रहता है। इस प्रकार आपके मेमोरी पेज को एक नए स्थान पर कॉपी किया जाता है, आपके वर्चुअल मेमोरी एड्रेस को नए पेज पर इंगित करने के लिए अपडेट किया जाता है, और पुराने पेज को ओएस द्वारा चिह्नित किया जाता है क्योंकि अब इसका उपयोग नहीं किया जाएगा।

इसे लिनक्स पर "सॉफ्ट-ऑफलाइनिंग" (और सोलारिस पर मेमोरी पेज रिटायरमेंट, मुझे अन्य ओएस के बारे में पता नहीं है) कहा जाता है।

यदि आपकी त्रुटि सही नहीं थी, लेकिन जिसे "हार्ड-ऑफलाइनिंग" कहा जाता है, वह यह है कि आपका मेमोरी पेज सामान्य ऑपरेटिंग सिस्टम मेमोरी प्रबंधन से हटा दिया जाता है, और आपका एप्लिकेशन मारा जाता है (एनबी: कुछ कैटलेबल साइबस सिग्नल द्वारा जो आपको बताता है कि कहां है त्रुटि हुई, लेकिन यह दुर्लभ है कि इसकी देखभाल न करें और इसे पकड़ने की कोशिश करें)। यदि आपका मेमोरी पेज एक फाइल से मैप किया गया है और साफ है, तो ओएस प्रक्रिया को मारने के बजाय इसे दूसरे भौतिक स्थान पर पारदर्शी रूप से पुनः लोड कर सकता है।

आप mcelog पर अधिक पढ़ सकते हैं, बहुत सारे कॉन्फ़िगरेशन विकल्प हैं, आप अन्य व्यवहारों को ट्रिगर करने के लिए प्राप्त कर सकते हैं, विकल्प, और अन्य लीड जो पढ़ना है और कैसे सुनिश्चित करें कि आपके सिस्टम पर mcelog चल रहा है।


* स्क्रबिंग, या "पैट्रोल स्क्रबिंग" में मेमोरी पढ़ना, त्रुटियों के लिए ईसीसी के खिलाफ जांच करना, और त्रुटि का पता चलने पर सही मेमोरी शब्दों के साथ ओवरराइट करना शामिल है। गश्ती स्क्रबिंग शब्द का उपयोग मेमोरी रीड में त्रुटियों पर गलत डेटा को ओवरराइट करने के लिए किया जाता है, जिसे कभी-कभी "डिमांड स्क्रबिंग" कहा जाता है। स्क्रबिंग एक हार्डवेयर प्रक्रिया है जिसे सक्षम किया जा सकता है, आमतौर पर BIOS के माध्यम से।


1
यह केवल तभी लागू होता है जब आपके पास अधिक महंगी ईसीसी मेमोरी हो।
Psusi

यह ईसीसी के साथ सभी यादों पर लागू होता है। यह समता हो (लेकिन तब आप सही नहीं कर सकते), SECDED, अधिक महंगी चिपकिल या कोई भी नया। DDR1 पहले से ही ECC को लागू कर सकता है, लेकिन यह सब इस बात पर निर्भर करेगा कि आप किस वास्तविक मॉडल का उपयोग करते हैं। "होम" बाजार में परंपरागत रूप से लचीलापन की कम आवश्यकता होती है, लेकिन सुपर कंप्यूटर 20 वर्षों से उनके साथ सुसज्जित हैं - सर्वर बीच में हैं।
सिम्बलि

1
मेरा मतलब था कि ईसीसी मेमोरी अधिक महंगी है (गैर ईसीसी की तुलना में) और इसलिए अधिकांश लोगों के पास नहीं है।
Psusi

1
अच्छी तरह से "ज्यादातर लोग" बहुत अस्पष्ट है। चाहे निवेश में कीमत देना आम बात हो और बिजली बाजार पर निर्भर करती है, जैसा कि मैंने कहा। मेरा औसत डेल लैपटॉप, जो अभी 2 साल का है, इसके साथ सुसज्जित है (मानक, कोई विशेष विकल्प नहीं पूछा गया)। यह अधिक से अधिक आम हो रहा है, क्योंकि सुविधाओं का लघुकरण डीआईएमएम को विभिन्न विकिरणों के लिए अधिक समझदार बनाता है।
Cimbali

1
Cimbali, जो "पैट्रोल स्क्रबिंग" (ECC मेमोरी वाले सिस्टम पर) करते हैं - bios फर्मवेयर (शायद smm मोड में, पारदर्शी रूप से OS कर्नेल के लिए) या कुछ सॉफ्टवेयर मोड में लिनक्स कर्नेल (कौन सा मॉड्यूल पैट्रोल स्क्रबिंग करते हैं)? ECC मेमोरी ने ecc रकम की जाँच नहीं की; ईसीसी की जांच करने के लिए, डेटा को पढ़ा जाना चाहिए (और मेमोरी कंट्रोलर में ईसीसी स्कीम राशि की जांच करेगा)। कुछ मेमोरी को अक्सर (सीपीयू पर सामान्य कार्यक्रमों द्वारा) पढ़ा जाता है, दूसरे को हफ्तों तक नहीं पढ़ा जा सकता है। पैट्रोल स्क्रबिंग हर दिन (इंटेल) या हर 1-48 घंटे में ईसीसी चेकिंग करने के लिए
पढ़ेगी

7

यह वास्तव में एक बुरा विचार है। मेमोरी को एक त्वरित स्वीप में मज़बूती से परीक्षण नहीं किया जा सकता है। यही कारण है कि memtest86 जैसे सॉफ्टवेयर मेमोरी का परीक्षण करने के लिए विभिन्न बिट पैटर्स के साथ कई पास का उपयोग करते हैं। समाधान:

  1. मेमरेस्टोरी के साथ टेस्ट मेमोरी , अधिमानतः लंबी परीक्षा, इसे रात भर चलाना छोड़ दें, इसमें लंबा समय लगेगा।

  2. यदि खराब मेमोरी का पता लगाया जाता है, तो memmap कर्नेल पैरामीटर का उपयोग करके कर्नेल को उस मेमोरी का उपयोग न करने के लिए मजबूर करें:

   memmap = nn [केएमजी] $ एस एस [केएमजी]
            [KNL, ACPI] आरक्षित विशिष्ट मेमोरी को चिह्नित करें।
            स्मृति का उपयोग क्षेत्र, ss से ss + nn तक।
            उदाहरण: 0x18690000-0x1869ffff से मेमोरी हटाएं
                     memmap = 64K $ 0x18690000
                     या
                     memmap = 0x10000 $ 0x18690000

इसके अलावा, आप ECC मेमोरी का उपयोग कर सकते हैं जो 1-बिट त्रुटियों को ठीक करेगा और आपकी मेमोरी में स्वतः ही 2-बिट त्रुटियों का पता लगाएगा (और यदि ऐसा होता है तो आप अनधिकृत मेमोरी समस्याओं के बारे में कर्नेल से लॉग संदेश प्राप्त करेंगे)


उन कर्नेल मापदंडों पर टिप के लिए धन्यवाद। क्या आपको लगता है कि आप कृपया स्पष्ट कर सकते हैं कि यह इतना बुरा विचार क्यों है और आप मेमोटेस्टी 86 (+) के समान तरीकों का उपयोग करके मेमोरी का एक हिस्सा क्यों नहीं देख सकते हैं? मुझे पता है कि अधिक विश्वसनीय परीक्षण के लिए अधिक सीपीयू समय की आवश्यकता होती है (और शायद एक ही बार में राम के बड़े टुकड़े) लेकिन यह शो स्टॉपर क्यों होना चाहिए? सीपीयू समय एक समस्या नहीं हो सकता है अगर एक लंबी पर्याप्त अवधि में फैल गया है और इसके अलावा मल्टी सीपीयू अधिक से अधिक मुख्यधारा को जन्म दे रहा है।
वैक्सहैड

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

haimg: प्रश्न: क्या VFS इस आरक्षित मेमोरी के लिए पेजिंग का प्रबंधन करेगा? मुझे लगता है कि यह नहीं हो सकता क्योंकि यह इसे दिखाई नहीं देगा।
जय डी।

1
@Waxhead मेमोरी स्क्रबिंग आमतौर पर हार्डवेयर का उपयोग करके BIOS स्तर पर किया जाता है। यदि सक्षम हो तो आपको गश्त स्क्रबिंग और डिमांड स्क्रबिंग के विकल्प खोजने चाहिए। यदि मेमोरी अखंडता आपके लिए महत्वपूर्ण है, जो निश्चित रूप से यह है यदि आप ईसीसी मेमोरी का उपयोग कर रहे हैं, तो इन विकल्पों को सक्षम करके प्राप्त की गई लघु प्रदर्शन हिट सार्थक है।
इयान

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

2

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

अन्यथा, अगर एक शब्द में दूसरी त्रुटि होती है जिसमें पहले से ही एक त्रुटि है, तो पूरा शब्द अपरिवर्तनीय होगा और ओएस को कुछ कठोर करना होगा।

स्क्रबिंग महत्वपूर्ण है क्योंकि इसके बिना, मेमोरी जो पढ़ी जाती है लेकिन लिखी नहीं जाती है (जैसे कोड पृष्ठ) समय के साथ त्रुटियों को जमा कर सकते हैं।


आपको क्या लगता है कि जब उत्तर को अंक के रूप में चिह्नित किया गया है तो उत्तर को समझने में चूक हुई?
डेव

1
डेव के जवाब के बावजूद, लैरी काफी सही है, सवाल का जवाब / करता है / गलत समझता है। सवाल पूछता है कि क्या लिनक्स एक मेमोरी स्क्रब कर सकता है, जिसका इस्तेमाल किया जाता है, जैसा कि लैरी सावधानी से बताते हैं, ईसीसी एच / डब्ल्यू द्वारा पता लगाए गए एकल बिट त्रुटियों को रोकने के लिए और अयोग्य 2 बिट त्रुटियों में बदलने से रोकते हैं। उत्तर यह बताता है कि किसी सॉफ़्टवेयर एप्लिकेशन का उपयोग करके पहली बार में उन त्रुटियों का पता कैसे लगाया जाए।
इयान

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

1

यदि आपके पास ECC मेमोरी है, तो आप https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edac पर करीब से देख सकते हैं । (मैंने पाया "sdram_scrub_rate" विशेष रूप से दिलचस्प है।)

(यदि यह लिंक किसी बिंदु पर टूट जाता है (यह वास्तव में नहीं होना चाहिए) तो मैं उपयुक्त लिनक्स प्रलेखन डाउनलोड करने और "स्क्रब" की खोज करने का सुझाव दूंगा।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.