जवाबों:
इसका उत्तर हां है, और यह पारदर्शी रूप से किया गया है (बशर्ते त्रुटियों का पता लगाने के लिए आपके पास ईसीसी मेमोरी हो और आपका कर्नेल संस्करण कम से कम 2.6.30 सुरक्षित रूप से काम करने के लिए जारी रहे)।
मूल रूप से, आपकी मेमोरी को प्रोसेसर से प्रत्येक रीड पर चेक किया जाता है, और समय-समय पर स्क्रब किया जाता है *, त्रुटि सुधार कोड (ईसीसी) के साथ स्थिरता की जांच करने के लिए। यदि कोई त्रुटि हुई है, तो आपको मशीन चेक अपवाद मिलता है, जिसे तब लॉग किया जाता है और mcelog ( http://www.mcelog.org/ ) द्वारा पकड़ा जाता है ।
यदि आपकी त्रुटि सही थी, तो यह एक "टपका हुआ बाल्टी" काउंटर बढ़ाता है, जो एक भौतिक डीआईएमएम का कारण बनता है जो अक्सर एक दूसरे से पारदर्शी रूप से प्रतिस्थापित होने में विफल रहता है। इस प्रकार आपके मेमोरी पेज को एक नए स्थान पर कॉपी किया जाता है, आपके वर्चुअल मेमोरी एड्रेस को नए पेज पर इंगित करने के लिए अपडेट किया जाता है, और पुराने पेज को ओएस द्वारा चिह्नित किया जाता है क्योंकि अब इसका उपयोग नहीं किया जाएगा।
इसे लिनक्स पर "सॉफ्ट-ऑफलाइनिंग" (और सोलारिस पर मेमोरी पेज रिटायरमेंट, मुझे अन्य ओएस के बारे में पता नहीं है) कहा जाता है।
यदि आपकी त्रुटि सही नहीं थी, लेकिन जिसे "हार्ड-ऑफलाइनिंग" कहा जाता है, वह यह है कि आपका मेमोरी पेज सामान्य ऑपरेटिंग सिस्टम मेमोरी प्रबंधन से हटा दिया जाता है, और आपका एप्लिकेशन मारा जाता है (एनबी: कुछ कैटलेबल साइबस सिग्नल द्वारा जो आपको बताता है कि कहां है त्रुटि हुई, लेकिन यह दुर्लभ है कि इसकी देखभाल न करें और इसे पकड़ने की कोशिश करें)। यदि आपका मेमोरी पेज एक फाइल से मैप किया गया है और साफ है, तो ओएस प्रक्रिया को मारने के बजाय इसे दूसरे भौतिक स्थान पर पारदर्शी रूप से पुनः लोड कर सकता है।
आप mcelog पर अधिक पढ़ सकते हैं, बहुत सारे कॉन्फ़िगरेशन विकल्प हैं, आप अन्य व्यवहारों को ट्रिगर करने के लिए प्राप्त कर सकते हैं, विकल्प, और अन्य लीड जो पढ़ना है और कैसे सुनिश्चित करें कि आपके सिस्टम पर mcelog चल रहा है।
* स्क्रबिंग, या "पैट्रोल स्क्रबिंग" में मेमोरी पढ़ना, त्रुटियों के लिए ईसीसी के खिलाफ जांच करना, और त्रुटि का पता चलने पर सही मेमोरी शब्दों के साथ ओवरराइट करना शामिल है। गश्ती स्क्रबिंग शब्द का उपयोग मेमोरी रीड में त्रुटियों पर गलत डेटा को ओवरराइट करने के लिए किया जाता है, जिसे कभी-कभी "डिमांड स्क्रबिंग" कहा जाता है। स्क्रबिंग एक हार्डवेयर प्रक्रिया है जिसे सक्षम किया जा सकता है, आमतौर पर BIOS के माध्यम से।
यह वास्तव में एक बुरा विचार है। मेमोरी को एक त्वरित स्वीप में मज़बूती से परीक्षण नहीं किया जा सकता है। यही कारण है कि memtest86 जैसे सॉफ्टवेयर मेमोरी का परीक्षण करने के लिए विभिन्न बिट पैटर्स के साथ कई पास का उपयोग करते हैं। समाधान:
मेमरेस्टोरी के साथ टेस्ट मेमोरी , अधिमानतः लंबी परीक्षा, इसे रात भर चलाना छोड़ दें, इसमें लंबा समय लगेगा।
यदि खराब मेमोरी का पता लगाया जाता है, तो memmap
कर्नेल पैरामीटर का उपयोग करके कर्नेल को उस मेमोरी का उपयोग न करने के लिए मजबूर करें:
memmap = nn [केएमजी] $ एस एस [केएमजी] [KNL, ACPI] आरक्षित विशिष्ट मेमोरी को चिह्नित करें। स्मृति का उपयोग क्षेत्र, ss से ss + nn तक। उदाहरण: 0x18690000-0x1869ffff से मेमोरी हटाएं memmap = 64K $ 0x18690000 या memmap = 0x10000 $ 0x18690000
इसके अलावा, आप ECC मेमोरी का उपयोग कर सकते हैं जो 1-बिट त्रुटियों को ठीक करेगा और आपकी मेमोरी में स्वतः ही 2-बिट त्रुटियों का पता लगाएगा (और यदि ऐसा होता है तो आप अनधिकृत मेमोरी समस्याओं के बारे में कर्नेल से लॉग संदेश प्राप्त करेंगे)
पोस्ट और उत्तर इस मुद्दे को गलत समझते हैं। मेमोरी स्क्रबिंग का उद्देश्य सुधारात्मक एकल बिट त्रुटियों को अचूक डबल त्रुटियों में बदलने से रोकना है। स्क्रबर केवल सभी भौतिक मेमोरी (ऐसा करने के लिए कैशे छूटने के लिए मजबूर करना) कभी-कभी होता है। यदि कोई एकल बिट त्रुटियां हैं, तो उन्हें ठीक किया जाएगा (और सुधार को तुलना-और-अदला-बदली का उपयोग करके सही मान को फिर से लिखना होगा), इस प्रकार त्रुटि को साफ़ करना।
अन्यथा, अगर एक शब्द में दूसरी त्रुटि होती है जिसमें पहले से ही एक त्रुटि है, तो पूरा शब्द अपरिवर्तनीय होगा और ओएस को कुछ कठोर करना होगा।
स्क्रबिंग महत्वपूर्ण है क्योंकि इसके बिना, मेमोरी जो पढ़ी जाती है लेकिन लिखी नहीं जाती है (जैसे कोड पृष्ठ) समय के साथ त्रुटियों को जमा कर सकते हैं।
यदि आपके पास ECC मेमोरी है, तो आप https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edac पर करीब से देख सकते हैं । (मैंने पाया "sdram_scrub_rate" विशेष रूप से दिलचस्प है।)
(यदि यह लिंक किसी बिंदु पर टूट जाता है (यह वास्तव में नहीं होना चाहिए) तो मैं उपयुक्त लिनक्स प्रलेखन डाउनलोड करने और "स्क्रब" की खोज करने का सुझाव दूंगा।)